WiFi модуль ESP8266

Содержание

ESP8266 — недорогое решение для подключения различных устройств, разработанных преимущественно на базе микроконтроллеров, к сети WiFi. ESP8266 работает с интерфейсом UART, что упрощает процесс подключения к микроконтроллера и является наиболее простым и понятным решением. Модуль управляется AT командами и не требует никаких специализированных библиотек.

ESP8266 ESP8266 ESP8266 ESP8266

Параметры модуля 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 В.

ESP8266 Pins

Приколы с терминалом (#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 или аналогичную программу, а не браузер, зависаний не происходило.

Загнать модуль ступор можно следующим образом:

  1. модуль поднимает порт
  2. к нему подключаемся с помощью telnet и т.д., отправляем данные
  3. микроконтроллер начинает отвечать и в тот момент, когда микроконтроллер получил символ "" и отправляет данные в модуль, мы рвем связь. Имеется в виду закрываем Telnet, и тому подобное. FiWi продолжает работать как надо, модуль ESP8266 в сети видно (т.е. он пингуеться), но .
  4. модуль ESP8266 в ступоре и на запросы больше не отвечает.

Получается, что WiFi модуль ESP8266 может не корректно работать если во время передачи данных рвется TCP-соединение. Возможно, Вы никогда и не столкнетесь с этой проблемой, может она будет решена в следующих версиях прошивки, но она существует и немного меня разочаровала. В целом могу сказать, что я не в восторге от модуля, но, если приноровиться к его особенностям, — вполне можно использовать. К тому же это самое простое решение для подключения микроконтроллеров к компьютерной сети. С этим модулем даже самые слабые микроконтроллеры, которые имеют UART, могут работать в локальной сети или в Интернете.


Источник: blog.avislab.com