WiFi модуль ESP8266
Содержание
- Параметры модуля ESP8266
- Питание ESP8266
- Разпиновка и подключение ESP8266
- Приколы с терминалом (#13#10)
- AT Команды ESP8266
- Обновление прошивки ESP8266
- Тестируем ESP8266 вручную
- Настройка доступа к Wi Fi точки. Как "не светить" пароль.
- Подключаем модуль ESP8266 к микроконтроллера Atmega
- Проблемы модуля ESP8266
ESP8266 — недорогое решение для подключения различных устройств, разработанных преимущественно на базе микроконтроллеров, к сети WiFi. ESP8266 работает с интерфейсом UART, что упрощает процесс подключения к микроконтроллера и является наиболее простым и понятным решением. Модуль управляется AT командами и не требует никаких специализированных библиотек.
Параметры модуля ESP8266
- напряжение питания 3.3 В
- ток 215 mA в режиме передачи данных, до 62 mA при приеме данных
- 802.11 b/g/n протокол
- управления модулем с помощью AT-команд
- рабочая температура от -40 до +125 градусов по шкале Цельсия
- максимальная дистанция связи — 100 метров
Питание ESP8266
Питание ESP8266 — 3.3 В. Выводы толерантны к 5 В, но модуль не работает, если его питать напряжением +5 В. Модуль потребляет довольно много — 215 мА в режиме передачи данных и 62 мА в режиме приема. Обратите внимание на мощность Вашего блока питания. Он должен выдавать как минимум 300 mA, иначе могут возникнуть проблемы.
Разпиновка и подключение ESP8266
Подключим WiFi модуль ESP8266 к компьютеру с помощью UART-USB переходника и попробуем поработать с модулем в ручном режиме. Не забываем, что TX модуля подключаем к RX UART-USB переходника, а RX модуля подключаем к TX UART-USB переходника. Вход CH_PD (chip enable) подключаем к +3.3 В.
Приколы с терминалом (#13#10)
Можно использовать любую терминальную программу. У меня установлен PuTTY. Это SSH клиент, он может работать и с COM портом. После подключения пробуем вводить команду AT. Нажимаем ENTER и . ничего не происходит. Модуль не воспринимает команду. Выяснилось, что модуль ESP8266 требует окончания ввода команды двумя символами с кодами 13 и 10 (без дополнительных настроек в PuTTY по нажатию клавиши ENTER отправляется только # 13). Я, не долго думая, использовал старый прием: нажимал на клаве левый Alt и набирал "10" на цифровой клавиатуре. Затем нашлась специальная опция в настройках (раздел "Terminal"), которая решает эту проблему автоматически: "Implicit LF in every CR".
AT Команды ESP8266
- AT — Тестовая команда возвращает OK
- AT + RST — Перезагрузка модуля. По завершению перезагрузки должны увидеть "ready"
- AT + GMR -Проверка версии прошивки модуля
- AT + CWMODE = режим — задает режим работы модуля mode: 1 — клиент, 2 — точка доступа, 3 — смешанный режим
- AT + CWLAP — возвращает список WiFi точек доступа, к которым возможно подключение
- AT + CWJAP = имя, пароль — Подключиться к точке доступа задав имя точки и пароль. Если подключение прошло успешно — команда выдаст OK. Модуль сохранит в памяти данные о точке и в дальнейшем самостоятельно будет к ней подключаться
- AT + CWQAP — Отключиться от точки доступа
- AT + CWSAP = имя, пароль, канал, шифрования — Создать свою точку доступа
- AT + CWLIF — получить список подключенных устройств (если модуль работает как точка доступа)
- AT + CIPSTATUS — Получить текущий статус TCP-соединений
- AT + CIPSTART — Для одного соединения (+ CIPMUX = 0): AT + CIPSTART = тип, адрес, порт Для многопоточного режима (+ CIPMUX = 1): AT + CIPSTART = ID, тип, адрес, порт ID — идентификатор соединения Тип — тип соединения: TCP или UDP Адрес — адрес IP или URL Порт — порт
- AT + CIPMODE = режим — установить режим передачи данных: Режим = 0 — not data mode (сервер может отправлять данные клиенту и может принимать данные от клиента) Режим = 1 — data mode (сервер может отправлять данные клиенту, но не может принимать данные от клиента)
- AT + CIPSEND — Отправить данные Для одного соединения (+ CIPMUX = 0): AT + CIPSEND = количество символов Для многопоточного режима (+ CIPMUX = 1): AT + CIPSTART = ID, количество символов ID — идентификатор соединения Количество символов — количество данных (байт) отправляемых. Сами данные передаются после ответа модуля на команду после символа ""
- AT + CIPCLOSE — Закрыть соединение. Параметр для многопоточного режима ID — идентификатор соединения. Для одного соединения (+ CIPMUX = 0): AT + CIPCLOSE Для многопоточного режима (+ CIPMUX = 1): AT + CIPCLOSE = ID
- AT + CIFSR — Получить IP-адресс модуля. Это возможно после подключения к WiFi точки.
- AT + CIPMUX = режим — задает количество соединений. Режим = 0 для одного соединения, режим = 1 для многопоточного режима (до пяти подключений)
- AT + CIPSERVER = режим, порт — Открыть порт. Режим — режим скрытности (0 — скрытый, 1 — открытый), порт — порт
- AT + CIPSTO = время — установить время одного соединения в секундах (timeout)
- AT + CIOBAUD = скорость — установить скорость UART порта. Работает для версий прошивки от 0.92.
- Прием информации — данные приходят с пометкой + IPD, после которой идет информация о количестве принятых данных, а затем — сама информация. Для одного соединения (+ CIPMUX = 0): + IPD, количество символов информация Для многопоточного режима (+ CIPMUX = 1): + IPD, ID соединения, количество символов информация Пример: + IPD, 0,6: ptnpnh — принято 6 байт информации.
Очень жаль, но я не нашел команды, с помощью которой можно узнать MAC-адрес модуля. Пришлось узнавать MAC-адрес модуля после подключения модуля к WiFi сети. Не очень удобно, если для доступа к WiFi применяется фильтрация по MAC-адресам, как у меня.
Обновление прошивки ESP8266
Я рекомендую обновить прошивку модуля, если она устарела. Проверить версию прошивки можно командой AT+GMR. Качаем программу для прошивки, и саму прошивку. Затем надо перевести модуль режим программирования. Для этого нужно подключить GPIO0 к GND. И только после этого подавать питание на модуль. Если GPIO0 переключать во время работы модуля, это не сработает. Далее, с помощью программы заливаем прошивку. Как обновить прошивку, где и какие программы качать — подробно написано здесь: http://esp8266.ru/esp8266-podkluchenie-obnovlenie-proshivki/#esp8266-update-firmware Кстати, обновление прошивки также возможно через Интернет, но только если текущая версия прошивки старше 0.92. Я воспользовался этим один раз и больше не хочу. После такого обновления модуль моргал светодиодами, как бешеный и вовсе не хотел работать. Прошивка вручную помогла вернуть его к жизни.
Тестируем ESP8266 вручную
Чтобы подключить модуль ESP8266 к Wi Fi выполняем следующие команды:
SID — SID Вашей WiFi сети;
password — пароль доступа к WiFi.
После подключения можем пересмотреть IP-адрес модуля. Я надеюсь, Вы понимаете, что Ваша WiFi точка доступа должна иметь DHCP сервера и автоматически выдавать IP-адреса.
На своем маршрутизаторе я прописал статический адрес для моего модуля — 192.168.1.100.
Откроем порт (88):
Теперь, когда подключиться к модулю на указанный порт, можете передавать данные. Попробуем сделать это с помощью telnet:
Если у Вас Windows 7, или что-то новее от Билла, тогда Вы не найдете telnet в системе. Придется что-то придумывать. Но, если у Вас есть PuTTY воспользуйтесь следующей командой:
Теперь, если Вы все сделали правильно, можно ввести данные руками и на терминале, подключенном к модулю ESP8266, увидим как они прилетают. Можно попробовать подключиться к модулю обычным браузером: http://192.168.1.100:88
Данные похожи на что-то такое:
+IPD — префикс
0 — ID сессии
303 — количество принятых байт
после символа ":" идут данные.
Если нужно ответить, отправляем модулю команду:
0 — ID сессии;
3 — длина данных, которые мы будем передавать. Ждем символ "" И вводим данные.
Должны увидеть ответ модуля:
А в консоли telnet набранные данные — "www". Если соединение браузером, ответ "www" браузер, скорее всего, не поймет. Ему нужна корректный ответ на его запрос. Нечто похожее на следующее:
Этим мы и займемся чуть позже.
Модуль может работать в режиме одиночного подключения и в режиме нескольких подключений (до 5) (см команду: AT + CIPSTART). Но, когда модуль работал в однопоточном режиме, мне не удалось открыть порт. Поэтому далее я работал только с многопоточным режимом (AT+CIPMUX=1).
Настройка доступа к Wi Fi точки. Как "не светить" пароль.
Модуль может быть как точкой доступа, так и подключаться к указанной точке доступа. Я использовал модуль для подключения к существующей WiFi сети. Очень приятная особенность — после подключения модуль сохраняет имя WiFi точки и пароль. Если модуль выключить и снова включить, он самостоятельно будет подключаться к ранее указанной точки доступа. После подключения модуль получит IP, и готов для работы. Остается только настроить порт. Таким образом, если у Вас изменился пароль к WiFi, или вообще изменились настройки, достаточно извлечь модуль из устройства, подключить к компьютеру с помощью UART-USB переходника и вручную подключиться к WiFi. Модуль запомнит параметры подключения, после чего его можно вернуть в устройство. То есть, Вам не придется придумывать каким образом задавать пароль к WiFi точки в памяти устройства. Это особенно важно для миниатюрных задач, где вообще могут отсутствовать дисплей, кнопки и тому подобное.
Подключаем модуль ESP8266 к микроконтроллера Atmega
Подключим модуль к микроконтроллеру и попробуем написать пример для обработки запросов от обычного браузера. В примере я использовал обычную Atmega8.
Попробуем сделать простенький Web-интерфейс, с помощью которого можно будет включать и выключать светодиод.
Заходим любым браузером: http://192.168.1.100:88
Программа формирует простую HTML-страницу с двумя ссылками для включения и выключения светодиода.
Проблемы модуля ESP8266
При создании этого примера возникла проблема. Дело в том, что браузер, кроме основного запроса, отправляет запрос на получение файла favicon.ico. Иногда он приходит невовремя, в тот момент, когда программа закрывает соединение. Это приводило к зависания модуля. Поэтому, в примере стоит достаточно большой тайм-аут (AT+CIPSTO=5) и сессия закрывается не программно, а автоматически (команда AT+CIPCLOSE=id не используется). Если использовать telnet или аналогичную программу, а не браузер, зависаний не происходило.
Загнать модуль ступор можно следующим образом:
- модуль поднимает порт
- к нему подключаемся с помощью telnet и т.д., отправляем данные
- микроконтроллер начинает отвечать и в тот момент, когда микроконтроллер получил символ "" и отправляет данные в модуль, мы рвем связь. Имеется в виду закрываем Telnet, и тому подобное. FiWi продолжает работать как надо, модуль ESP8266 в сети видно (т.е. он пингуеться), но .
- модуль ESP8266 в ступоре и на запросы больше не отвечает.
Получается, что WiFi модуль ESP8266 может не корректно работать если во время передачи данных рвется TCP-соединение. Возможно, Вы никогда и не столкнетесь с этой проблемой, может она будет решена в следующих версиях прошивки, но она существует и немного меня разочаровала. В целом могу сказать, что я не в восторге от модуля, но, если приноровиться к его особенностям, — вполне можно использовать. К тому же это самое простое решение для подключения микроконтроллеров к компьютерной сети. С этим модулем даже самые слабые микроконтроллеры, которые имеют UART, могут работать в локальной сети или в Интернете.
Источник: