Модуль ESP-01(esp8266) или WiFi для начинающих.

Рано или поздно все мы приходить к тому что нам не хватает подключения к Сети в наших проектах на платформе Ардуино. Действительно как же в 21 веке без статуса Онлайн )) И тут нам на выручку приходит  WiFI чип ESP8266 и готовые  модули на его основе. У меня в руках самый простой модуль (для новичков) ESP-01 :

Модуль устроен достаточно просто и имеет минимальный набор выводов :

  • ESP8266EX — сердце всего модуля.
  • P25Q80H (или другой чип) — Flash Memory на 1 Мбайт.
  • Кварц и обвязка со свето диодиками.

ESP8266EX

Китайский производитель Espressif сделал дешовый чип  с интерфейсом Wi-Fi и возможностью исполнять программы из внешней флеш-памяти с интерфейсом SPI. По сути это микроконтроллер и радио модуль для Wi-Fi в одном корпусе :

  • 80 MHz 32-bit процессор Tensilica.
  • IEEE 802.11 b/g/n Wi-Fi. Поддерживается WEP и WPA/WPA2.
  • 14 портов ввода-вывода(из них возможно использовать 11), SPI, I²C, I²S, UART, 10-bit АЦП. В нашем случае мы можем использовать только ограниченные выводы чипа.
  • Питание 2,2…3,6 В. Логика и питание чипа 3.3 В, будьте внимательны !  
  • Интегрированный стек TCP/IP. HTML

Выводы, подключение :

Возможности чипа очень большие, будем разбираться по степенно.

Выводы модуля :

  • VCC — плюс питания 3.3 В
  • GND — минус питания 3.3 В
  • TX — аппаратный UART.
  • RX — аппаратный UART.
  • RST — кратковременно подав на неё низкий логический уровень, модуль перезагрузиться. Лучше прижать ее через резистор 10 кОм к плюсу питания.
  • CH_PD(или по-другому EN) — служит для перевода модуля в энергосберегающий режим, в котором он потребляет очень маленький ток. Ну и снова — не будет лишним «прижать» эту ногу резистором на 10 кОм к плюсу питания.

По умолчанию во флешь-память ужа записана заводская прошивка с поддержкой АТ команд для управления чипом. Конечно можно залить и другие прошивки, но в этой статье мы будем работать именно в таком режиме с модулем. Суть проста по UART передаем команду, получаем ответ от модуля. Для этого нам потребуется  USB-to-Serial TTL конвертор что бы подключить модуль к компу. Так как у меня под рукой его нету то я буду использовать Arduino Nano в его качестве. 

Питание модуля отдельный вопрос. Пиковое потребление чипа может достигать 250 мА ( в datasheet указано 170 мА при использование Tx802.11b). Внимание! Этот модуль основан на 3.3 В логике, так что придется его питать от своего источника питания. Или через резисторный делитель(1 кОм и 2 кОм) с вывода +5 Ардуино. Выводы RX и TX надо тоже подключить через делитель  или через logic converter (например CD4050B).

Что бы Ардуино превратить в USB-to-Serial TTL конвертор зальем в контролер пустой скетч :

void setup() { }
void loop() { }

Далее Arduino нужно замкнуть RESET на GND.  Это изолирует процессор от I/O пинов. Альтернатива этому удаление микросхемы из «кроватки».  При этом выводы TX, RX устройства нужно подключить без перекрещивания. т.е. :

esp TX → ard TX
esp RX → ard RX

Подключаем все , открываем монитор портов в Arduino IDE и поехали.

Для простоты вы можете купить USB адаптер у наших Китайских партнеров.

AT-Команды.

Для на чало мы проверим  что все работает и  отправим в терминале:

AT

OK

Проверим  прошивку :

AT+GMR

AT version:1.2.0.0(Jul 1 2016 20:04:45)
SDK version:1.5.4.1(39cb9a32)
Ai-Thinker Technology Co. Ltd.
Dec 2 2016 14:21:16
OK

Для подключения Wi-Fi выберем режим модуля: доступны следующие режимы: 1 — STA, 2 — AP, 3 — Station+AP

AT+CWMODE=1

OK

Смотрим список точек доступа командой:

AT+CWLAP 
+CWLAP:(3,"MTSRouter-047188",-77,"00:1f:ce:ac:e4:de",2,-21,0)
+CWLAP:(3,"RT-WiFi_2958",-93,"78:96:82:44:29:58",4,10,0)
+CWLAP:(3,"Test",-63,"ac:f1:df:c9:a5:82",6,0,0)
+CWLAP:(3,"TP-LINK_4E54E0",-85,"f8:1a:67:4e:54:e0",6,103,0)
+CWLAP:(3,"GARNIER",-89,"60:a4:4c:df:83:38",6,-31,0)
+CWLAP:(2,"Oslik",-73,"bc:f6:85:cb:d7:53",7,-9,0)
+CWLAP:(3,"Keenetic-6619",-80,"e8:37:7a:9a:93:46",8,8,0)
+CWLAP:(2,"beeline-router_78",-90,"fc:75:16:4a:39:42",9,-26,0)
+CWLAP:(3,"ASUS",-91,"f4:6d:04:df:d3:e8",11,-14,0)
+CWLAP:(4,"Beeline_2G_F14986",-83,"78:94:b4:a3:8c:cc",11,-14,0)

OK

В скобках указывается: SECURITY, SSID, RSSI, BSSID, CHANNEL
SECURITY может принимать значения:
0 — OPEN, 1 — WEP, 2 — WPA-PSK, 3 — WPA2-PSK, 4 — MIXED (WPA-WPA2-PSK)

Подключаемся к нашей точке:

AT+CWJAP="Oslik","password" 
WIFI CONNECTED
WIFI GOT IP

OK

Посмотреть какой ip получил наш модуль:

AT+CIFSR
+CIFSR:STAIP,"192.168.0.55"
+CIFSR:STAMAC,"b4:e6:2d:22:f6:61"

OK

Все настройки запоминаются во флешь память, сбросить настройки на заводские можно командой:

AT+RESTORE

Задать скорость UART :

AT+CIOBAUD=9600

OK

Перезагрузить модуль :

AT+RST

OK
?)⸮⸮⸮@H

<⸮⸮⸮⸮@H⸮⸮!`̌⸮
⸮K⸮ZHRh|$ ⸮⸮ؤ⸮
Ai-Thinker Technology Co. Ltd.

ready

Команды делятся условно на три части : системные, Wi-Fi,TCP. Полный список команд можно посмотреть в datasheep. Ну а мы перейдем к командам режима TCP-сервера. На плате ESP-01 можно запустить TCP-сервер для приема-отправки данных или она может выступать TCP-клиентом для приема-отправки данных на сервер.
Для запуска TCP-сервера выполним следующие команды:

AT+CIPMODE=0

OK

0 — not data mode (сервер может отправлять данные клиенту и может принимать данные от клиента).
1 — data mode (сервер не может отправлять данные клиенту, но может принимать данные от клиента).

Устанавливаем возможность множественных соединений:

AT+CIPMUX=1

OK

0 — single connection.
1 — multiple connection.

Запускаем сервер на порту 80:

AT+CIPSERVER=1,80 (mode,port)

OK

0 — to close server
1 — to open server

Теперь можно подключиться к ESP-01 и отправить-принять какие-нибудь данные. На потребуется telnet клиент, я использую PuTTY. При подключение модуль нам сообщает что подключился клиент и показывает нам id клиента.

0,CONNECT

+IPD,0,21:⸮⸮⸮⸮ ⸮⸮⸮⸮'⸮⸮⸮⸮⸮⸮

Посмотреть список активных подключений к ESP-01 можно командой AT+CIPSTATUS
Пример:

AT+CIPSTATUS

+CIPSTATUS:0,"TCP","192.168.0.19",57907,80,1
OK

Закрыть активное соединение можно командой

AT+CIPCLOSE=id или все соединения AT+CIPCLOSE без параметров.

AT+CIPCLOSE=0 
0,CLOSED

OK

Отправляем данные с ESP-01 на ПК. Для режима Single connection отправка идет так :AT+CIPSEND=length, для режима Multiple connection отправка идет так: AT+CIPSEND=id,length.

AT+CIPSEND=0,6  (6 байт)

OK
> 
Hellow

busy s...
Recv 6 bytes
SEND OK