Введение. Подключение к WiFi
ESP8266 – мощный китайский микроконтроллер с WiFi на борту. Это позволяет делать на его основе проекты с доступом в Интернет!
- Если вы уже работали с Arduino и первый раз держите в руках плату на базе esp8266 (в наборе GyverKIT это плата Wemos Mini) – обязательно изучите урок по особенностям данного микроконтроллера и отличиям от обычных плат Arduino.
- Для работы с Wemos нужно установить поддержку данных плат в Arduino IDE: на сайте набора в блоке Начало работы есть отдельная инструкция по настройке.
Работать с платой через WiFi есть два способа:
- Подключить плату к домашнему WiFi роутеру (режим STA) – для работы в локальной сети или через Интернет
- Настроить плату как точку доступа (режим AP) и подключиться к ней со смартфона
Подключение к роутеру
- Подключаем в скетч встроенную библиотеку ESP8266WiFi.h
- Переводим режим работы в STA через WiFi.mode(WIFI_STA) – необязательно, если до этого режим работы не изменялся
- Инициируем подключение к WiFi роутеру:
- Вызываем WiFi.begin(WIFI_SSID) – с указанием названия незащищённой сети (без пароля)
- Вызываем WiFi.begin(WIFI_SSID, WIFI_PASS) – с указанием названия сети и пароля
- Для удобства настройки можно вынести логин и пароль в начало программы через #define
После успешного подключения можно вывести IP адрес платы в локальной сети роутера при помощи WiFi.localIP() .
#include #define WIFI_SSID «Alex» #define WIFI_PASS «pass» void setup() < Serial.begin(115200); WiFi.begin(WIFI_SSID, WIFI_PASS); while (WiFi.status() != WL_CONNECTED) < delay(500); Serial.print("."); >Serial.println(«Connected»); Serial.println(WiFi.localIP()); > void loop()
Скриншот со страницы конфигурации роутера. Плата есть в списке подключенных устройств:
Создание точки доступа
- Подключаем в скетч встроенную библиотеку ESP8266WiFi.h
- Переводим режим работы в AP через WiFi.mode(WIFI_AP)
- Создаём точку доступа:
- WiFi.softAP(AP_SSID) – сеть без пароля. Указываем только имя
- WiFi.softAP(AP_SSID, AP_PASS) – сеть с паролем
#include #define AP_SSID «ESP» void setup() < Serial.begin(115200); WiFi.mode(WIFI_AP); WiFi.softAP(AP_SSID); >void loop()
Теперь можно подключиться к плате со смартфона как к точке доступа WiFi. Примечание: по умолчанию в своей сети плата имеет IP адрес 192.168.4.1
Работа с ESP8266: Первоначальная настройка, обновление прошивки, связь по Wi-Fi, отправка-получение данных на ПК
Мной была заказана самая простая плата с 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 такое:
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+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 командой:Подключение длится 2-5 секунд, после чего в случае успешного выполнения появится OK.
3. Посмотрим какой IP адрес получила наша плата командой: AT+CIFSRОтключение от точки доступа делается командой 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+CWLIF 192.168.4.101,f4:ec:38:8d:05:62 OK
Настройка режима TCP-сервер
На плате ESP-01 можно запустить TCP-сервер для приема-отправки данных или она может выступать TCP-клиентом для приема-отправки данных на сервер.
Для запуска TCP-сервера выполним следующие команды:
1. Устанавливаем режим передачи командойmode = 0 — not data mode (сервер может отправлять данные клиенту и может принимать данные от клиента)
mode = 1 — data mode (сервер не может отправлять данные клиенту, но может принимать данные от клиента)
Пример:mode 0 — single connection
mode 1 — multiple connection
Проверить режим соединений можно командой AT+CIPMUX?
Пример:AT+CIPMUX=1 OK AT+CIPMUX? +CIPMUX:1 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+CIPSEND нужно ввести текст, завершение ввода и отправка осуществляется по Enter.
Пример:AT+CIPSEND=0,16 > Ping Habrahabr SEND OK
5. Отправляем тестовое сообщение с ПК:
В терминале появляется строка
Настройка режима TCP-клиента
Теперь поменяем роли, ПК — сервер, ESP-01 — клиент, пробуем:
1. Рестартуем плату AT+RST
2. Устанавливаем режим передачи командойmode = 0 — not data mode (клиент может отправлять данные серверу и может принимать данные от сервера)
mode = 1 — data mode (клиент не может отправлять данные серверу, но может принимать данные от сервера)
Пример:3. Режим соединений ставим Multiple connection: AT+CIPMUX=1
4. На ПК в SocketTest запускаем сервер на порту 8888
5. Запускаем клиента на ESP-01
Для режима Single connection (+CIPMUX=0) формат такойAT+CIPMUX=1 OK AT+CIPSTART=0,"TCP","192.168.1.100",8888 OK Linked
После выполнения AT+CIPSEND нужно ввести текст, завершение ввода и отправка осуществляется по Enter.
Пример:AT+CIPSEND=0,16 > Ping Habrahabr SEND OK
Пример отправки и получения данных:
Как мы видим, плата успешно справляется с поставленными задачами, а именно — подключение к Wi-Fi в качестве клиента, может выступать в роли Soft-AP, на плате можно поднять TCP-сервер для приема-отправки данных, а можно быть TCP-клиентом.
В данной статье мы рассмотрели работу с платой ESP-01 через RS232, в качестве управляющего контроллера выступал ПК, можно без проблем подключить плату Arduino или любой микроконтроллер с UART и выполнять отправку-прием данных через Wi-Fi сеть между контроллерами или ПК.В следующей статье (как позволит карма) я попробую рассказать о принципах написания собственных прошивок для чипа ESP8266, тем самым плата ESP-01 будет полностью автономной, ей будет не нужен доп.контроллер для управления всеми параметрами. Мы попробуем подключить к плате различные периферийные устройства.
Буду рад ответить на вопросы, хотя до конца я еще не узучил плату ESP-01.