ESP8266: Революция в мире интернета вещей

в 18:18, , рубрики: arduino, diy или сделай сам, internet of everything, internet of things, Беспроводные технологии

ESP8266: Революция в мире интернета вещей

В не столь далекие времена поддержка устройством Wi-Fi-соединения была дорога, громоздка и не энергоэффективна. Разработчики вынуждены были использовать радиоинтерфейсы на базе различных конкурирующих решений. Выдумывали свои «велосипеды» на уровне протоколов. И попадали в заветный Wi-Fi только с использованием дополнительных устройств, реализующих функционал моста. Стоивших весьма заметные деньги.

Но жизнь идет. Технологии стремительно развиваются. Термин «Интернет вещей» все чаще на слуху. Многим производителям микросхем, большим и не очень, наконец-то стало актуальным решить извечную проблему интеграции Wi-Fi в небольшие и недорогие устройства. Чтобы иметь возможность подключить их напрямую в инфраструктуру, уже имеющуюся почти в каждом жилище. Чтобы отъесть как можно больший кусок грядущего нового рынка подключаемых к сети простых устройств.

В 2014 году сразу несколько производителей объявили о выпуске соответствующих наборов микросхем. Сегодня речь пойдет о чипе ESP8266 китайской компании Espressif. Модулями UART-WIFI на базе этого чипа уже наводнен весь Китай и стоят они всего от $4,5 (с бесплатной международной доставкой).

ESP8266: Революция в мире интернета вещей

UART-WIFI мост на ESP8266

Модуль уже можно купить на Taobao, AliExpress и во множестве других мест. Доступной документации мало, но руководство по работе через AT-команды можно свободно скачать уже даже не только на китайском языке. В сети начинают появляться примеры работы с модулем для Arduino:

ESP8266: Революция в мире интернета вещей

 #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.0rnrn";
     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(c);
         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;
         }
       }

ESP8266: Революция в мире интернета вещей

Интересная схемотехника, сравнение с конкурентами

Из пресс-релизов Espressif заметно, что производитель гордится степенью интеграции компонентов своего чипа. Действительно, типовая обвязка микросхемы состоит всего из семи элементов. Плата модуля практически пуста, компонентов — мизерное количество. Все это естественно будет сказываться на стоимости конечных устройств в сторону удешевления.

Если взглянуть на продукцию конкурентов, выйгрыш минимизации штатной обвязки становится еще более очевидным. Так выглядит типовой модуль на базе MT7681, конкурирующего решения от Mediatek:

ESP8266: Революция в мире интернета вещей

Вот модуль на базе чипсета от Marvell, «a highly cost-effective, flexible and easy-to-use hardware/software platform to build a new generation of connected device»:
ESP8266: Революция в мире интернета вещей

В чем революция?

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

Продвинутые разработчики смогут использовать чип в качестве основного процессора в своих решениях с беспроводными датчиками, устройствами управления светом, водой и любыми другими «вещами», которые окружают каждого человека в его повседневной жизни.

Автор: webself

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js