ESP8266: Революція в світі інтернету речей

    
 
У не настільки далекі часи підтримка пристроєм Wi-Fi-з'єднання була дорога, громіздка і не енергоефективна. Розробники змушені були використовувати радіоінтерфейси на базі різних конкуруючих рішень. Вигадували свої «велосипеди» на рівні протоколів. І попадали в заповітний Wi-Fi тільки з використанням додаткових пристроїв, що реалізують функціонал моста. Стоивших вельми помітні гроші.
 
Але життя йде. Технології стрімко розвиваються. Термін «Інтернет речей» все частіше на слуху. Багатьом виробникам мікросхем, великим і не дуже, нарешті стало актуальним вирішити одвічну проблему інтеграції Wi-Fi в невеликі і недорогі пристрої. Щоб мати можливість підключити їх безпосередньо в інфраструктуру, вже наявну майже в кожній оселі. Щоб от'есть якомога більший шматок прийдешнього нового ринку підключаються до мережі простих пристроїв.
 
У 2014 році відразу кілька виробників оголосили про випуск відповідних наборів мікросхем. Сьогодні мова піде про чіп ESP8266 китайської компанії Espressif. Модулями UART-WIFI на базі цього чіпа вже затоплений весь Китай і коштують вони всього від $ 4,5 (з & nbsp; безкоштовної міжнародної доставкою).
 
 
 
 

UART-WIFI міст на ESP8266

Модуль вже можна купити на Taobao, AliExpress і в безлічі інших місць. Доступною документації мало, але керівництво по роботі через AT-команди можна вільно скачати вже навіть не тільки китайською мовою. У мережі починають з'являтися приклади роботи з модулем для Arduino:
 
 
 
 
#include <SoftwareSerial.h>
   #define SSID "xxxxxxxx"
   #define PASS "xxxxxxxx"
   #define DST_IP "220.181.111.85" //baidu.com
   SoftwareSerial dbgSerial(10, 11); // RX, TX
   void setup()
   {
     // Open serial communications and wait for port to open:
     Serial.begin(57600);
     Serial.setTimeout(5000);
     dbgSerial.begin(9600); //can't be faster than 19200 for softserial
     dbgSerial.println("ESP8266 Demo");
     //test if the module is ready
     Serial.println("AT+RST");
     delay(1000);
     if(Serial.find("ready"))
     {
       dbgSerial.println("Module is ready");
     }
     else
     {
       dbgSerial.println("Module have no response.");
       while(1);
     }
     delay(1000);
     //connect to the wifi
     boolean connected=false;
     for(int i=0;i<5;i++)
     {
       if(connectWiFi())
       {
         connected = true;
         break;
       }
     }
     if (!connected){while(1);}
     delay(5000);
     //print the ip addr
     /*Serial.println("AT+CIFSR");
     dbgSerial.println("ip address:");
     while (Serial.available())
     dbgSerial.write(Serial.read());*/
     //set the single connection mode
     Serial.println("AT+CIPMUX=0");
   }
   void loop()
   {
     String cmd = "AT+CIPSTART=\"TCP\",\"";
     cmd += DST_IP;
     cmd += "\",80";
     Serial.println(cmd);
     dbgSerial.println(cmd);
     if(Serial.find("Error")) return;
     cmd = "GET / HTTP/1.0\r\n\r\n";
     Serial.print("AT+CIPSEND=");
     Serial.println(cmd.length());
     if(Serial.find(">"))
     {
       dbgSerial.print(">");
       }else
       {
         Serial.println("AT+CIPCLOSE");
         dbgSerial.println("connect timeout");
         delay(1000);
         return;
       }
       Serial.print(cmd);
       delay(2000);
       //Serial.find("+IPD");
       while (Serial.available())
       {
         char c = Serial.read();
         dbgSerial.write©;
         if(c=='\r') dbgSerial.print('\n');
       }
       dbgSerial.println("====");
       delay(1000);
     }
     boolean connectWiFi()
     {
       Serial.println("AT+CWMODE=1");
       String cmd="AT+CWJAP=\"";
       cmd+=SSID;
       cmd+="\",\"";
       cmd+=PASS;
       cmd+="\"";
       dbgSerial.println(cmd);
       Serial.println(cmd);
       delay(2000);
       if(Serial.find("OK"))
       {
         dbgSerial.println("OK, Connected to WiFi.");
         return true;
         }else
         {
           dbgSerial.println("Can not connect to the WiFi.");
           return false;
         }
       }

 
 
 
 

Цікава схемотехніка, порівняння з конкурентами

З прес-релізів Espressif помітно, що виробник пишається ступенем інтеграції компонентів свого чіпа. Дійсно, типова обв'язка мікросхеми складається всього з семи елементів. Плата модуля практично порожня, компонентів — мізерна кількість. Все це природно буде позначатися на вартості кінцевих пристроїв у бік здешевлення.
 
Якщо поглянути на продукцію конкурентів, вийгриш мінімізації штатної обв'язки стає ще більш очевидним. Так виглядає типовий модуль на базі MT7681, конкуруючого рішення від Mediatek:
 
 
 
Ось модуль на базі чіпсета від Marvell, «a highly cost-effective, flexible and easy-to-use hardware / software platform to build a new generation of connected device»:
 
 
 

У чому революція?

З появою таких недорогих рішень навіть у домашніх розробників різних arduino-рішень «розумних будинків» з'являється недоступна досі можливість підключення своїх пристроїв в Wi-Fi-мережі. ESP8266 вже називають в інтернеті «вбивцею NRF24LE1». При навіть меншої вартості модулі на базі ESP8266 обіцяють набагато більше можливостей. Тепер в пристроях на Arduino можна буде просто і недорого реалізувати і повноцінний веб-інтерфейс, і зручний JSON API.
 
Просунуті розробники зможуть використовувати чіп в якості основного процесора в своїх рішеннях з бездротовими датчиками, пристроями керування світлом, водою і будь-якими іншими «речами», які оточують кожної людини в його повсякденному житті.
    
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.