Работа с ESP8266: Первоначальная настройка, обновление прошивки, связь по Wi-Fi, отправка-получение данных на ПК

Sleuthhound 7 ноября 2014 в 12:03 233k
На Хабре уже было пару статей о чипе ESP8266 китайской компании Espressif. Статья №1 и Статья №2. Не так давно я получил плату ESP-01 для проведения тестирования. Кому интересно, прошу под кат.


Мной была заказана самая простая плата с ESP8266 — ESP-01, выглядит она так:



В старой ревизии платы на разьем были выведены только VCC, GND, URXD и UTXD.
В последней ревизии добавились RST, GPIO0, GPIO2 и CH_PD.

Всего есть 11 модификаций плат, различающихся количеством выводов и вариантом исполнения:
ESP-01: PCB antenna, after matching the distance to do about the open 400 meters, easy to use.
ESP-02: SMD package for submission limit, the antenna can be drawn with the IPX header casing.
ESP-03: SMD package, the built-in ceramic antenna technology, all available IO leads.
ESP-04: SMD package, customers can customize the antenna types, flexible design, all the IO leads.
ESP-05: SMD package, only leads to serial and RST pin, small external antenna.
ESP-06: bottom mount technology, leads all the IO ports, with metal shielding shell, can be had FCC CEcertification, recommended.
ESP-07: Semi-hole chip technology, all the IO leads, with metal shielding shell, can be had FCC CE certifiedIPX external antenna, can also be built-in ceramic antenna.
ESP-08: with the ESP-07, except that the antenna is in the form of customers can define their own.
ESP-09: Ultra-small size package, only 10 * 10 mm, four-layer board technology 1M bytes!..
ESP-10: SMD interface, narrow-body design, 10 mm wide, suitable for light with controller.
ESP-11: SMD interface, ceramic antenna, small volume.

Распиновка разъёма ESP-01:



Назначение выводов платы ESP-01 такое:
VCC, GND — питание платы (+3.3В);
URXD,UTXD — выводы RS232 толерантны к 3.3В
RST — Аппаратный сброс (reset)
GPIO0, GPIO2 — выводы GPIO
CH_PD — Chip enable, для работы должен быть подключен к +3.3В.

Для переключения в режим обновления прошивки нужно подать низкий уровень на GPIO0 и высокий на CH_PD.

Для подключения платы ESP-01 к ПК я использовал USB-to-RS232 преобразователь на FT232R с выходами TTL 3.3В, можно использовать например такой.
Питание ESP-01 нужно строго 3.3В, поэтому пришлось воспользоваться DC-DC преобразователем, можно использовать такой.

С базовой прошивкой плата ESP-01 управляется AT командами, поэтому нам потребуется программа-терминал, я использовал CoolTerm.

Возможно 2 варианта использования модуля:
1. Использование платы ESP-01 совместно с доп.микроконтроллером, который будет управлять модулем по UART.
2. Написание собственной прошивки для чипа ESP8266 и его использование как самодостаточного устройства.

Естественно более выгодным является 2-й вариант, тем более потенциал чипа ESP8266 достаточно велик.

Для начала мы попробуем вариант №1, то есть управлять платой ESP-01 через RS232.

Схема подключения очень простая:
Вывод VCC — питание платы (+3.3В);
Вывод GND — общий;
Выводы URXD,UTXD — подключаем к конвертеру USB-to-RS232 (в режиме 3.3В)
Вывод CH_PD — подключаем к питанию платы (+3.3В);

В терминале (CoolTerm) устанавливаем скорость COM-порта 57600. Установить нужно именно такую скорость, т.к. если в чипе ESP8266 стоит старая прошивка (а скорее всего это так и есть), то он будет работать только с такой скоростью порта.

Жмем Connect, вводим команду AT, в ответ должно прийти OK. Если все так, то плата работает, можно двигаться дальше.



Процедура обновления прошивки

Вводим команду AT+GMR — проверка версии AT и SDK, в ответ выдает 0016000902, где 0016 — версия SDK, 0901 — версия AT

На текущий момент (06.11.2014) уже доступна прошивка 0018000902 (Версия SDK — 0018, в версия AT — 0902)

Теперь можно и нужно обновить прошивку:
1. Качаем утилиту XTCOM отсюда.
2. Качаем прошивку ESP_8266_v0.9.2.2 AT Firmware.bin отсюда
3. Отключаем питание платы, вывод GPIO0 соединяем с общим проводом, включаем питание.
4. Запускаем XTCOM_UTIL.exe, переходим в Tools -> Config Device, выбираем COM-порт к которому подключена плата, ставим скорость порта 57600, жмем Open, потом Connect, программа должна сказать «Connect with target OK!», закрываем окно настроек. Переходим в меню API TEST, выбираем (4) Flash Image Download, указываем путь к файлу «ESP_8266_v0.9.2.2 AT Firmware.bin», адрес оставляем 0x00000, жмем DownLoad. Должна начаться загрузка прошивки, по окончании будет выдано сообщение.
5. Отключаем питание платы, вывод GPIO0 отсоединяем от общего провода, включаем питание, запускаем терминал (ВНИМАНИЕ! Меняем скорость порта на 9600), проверяем готовность платы командой AT и версию прошивки командой AT+GMR.

После обновления до версии 0018000902 изменится дефолтная скорость COM-порта с 57600 на 9600, но эту скорость в новой прошивке теперь можно задать командой AT+CIOBAUD. Смотрим AT+CIOBAUD=? доступные скорости и ставим командой AT+CIOBAUD=115200 скорость 115200, в ответ должно выдать ОК. Даем команду на рестарт: AT+RST. Меняем скорость порта в программе-терминал на 115200.

Пример:
AT 
OK
AT+CIOBAUD=? +CIOBAUD:(9600-921600)
OK
AT+CIOBAUD=115200 BAUD->115200
OK


Настройка подключения к Wi-Fi

Теперь попробуем подключить нашу плату ESP-01 к Wi-Fi точке доступа.
Выполняем следующие команды:
1. Устанавливаем режим работы Wi-Fi командой:
AT+CWMODE=<mode>
Доступны следующие режимы: 1 — STA, 2 — AP, 3 — BOTH
Пример:
AT+CWMODE=1
OK
2. Смотрим список точек доступа командой: AT+CWLAP
Пример
AT+CWLAP +CWLAP:(3,"WiFi-DOM.ru-0474",-85,"c8:d3:a3:30:17:40",8)
+CWLAP:(4,"Intersvyaz_516C",-89,"2c:ab:25:ff:51:6c",10)
+CWLAP:(4,"pletneva",-96,"f8:1a:67:67:2b:96",11)
+CWLAP:(4,"Test",-69,"64:70:02:4e:01:4e",13)
OK
В скобках указывается: SECURITY, SSID, RSSI, BSSID, CHANNEL
SECURITY может принимать значения:
0 — OPEN, 1 — WEP, 2 — WPA-PSK, 3 — WPA2-PSK, 4 — MIXED (WPA-WPA2-PSK)
3. Подключаемся в нашей AP командой:
AT+CWJAP="SSID","PASSWORD"
Пример:
AT+CWJAP="Test","habrahabr" 
OK
Подключение длится 2-5 секунд, после чего в случае успешного выполнения появится OK.
3. Посмотрим какой IP адрес получила наша плата командой: AT+CIFSR
AT+CIFSR 192.168.1.104
OK
Отключение от точки доступа делается командой AT+CWQAP.
Адрес получен, можно двигаться дальше.

Плата ESP-01 может выступать в качестве Soft-AP, для включения этого режима выполняем следующие команды:
1. Отключаемся от точки доступа: AT+CWQAP.
2. Меняем режим работы Wi-Fi командой: AT+CWMODE=2
3. Создаем свою AP командой:
AT+CWSAP="SSID","PASSWORD",CHANNEL,SECURITY
Пример:
AT+CWSAP="Test2","habrahabr",10,4
OK
4. Пробуем подключиться в нашей AP с компьютера. Посмотрим результат:

Как видно на картинке скорость только 54Мбит/с и еще меня смущают адреса DNS серверов, думаю они явно китайские, поставить свои через AT-команды нельзя.
Адрес AP можно узнать командой: AT+CIFSR
Пример:
AT+CIFSR 192.168.4.1
OK
Список клиентов нашей AP можно посмотреть командой: AT+CWLIF
Пример:
AT+CWLIF 192.168.4.101,f4:ec:38:8d:05:62
OK


Настройка режима TCP-сервер

На плате ESP-01 можно запустить TCP-сервер для приема-отправки данных или она может выступать TCP-клиентом для приема-отправки данных на сервер.
Для запуска TCP-сервера выполним следующие команды:
1. Устанавливаем режим передачи командой
AT+CIPMODE=<mode>
mode = 0 — not data mode (сервер может отправлять данные клиенту и может принимать данные от клиента)
mode = 1 — data mode (сервер не может отправлять данные клиенту, но может принимать данные от клиента)
Пример:
AT+CIPMODE=0
OK
2. Устанавливаем возможность множественных соединений:
AT+CIPMUX=<mode>
mode 0 — single connection
mode 1 — multiple connection
Проверить режим соединений можно командой AT+CIPMUX?
Пример:
AT+CIPMUX=1 
OK
AT+CIPMUX? +CIPMUX:1
OK
3. Запускаем сервер на порту 8888:
AT+CIPSERVER= <mode>[,<port>]
mode 0 — to close server
mode 1 — to open server
Пример:
AT+CIPSERVER=1,8888
OK

Теперь можно подключиться к ESP-01 и отправить-принять какие-нибудь данные. Для подключения будем использовать утилиту SocketTest
Запускаем java -jar SocketTest.jar, на вкладке Client вводим адрес и порт ESP-01, жмем Connect. Если подключение будет успешным, то в терминале появится сообщение Link и в SocketTest станет активной строка Message и кнопка Send.
Посмотреть список активных подключений к ESP-01 можно командой AT+CIPSTATUS
Пример:
AT+CIPSTATUS STATUS:3
+CIPSTATUS:0,"TCP","192.168.1.100",44667,1
OK
Закрыть активное соединение можно командой
AT+CIPCLOSE=<id>
или все соединения AT+CIPCLOSE без параметров.
Пример:
AT+CIPCLOSE=0 
OK
Unlink
4. Отправляем данные с ESP-01 на ПК
Для режима Single connection (+CIPMUX=0) отправка идет так:
AT+CIPSEND=<length>
Для режима Multiple connection (+CIPMUX=1) отправка идет так:
AT+CIPSEND=<id>,<length>
После выполнения AT+CIPSEND нужно ввести текст, завершение ввода и отправка осуществляется по Enter.
Пример:

AT+CIPSEND=0,16 > Ping Habrahabr SEND OK
5. Отправляем тестовое сообщение с ПК:

В терминале появляется строка
+IPD,0,16:Ping Habrahabr
Сообщение принято.
Формат принятых данных такой:
Для режима Single Connection (CIPMUX=0):
+IPD,<len>:<data>
Для режима Multiple Connection (CIPMUX=1):
+IPD,<id>,<len>:<data>


Настройка режима TCP-клиента

Теперь поменяем роли, ПК — сервер, ESP-01 — клиент, пробуем:
1. Рестартуем плату AT+RST
2. Устанавливаем режим передачи командой
AT+CIPMODE=<mode>
mode = 0 — not data mode (клиент может отправлять данные серверу и может принимать данные от сервера)
mode = 1 — data mode (клиент не может отправлять данные серверу, но может принимать данные от сервера)
Пример:
AT+CIPMODE=0
OK
3. Режим соединений ставим Multiple connection: AT+CIPMUX=1
4. На ПК в SocketTest запускаем сервер на порту 8888
5. Запускаем клиента на ESP-01
Для режима Single connection (+CIPMUX=0) формат такой
AT+CIPSTART=<type>,<addr>,<port>
Для режима Multiple connection (+CIPMUX=1) формат такой
AT+CIPSTART=<id><type>,<addr>,<port>
Возможные значения параметров:
id = 0-4
type = TCP/UDP
addr = IP адрес
port= порт
Пример:
AT+CIPMUX=1 
OK
AT+CIPSTART=0,"TCP","192.168.1.100",8888 
OK
Linked
6. Отправляем данные с ESP-01 на ПК
Для режима Single connection (+CIPMUX=0) отправка идет так:
AT+CIPSEND=<length>
Для режима Multiple connection (+CIPMUX=1) отправка идет так:
AT+CIPSEND=<id>,<length>
После выполнения AT+CIPSEND нужно ввести текст, завершение ввода и отправка осуществляется по Enter.
Пример:

AT+CIPSEND=0,16 > Ping Habrahabr SEND OK

Пример отправки и получения данных:


Полезная документация:
Описание AT-команд (На китайском)
Спецификация на чип ESP8266 (На китайском)
Спецификация на чип ESP8266 (На английском)

Заключение:

Как мы видим, плата успешно справляется с поставленными задачами, а именно — подключение к Wi-Fi в качестве клиента, может выступать в роли Soft-AP, на плате можно поднять TCP-сервер для приема-отправки данных, а можно быть TCP-клиентом.
В данной статье мы рассмотрели работу с платой ESP-01 через RS232, в качестве управляющего контроллера выступал ПК, можно без проблем подключить плату Arduino или любой микроконтроллер с UART и выполнять отправку-прием данных через Wi-Fi сеть между контроллерами или ПК.

В следующей статье (как позволит карма) я попробую рассказать о принципах написания собственных прошивок для чипа ESP8266, тем самым плата ESP-01 будет полностью автономной, ей будет не нужен доп.контроллер для управления всеми параметрами. Мы попробуем подключить к плате различные периферийные устройства.

Буду рад ответить на вопросы, хотя до конца я еще не узучил плату ESP-01.
Проголосовать:
+22
Сохранить: