Рано или поздно все мы приходить к тому что нам не хватает подключения к Сети в наших проектах на платформе Ардуино. Действительно как же в 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