wi-fi модуль esp8266

Думаю, что для многих не новость, что недавно появились на рынке сверх дешевые чипы esp8266 и модули на их основе. Ещё одним большим плюсом этих чипов, по мимо цены, является большая интеграция чипа, следствие чего самодостаточность, а точнее очень малое количество компонентов обвязки.

Чип esp8266 и модули на его основе

Чип esp8266 и модули на его основе

Единственным большим минусом этих модулей является секретность их ней документации. Конечно что-то уже давно просочилось в сеть, но основные документы и SDK находятся под NDA грифом. Почему так, не мне судить, но неприятно. Но в некотором скором времени производитель собирается перевести документы на свободно распространяемую лицензию.

Начнём с самого вкусного — цены модуля и чипа. Цена модуля в интернет магазинах составляет порядка 200-300р, на taobao 160р. Цена чипа в интернет магазинах и на taobao 90р, у производителя 1,5$. Цены на конец сентября 2014 года, зеленый стоит 40р.

Хоть основная документация по модулю и закрыта, но из имеющихся источников можно получить дефолтные схемы разводки модуля, краткую спецификацию и список AT команд для работе с модулем по UART (когда чип настроен на этот режим работы, родной у него, кажется, SPI). Данной документации уже будет достаточно для поверхностного ознакомления с данным модулем и построения любительских конструкций на его базе.

Краткая спецификация модуля


Частота Wi-Fi 2412-2484МГц
Стандарт 802.11 b / g / n
Мощность + 20dBm
Максимальное расстояние 100м (при идеальных условиях)
Безопасность WPA / WPA2
Встроенный TCP/IP стек
Интерфейс UART 115200
Напряжение питания 3.3В
Потребление тока 70мА (240мА пик)
Температурный режим -40 +70С

Подключение модуля ESP-01

Подключение модуля ESP-01


GND GPIO2 GPIO0 Rx
Tx CH_PD (enable) RST Vdd (3,3В)

Если обратить внимание на количество компонентов, то их всего 6 — пассивных, SPI память и PCB антенна (два светодиода с обвязкой и разъём не посчитал), что очень приятно в плане занимаемым местом, количеством паяемой обвязки и следствием трудозатрат и стоимости применения данного модуля.

В своих экспериментах подключал модуль к cp2102 через небольшую платку со стабилизатором на 3.3В и 2-мя гасящими резисторами.

Испытательный стенд для модуля esp8266

Испытательный стенд для модуля esp8266

Для работы подаём на модуль питание 3,3В, подключаем UART и подтягиваем к плюсу питания Enable (CH_PD). Напомню: скорость UART 115200, стандартные настройки 8N1.

Список AT команд

Синтаксис:
<command> — выполнит команду
<command>? — запросить статус какого-либо параметра
<command>=<parametr> — задать параметры


Синтаксис
Пример
Описание
AT AT
OK
Тест
AT+RST AT+RST Перезагрузит модуль
AT+GMR AT+GMR
00160901
OK
Версия прошивки
AT+CWMODE=<mode> AT+CWMODE=1

OK

Режим работы модуля
<mode>:
1-клиент
2-точка доступа
3-совмещенный
AT+CWJAP = <SSID>,<PWD> AT+CWJAP="HOME","password"
OK
Присоединиться к точке доступа
<SSID> — имя точки доступа
<PWD> — ключ
AT+CWLAP AT+CWLAP
+CWLAP:(0,"",0)
+CWLAP:(4,"Sosed",-77)
+CWLAP:(1,"HOME",-54)
OK
Получить список видимых точек доступа
Первый параметр — шифрование:
0 — open
1 — WEP
2 — WPA_PSK
3 — WPA2_PSK
4 — WPA_WPA2_PSK
Второй параметр — SSID
Третий параметр — чувствительность
AT+CWQAP AT+CWQAP
OK
Отключиться от точки доступа
AT+CWSAP=<ssid>,<pwd>,<chl>, <ecn> AT+CWSAP="TEST","12345678",5,0
OK
Установить точку доступа
<ssid> — имя точки доступа
<psd> — ключ
<chl> — канал
<ecn> — шифрование, см AT+CWLAP
AT+CWLIF AT+CWLIF Список присоединённых устройств
AT+CIPSTATUS AT+CIPSTATUS
STATUS:3
+CIPSTATUS:0,"TCP","46.38.56.236",80,0

OK

Статус TCP соединения
Возвращаемый параметр — статус соединения
3 — соединение установлено
4 — нет соединения
Первый параметер — сессия
Второй параметр — соединение: TCP или UDP
Третий параметр — IP
Четвёртый параметр — порт
Пятый параметр — неизвестен
AT+CIPMUX=<mode> AT+CIPMUX=0
OK
Количество соединений
0 — одно соединение
1 — мультисоединение (до 4-х)
AT+CIPMODE=<mode> AT+CIPMODE?
+CIPMODE:0
Режим передачи данных
<mode> — неизвестно
Для одного соединения (+CIPMUX=0):
AT+CIPSTART=<type>,<adr>,<port>
Для мульти соединения (+CIPMUX=1):
AT+CIPSTART=<id>,<type>,<adr>,<port>
AT+CIPSTART="TCP","alex-exe.ru",80

OK
Linked

Unlink

Соединение TCP/UDP
<id> — идентификатор соединения
<type> — тип соединения: TCP или UDP
<adr> — адрес IP или URL
<port> — порт
Для одного соединения (+CIPMUX=0):
AT+CIPSEND=<length>
Для мульти соединения (+CIPMUX=1):
AT+CIPSTART=<id>,<length>
AT+CIPSEND=53
> GET /links/links.html HTTP/1.0
Host: alex-exe.ru
busy

SEND OK

+IPD,233:HTTP/1.1 200 OK
… обрезано …
OK

Отправить данные
<id> — идентификатор соединения
<length> — количество отправляемых данных
Передаваемые данные отправляются после приглашения > , после ввода команды.е
+IPD,1024:<html>
<head>
<title>Alex_EXE — Сайты</title>
… обрезано …
OK
Приём данных
Первый параметр <id> — идентификатор соединения (для +CIPMUX=1).
Возвращает количество прочитанных байт, после двоеточия возвращает принятые данные.
Принимает по 1024 байта, разделяя.
Для +CIPMUX=0:
AT+CIPCLOSE
Для +CIPMUX=1:
AT+CIPCLOSE=<id>
AT+CIPCLOSE
OK
Unlink
Закрыть соединение
Единственный параметр <id> для мультипоточного режима — идентификатор соединения
AT+CIFSR AT+CIFSR
192.168.1.208
Получить IP адрес модуля
AT+CIPSERVER=<mode>,<port> AT+CIPSERVER=1,8888
OK
Поднять сервер
<mode> — режим скрытности
0 — скрыт
1 — открытый
<port> — порт
AT+CIPSTO=<time> AT+CIPSTO=180
OK
Установить время одной сессии на сервере
<time> — время сессии в секундах, от 0 до 28800.



Такой перечень команд на данный момент удалось найти. Скудновато, но для минимального функционала хватит.

Пример установки точки доступа и поднятие TCP сервер на 8888 порту:

AT+CWMODE=2

OK
AT+RST

OK
...  перезагрузка   ...
AT+CWSAP="TEST","12345678",5,0

OK
AT+CIPMUX=1

OK
AT+CIPSERVER=1, 8888

OK
AT+CIFSR
192.168.4.1
Link

+IPD,0,17:Test alex-exe.ru

OK
Unlink

После поднятия сервера зашёл на него через терминал (Link — момент подсоединения) и отправил короткое тестовое сообщение, после чего отсоединился (Unlink — момент отключения).

Пример установки клиента с выполнением «ручного» GET HTTP запроса:

AT+CWMODE=1

OK
AT+RST

OK
...  перезагрузка   ...
AT+CWLAP
+CWLAP:(0,"",0)
+CWLAP:(4,"Sosed",-77)
+CWLAP:(1,"HOME",-54)
OK 
AT+CWJAP="HOME","password"

OK
AT+CIPMUX=0

OK
AT+CIPSTART="TCP","alex-exe.ru",80

OK
Linked
AT+CIPSEND=53
> GET /links/links.html HTTP/1.0
Host: alex-exe.ru
busy

SEND OK

+IPD,233:HTTP/1.1 200 OK
Server: nginx/1.6.0
Date: Tue, 14 Oct 2014 21:41:06 GMT
Content-Type: text/html
Content-Length: 1647
...   обрезано   ...

OK

+IPD,1024:<html>
<head>
 <title>Alex_EXE - Сайты</title>
...   обрезано   ...
     
 
OK

+IPD,623:    <tr>
       <td valign=top colspan=2>
         <b><p align=center><a HREF = "computer.html">Компьютер</a></p></b>		
...   обрезано   ...

</td></tr></head></html>
OK

OK
Unlink

Если в будущем смогу раздобыть больше информации и описания по модулю и чипу, причём не из засекреченных источников, — то будет продолжение.

Источники, с которых собирал информацию:
ESP8266: Революция в мире интернета вещей
nurdspace.nl/ESP8266
www.electrodragon.com/w/Wi07c
даташит Espressif AT Instruction (на Китайском)

22 комментария »

Alex_EXE | 15.10.2014 | Связь | 16 155 просмотров

22 комментария на « wi-fi модуль esp8266»

  1. Nobody пишет 16.10.2014 в 11:08 #

    Благодарю за информацию по модулям.
    Заказал уже несколько для тестирования. До нового года надеюсь приедут.

    > Если в будущем смогу раздобыть больше информации и описания по модулю и чипу, причём не из засекреченных источников

    А у Вас есть информация из источников NDA? Насколько мне известно там специфичный RISC процессор.

    Ой. Оказывается есть сайт http://www.esp8266.com. Там в том числе есть информация по GCC для этого процессора: https://github.com/jcmvbkbc/gcc-xtensa

    Скорей бы рабочий день закончился… Покопаться на том сайте надо по подробнее.

  2. Alex_EXE пишет 16.10.2014 в 12:37 #

    По доступу к NDA — пока ещё нет, но в скором времени думаю получить. Но NDA есть NDA.
    На счёт встроенного 32-битного процессора — правда, упоминания в интернете есть.
    По данным модулям в интернете информация есть, но есть подозрения (не мои, а кто имеет доступ к свежей документации), что она устаревшая. Те ресурсы видел — но ещё не смотрел.

  3. Александр пишет 02.12.2014 в 19:36 #

    Хорошо все описано. Спасибо.
    Вот наткнулся на сайт http://geektimes.ru/post/241054/
    где описана уже прошивка чипа.

  4. Сергей пишет 01.01.2015 в 17:12 #

    Недостаток ESP8266 — неиндустриальный диапазон температур (нижняя температура -20).

  5. Alex_EXE пишет 28.04.2015 в 00:59 #

    У модуля (прошивка 00160901 или v0.9.2) обнаружился ещё один очередной глюк:
    Если у модуля была установлена точка доступа с ключом, то он к ней после включения будет автоматически подключатся. Но вот если точка доступа недоступна и к ней не получается подключится то команда AT+CWLAP (поиск доступных/видимых Wi-Fi сетей) приводит к зависанию модуля. Команда — AT+CWQAP (отключиться от точки доступа), не помогает, модуль всё равно виснет.
    Может помочь только если установить «пустую» точку доступа, т.е. AT+CWJAP=»»,»» и перезагрузить модуль.

  6. radiomanoff пишет 04.01.2016 в 22:28 #

    Ув. Alex_EXE, может Вы подскажите…
    Проблема в следующем ,не получается запустить Ваш — Пример установки клиента с выполнением «ручного» GET HTTP запроса для ESP8266.
    Через командную строку и telnet — удается получить утвердительный ответ от alex-exe.ru

    -на GET-запрос:

    GET /links/links.html HTTP/1.0
    Host: alex-exe.ru

    Ответ:

    HTTP/1.1 200 OK
    Server: nginx/1.7.9
    Date: Mon, 04 Jan 2016 15:59:31 GMT
    Content-Type: text/html
    Content-Length: 1647
    Connection: close
    Last-Modified: Mon, 12 Jan 2015 09:41:42 GMT
    ETag: "54b396d6-66f"
    Accept-Ranges: bytes

    и тд…..

    Eсли тоже самое проделать с моей ESP8266 в программе ESPlorer , то получаю ответ — HTTP/1.1 400 Bad Request.
    Что судя по всему означает — «запрос не может быть исполнен ввиду синтаксической ошибки»
    Лог с прграммы ESPlorer:

    AT+CIPMUX=0
    OK
    AT+CIPSTART="TCP","alex-exe.ru",80
    CONNECT
    OK
    AT+CIPSEND=48
    OK
    > Здесь отсылаю GET-запрос — GET /links/links.html HTTP/1.1 Host: alex-exe.ru
    busy s…

    Recv 48 bytes

    SEND OK

    +IPD,323:HTTP/1.1 400 Bad Request
    Server: nginx/1.7.9
    Date: Mon, 04 Jan 2016 16:17:16 GMT
    и тд………..

    Пробовал отcылать — GET /links/links.html\r\n\r\n HTTP/1.1 Host: alex-exe.ru\r\n\r\n
    Результат тот-же HTTP/1.1 400 Bad Request.

    В чем-же проблема? Где ошибка?

  7. Alex_EXE пишет 08.01.2016 в 23:42 #

    Проверьте сколько точно байтов Вы посылаете, может указано меньшее число, чем в посылке, из-за этого она бьётся. Можете добавить дополнительных пару байт: если модуль повиснет — т.е. он будет ждать недостающих байт, так же их можно попробовать скомпенсировать символами переноса строки.

  8. radiomanoff пишет 09.01.2016 в 21:41 #

    Спасибо за ответ. Но я забросил это дело с telnet, потому что этот вопрос интересовал только в плане правильной отсылки GET-запросов. Больше интересует связка ESP8266 и STM32, и я «рулю» в этом направлении.
    На github.com есть интересный проект — https://github.com/materone/WIFI-ESP8266-STM32F103R8T6 . Я взял его за основу и переделываю под STM32F103C8T6 в Keil 5. Модуль ESP8266 c AT-прошивкой.
    Сейчас проблема только в правильной обработкой запросов и ответа сервера.

  9. Alex_EXE пишет 10.01.2016 в 03:42 #

    Текущий проект, над которым работаю, обладает подобным функционалом. Одна из задач контроллера синхронизироваться с сервером и обмениваться с ним данными. В качестве прошивки выбрал ESP_8266_BIN0.92.bin , т.к. она оказалось, по моему мнению и под мои задачи, наиболее стабильной.
    На первом этапе отработал все необходимые команды через telnet с сервером, потом с терминальной программе в ручном, а затем в скриптовом режиме через esp модуль. Далее алгоритм написал под stm32.
    В стабильной работы от модуля добился, но широкого тестирования пока что не проводил.
    Все таки эти модули esp8266 мне не очень понравились, т.к. они в какой-то степени корявые, под что приходится подстраиваться. Другие модули с которыми работал, мне понравились больше, но esp лидирует по цене и для простых массовых задач это большой плюс.
    Проект является закрытым, поэтому исходниками поделится не смогу. В будущем, думаю алгоритм перенести на другую платформу и потом его описать.

  10. radiomanoff пишет 10.01.2016 в 19:41 #

    А Вы не подскажите, имеется ли ограничение на команду AT+CIPSEND = x,y по количеству отправленых символов?

  11. Alex_EXE пишет 11.01.2016 в 10:21 #

    С ним не сталкивался. Использую фиксированные посылки около 300-350 байт.
    Так же использую всего одну короткую сессию.

  12. radiomanoff пишет 11.01.2016 в 22:03 #

    Вы знаете , я попробовал разные варианты с этим модулем: сама АТ-прошивка, скрипты LUA и «прошивка» через Arduino ID. У каждого варианта свои достоинства и недостатки.
    NodeMCU например — стабильно и просто, но непонятки с оперативкой просто задалбывают, да и «раскуривать» LUA надо.Выгодно отличается ArduinoIDE , как никак Си ,куча примеров и все видно, что с оперативкой , что с flash…По крайней мере достаточно просто , у меня запустился «прозрачный мост».
    Но пройдя это путь, я все же вернулся к АТ-прошивке в связке с STM32. Даже наоборот, мне нужна связь с внешним миром для моей STM32. Включится сервером на 80-ом порту, и отдавать небольшую html-страницу у меня выходит, но все-же со стабильностью проблемы безусловно есть.
    Есть мысль плюнуть на все эти GET-запросы, включить модуль «прозрачным мостом» и замутить на каком-нибудь VisualStudio C# — прогу для обработки данных с МК. По крайней мере для USB-интерфейса, у меня получилось сделать нечто подобное…

  13. Alex_EXE пишет 12.01.2016 в 19:53 #

    Можно попробовать более стабильные модули, например USR-WiFi232, WizFi210. Они намного приятнее чем esp, правда и дороже. WizFi210, по моему, даже http обвертку имеет.

  14. radiomanoff пишет 12.01.2016 в 23:50 #

    WizFi210 наверно слишком дорог для любительского проекта, а вот USR-WiFi232 заинтересовал, пожалуй закажу попробовать, спасибо за наводочку…

  15. M9cO пишет 09.02.2016 в 03:33 #

    я столкнулся с тем что запрос от браузера на ESP-01 приходит в разном виде если ставить скорость передачи меньше 56000 и больше 56000. Если она выше то он в правильном виде.
    Никак не могу понять каким образом появляется это «ОК» после +IPD,… если обращаться браузером???
    Alex_EXE , а каким образом у Вас устроено общение с сервером? Я соединяю Atmega8 с wifi и сталкиваюсь с проблемой «неправильного приема инфы», когда мы ожидаем определенный ответ, а он приходит с ошибкой и все программа останавливается.
    UART_send_str(«AT+RST\r\n»);
    uart_wait(«ready»); это просто пример того что я имею ввиду.

  16. Alex_EXE пишет 09.02.2016 в 23:10 #

    Данный модуль пока применил только в одном проекте, где он по HTTP (точнее данные передаются в голом виде, для формальности использовал HTTP обёртку) обращается к специальному серверу по форматированному протоколу.
    Данные модули отличаются не очень стабильной работой, можете попробовать использовать другие прошивки.
    С тем, что если модуль словив хоть одну ошибку — повиснет — такое есть у них, причём помогает только аппаратный ресет или сброс питания.
    Может быть ваш модуль на малой скорости не успевает передать все данные и приходит ответ, из-за чего он виснет. Попробуйте, ради проверки, обмениваться меньшими объёмами данных или увеличить интервалы между ответами на запросы.

  17. M9cO пишет 10.02.2016 в 00:32 #

    Спасибо за совет, попробую поставить какую-нибудь третью прошивку(может и поставленная вторая глючная) . Именно запрос приходит в кривом виде, я даже на официальном форуме тему создал — безрезультатно. Ради интереса можете посмотреть на скрины с экрана, где вводятся одинаковые команды, а затем обращается браузер к этому созданному серверу. http://esp8266.ru/forum/threads/poluchenie-raznoj-infy-na-raznyx-skorostjax-pri-obraschenii-brauzerom.992/

    Я тут подумал, а что если сделать ожидание определенного ответа лишь некоторое время, а затем просто идти дальше по коду. Не пропускать лишь +IPD.

  18. Alex_EXE пишет 10.02.2016 в 03:21 #

    А как в такой ерунде можно будет найти заветные данные? точнее с какой вероятностью они дойдут.
    Модуль при этом виснет?
    Всё таки мне кажется, что модуль не успевает принимать данные и выплёвывать их в UART на малой скорости.
    Для справки, у моего модуля скорость 115200, прошивка ESP_8266_BIN0.92.bin .

  19. M9cO пишет 10.02.2016 в 03:50 #

    Нет, модуль не виснет. Я и говорю что это происходит если общаться на любой скорости от 9600 до 38400. А если делать все тоже самое на более высокой , то более менее стабильно приходит get-запрос. Я проверил Вашу теорию у одного из знакомых, он при мне перевел модуль на 9600 и сделал тож самое, все пришло отлично.
    1) Разве после get-запроса от браузера приходит «ОК» ? У меня ни с одного не получилось его дождаться. Т.е. как понять когда браузер все выплюнул и можно отправлять данные? (сейчас стоит простая задержка)
    2) Можете выложить прошивку куда либо? я её тестану.

  20. Alex_EXE пишет 10.02.2016 в 05:24 #

    1. для этих целей IDP как раз таки используется, но Вам, как то с нею не свезло. Попробуйте ещё какую-нибудь другую прошивку.
    Вам ведь при этом, скорее всего, нужен будет не только факт обращения к серверу, но ещё и данные с него получить (возвращение данных со страницы или переход, да и имя самой страницы то же имеет значение), так что такие полумеры — не очень хороший вариант, получать — так всё получать, а потом (или по ходу) разбираться.
    2. Нет, тот код в том виде, в котором он сейчас, выложить не могу. Т.к. он подпадает под NDA, специфичен и пока не прибран. Когда-нибудь в будущем есть планы реализации некоторых конструкций с wi-fi, их скорее всего выложу. Сейчас же мне поделиться нечем.

  21. M9cO пишет 10.02.2016 в 17:20 #

    начал получать ответ «ОК» после обращения браузера. Пришлось прошить старую «Прошивка AT v0.20 SDK v0.9.3 28.11.2014» но тут нельзя менять скорость соединения, команды нет такой. Видимо в новых прошивках, просто убрали этот ответ =\

  22. M9cO пишет 10.02.2016 в 19:17 #

    пардон, можно менять, только в официальном руководстве AT v.20 об этом ни слова. Меняется командой «AT+IPR=»

Комментарии RSS

Оставьте отзыв