ESP8266

Материал из Записки на полях
Перейти к навигации Перейти к поиску

Описание

WI-FI модуль ESP8266 - это полноценный 32 битный микроконтроллер со своим набором GPIO, в том числе SPI, UART, I2C. При этом схема модуля состоит из минимального количества деталей: самого чипа ESP8266, flash памяти, кварца.

Модуль продается с загруженной прошивкой, которая образует WI-FI--UART мост для подключения к другому микроконтроллеру, в том числе и к Arduino. Настройка и обмен данными происходят с помощью АТ команд.

Данный модуль не является полной заменой других вариантов беспроводных технологий, т.к. энергопотребление все же у ESP8266 намного выше, чем например у nRF24LO1/nRF24LE1. В режиме WI-FI--UART моста модуль не пойдет для создания полноценного веб интерфейса на простейших 8 битных м/к, а только как простейшее управление с помощью небольших TCP пакетов.

Сейчас в продаже можно найти готовые модули 12 видов: с подключением внешней антенны, с керамической антенной, с антенной из дорожек, в экранированном корпусе. Так же бывает выведено разное количество GPIO.

Встречаются варианты модулей, с установленной памятью 512 кбайт(4 мегабита) , а так же 4мбайт(32 мегабита). Редко, но попадаются с флеш памятью 1 мбайт(8 мегабит). Почти все разновидности ESP-12 и новые ESP-07 имеют на борту 4 мегабайта. Объем памяти можно определить по маркировке flash чипа, посмотреть в программе Flash Download Tool или на вкладке /debug. Маркировка имеет вид 25QXX, где XX - объем в мегабитах, например 25Q32 имеет на борту 32 мегабита=4 мегабайта.

Технические характеристики

  • Процессор: одноядерный Tensilica L106 частотой до 160 MHz.
  • Поддерживаемые стандарты WI-FI: 802.11 b/g/n.
  • Поддерживаемые типы шифрования:WEP, WPA, WPA2.
  • Поддерживаемые режимы работы: Клиент(STA), Точка доступа(AP), Клиент+Точка доступа(STA+AP).
  • Напряжение питания 1.7..3.6 В.
  • Потребляемый ток: до 215мА в зависимости от режима работы.
  • Количество GPIO: 16 (фактически до 11). Доступно на модулях: ESP-01 - 4, ESP-03 - 7+1, включая UART. Существуют и другие варианты модулей.
  • Интерфейсы: 1 ADC, I2C. UART, SPI, PWM.
  • Внешняя Flash память может быть установлена от 512кб до 4мб.
  • RAM данных 80 кб, RAM инструкций - 64 кб.
  • Спецификация чипа Медиа:ESP8266_Specifications_v4.pdf

NodeMCU

NodeMCU LUA Amica R2 ESP8266 Wifi Board - версия ESP8266 (чаще всего ESP-12) с прошивкой NodeMCU и интерпретатором языка Lua. Имеет встроенный microUSB порт и CP2102 чип, что позволяет подключить для отладки к компьютеру через microUSB кабель. Распаянная и подписанная «гребенка» с tx, rx, gnd, 3v3, 8ю цифровыми портами и сколько то аналоговых (вроде 3). Плата удобна для быстрого прототипирования без пайки.

Преимущества

  • уже содержит интерфейс UART-USB с разъемом micro USB. Поэтому для его подключения к компьютеру нужен лишь кабель USB-microUSB.
  • имеет выводы всех доступных сигналов с ESP8266. Вот моя схема подключения к модулю различных датчиков.
  • имеет flash 4 Mбайт, а NODEMCU имеет встроенную файловую систему spiffs.
  • есть возможность обновлять прошивку из облака или через USB.
  • можно создать множество скриптов на LUA и записать их в файловую систему. После чего через WIFI можно вызывать нужные скрипты на исполнение.

Библиотека расширения LUA содержит следующие модули:

json, file, timer, pwm, i2c, spi, 1-wire, net, mqtt, coap, gpio, wifi, adc, uart и system api.

Контракты платы могут быть запрограммированы для gpio, i2c, pwm. Доступны две версии прошивки с форматом целых, либо вещественных чисел.

Следует отметить, что можно программировать свои разработки на СИ. Но проблема в том, что для отладки каждого изменения в своей программе необходимо собирать прошивку объемом 200 KБ и грузить в модуль примерно 1 минуту. Т.е. сколько ошибок — столько минут.

Другой путь — отладка модулей на LUA и в последствии (если есть необходимость) перенос их на СИ с помощью API CИ для LUA.

Недостатки

Основной недостаток в том, что VM LUA исполняет LUA скрипты лишь размещенные в оперативной памяти кристалла. А этой памяти для скриптов всего лишь 20 Кбайт. Этого объема памяти хватает на исполнение скрипта примерно в 110 строк. Поэтому создание сравнительно больших скриптов для данного модуля имеет свою специфику.

  1. необходимо алгоритм разделить на линейные блоки.
  2. записать эти блоки в отдельные файлы файловой системы модуля
  3. исполнять эти модули с помощью оператора dofile.

При написании модулей надо придерживаться следующих правил:

  • В конце каждого модуля явно вызвать сборщик мусора;
  • Для обмена данными между модулями использовать глобальные переменные, а для вычислений внутри модулей -локальные.

Ссылки по NodeMCU ESP8266

  1. NodeMCU LUA Amica R2 ESP8266 Wifi Board - ESP8266 для "чайников"
  2. Особенности создания программ в NODEMCU ESP8266 для «интернета вещей»

Алгоритм прошивки

1. Скачиваем программу для прошивки Медиа:XTCOM_UTIL.zip или Медиа:Esptool-master.zip или Медиа:FLASH_DOWNLOAD_TOOLS_v0.9.3.1_141118.rar [1]

2. Отключите от последовательного порта вашу терминальную программу.

3. Отключите CH_PD от питания, подключите GPIO0 модуля к GND, подключите обратно CH_PD модуля.

4. Запускайте программу для прошивки модуля и загружайте новую прошивку в модуль ESP8266. [2]

AT команды

ESP8266 AT команды
Команда Описание Тип Выполнение Запрос/Тест Параметры
AT Проверка модуля. Если модуль успешно стартовал, то отвечает "OK" базовая AT - -
AT+RST Перезапуск модуля. После успешного перезапуска возвращает "OK" базовая AR+RST - -
AT+GMR Отобразить версию прошивки. Версия отображается в виде 8 или 10 цифр. Первая группа 4 цифры - версия AT (например, 0019), вторая группа 4 или 6 цифр - версия SDK (например, 000902) базовая AT+GMR - -
AT+GSLP Переход в режим пониженного энергопотребления базовая AT+GSLP=<время в мс> - Пример: AT+GSLP=5000 (5сек)

Для того, чтобы модуль вышел из режима сна, необходимо соединить выводы XPD_DCDC и EXT_RSTB

ATE включить/выключить эхо базовая ATE0

ATE1

- Замечание: ATE без 0 или 1 приводит к ошибке.
AT+RESTORE Сбросить на заводские настройки базовая AT+RESTORE - Примечание: после сброса настроек произойдет перезагрузка модуля
AT+ UART Настройка последовательного интерфейса базовая AT+ UART=baudrate,databits,stopbits,

parity,flow control

- скорость

data bits

5:5 bits data

6:6 bits data

7:7 bits data

8:8 bits data

stop bits

1:1 bit stop bit

2:1.5 bit stop bit

3:2 bit stop bit

parity

0:None

1:Odd

2:EVEN

flow control

0:disable flow control

1:enable RTS

2:enable CTS

3:enable both RTS and CTS

(MTCK - UART0 CTS , MTDO - UART0 RTS)

Пример:

AT+UART=115200,8,1,0,0

AT+CWMODE Переключение режима wifi. Для вступления в силу требуется перезапуск модуля командой AT+RST wifi AT+CWMODE=<режим> AT+CWMODE?

AT+CWMODE=?

1=Station, 2=AP, 3=Оба режима (Station+AP)
AT+CWJAP Подключение к AP wifi AT+CWJAP ="идентификатор сети","пароль" AT+CWJAP? SSID и пароль указываются в двойных кавычках
AT+CWLAP Отобразить список доступных AP. Выводит SSID, метод шифрования, силу сигнала. Типы шифрования: 0:Open, 1: WEP, 2:WPA_PSK, 3:WPA2_PSK,4:WPA_WPA2_PSK wifi AT+CWLAP - -
AT+CWQAP Отключение от AP wifi AT+CWQAP AT+CWQAP=? -
AT+CWSAP Установить параметры для режима AP wifi AT+CWSAP= <идентификатор сети>,<пароль>,<канал>,<тип шифрования> AT+CWSAP? возвращает текущие параметры SSID и пароль указываются в двойных кавычках. Типы шифрования: 0:Open, 1: WEP, 2:WPA_PSK, 3:WPA2_PSK, 4:WPA_WPA2_PSK
AT+CWLIF Отобразить IP адреса (только для режимов 2-SoftAP и 3-Station+SoftAP) подключенных клиентов wifi AT+CWLIF - -
AT+CWDHCP <режим>

0 : ESP8266 softAP

1 : ESP8266 station

2 : softAP и station

<вкл>

0 : Включить DHCP

1 : Выключить DHCP

wifi AT+CWDHCP=<режим>,<вкл> - -
AT+CIPSTAMAC посмотреть/установить MAC адрес в режиме station wifi AT+CIPSTAMAC= AT+CIPSTAMAC? -
AT+CIPAPMAC посмотреть/установить MAC адрес в режиме softAP wifi AT+CIPAPMAC= AT+CIPAPMAC? -
AT+CIPSTA посмотреть/установить IP адрес в режиме station wifi AT+CIPSTA= AT+CIPSTA? -
AT+ CIPAP посмотреть/установить IP адрес в режиме softAP wifi AT+CIPAP= AT+CIPAP? -
AT+CIPSTATUS Отобразить статус подключения.

Возвращает =ID соединения 0-4"=тип соединения "TCP" or "UDP",=IP адрес,=порт,=тип связи: 0: подсоединен как клиент, 1: как сервер

TCP/IP AT+CIPSTATUS - 2: Получен IP

3: Connected

4: Disconnected

id соединения (0~4),

"TCP" или "UDP"

IP

port

0: ESP8266 клиент

1: ESP8266 сервер

AT+CIPSTART Установить подключение TCP или UDP. TCP/IP 1. Одиночное подключение (+CIPMUX=0)

AT+CIPSTART= ,, [,(),()] 2. Множественное подключение: (+CIPMUX=1) AT+CIPSTART= ,, [,(),()]

AT+CIPSTART=? ID

соединения 0-4,

<тип>=TCP или UDP, <адрес>=IP адрес удаленного хоста, <порт>= порт удаленного хоста.

[] только для UDP

[] только для UDP

Возвращает "OK", "ERROR" или "ALREADY CONNECT"

0 : destination peer entity of UDP will not change.

1 : destination peer entity of UDP can change once.

2 : destination peer entity of UDP is allowed to change.

AT+CIPSEND Отправить данные TCP/IP 1. Одиночное подключение (+CIPMUX=0)

AT+CIPSEND=<длина>

2. Множественное подключение: (+CIPMUX=1) AT+CIPSEND= <идентификатор>,<длина>

AT+CIPSEND=? Длина данных в пакете до 2048 байт. Между пакетами интервал 20мс. После получения данной команды модуль возвращает ">" и переходит в режим приема данных по RX, после приема данных необходимой длины передает их в радиоканал. При успешной передаче возвращает "SEND OK". Прервать режим приема данных и перейти в командный режим можно последовательностью "+++"
AT+CIPCLOSE Закрыть подключение TCP или UDP TCP/IP 1. Множественное подключение:

(+CIPMUX=1) AT+CIPCLOSE=

2. Одиночное подключение (+CIPMUX=0) AT+CIPCLOSE

AT+CIPCLOSE=? Возвращает "LINK IS NOT" или "UNLINK" если ID соединения уже разорвано, ERROR если соединения нет.
AT+CIFSR Отобразить IP адрес, который получили от AP и адрес softAP TCP/IP AT+CIFSR AT+CIFSR=? -
AT+CIPMUX Выбрать режим одиночных или множественных подключений TCP/IP AT+CIPMUX=<режим> AT+CIPMUX? 0=одиночные подключение,

1=множественные подключения.

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

AT+CIPSERVER Запустить (перезапустить) сервер TCP/IP AT+CIPSERVER= <режим>[,<порт> ] - 0=сервер отключен,

1=сервер запущен.

Порт по умолчанию:333. Для запуска сервера модуль должен быть в режиме множественных подключений AT+CIPMUX=1.

AT+CIPSTO Установить таймаут сервера TCP/IP AT+CIPSTO=<таймаут> AT+CIPSTO? таймаут в секундах от 0 до 7200
AT+CIPMODE Установить сквозной режим TCP/IP AT+CIPMODE=<режим> AT+CIPMODE? 0=обычный режим,

1=unvarnished transmission mode

AT+CIUPDATE Обновление прошивки через облако. Модуль должен быть в режиме 1 или 3 и быть подключен к AP с доступом к интернет. TCP/IP AT+CIUPDATE - 1 found server

2 connect server

3 got edition

4 start update

AT+PING Пинг по имени хоста или IP адресу TCP/IP AT+PING=ip - Примеры:

AT+PING="192.168.1.1"

AT+PING="ya.ru"

+IPD Получить данные из сети TCP/IP (+CIPMUX=0)

+IPD,:

(+CIPMUX=1)

+IPD,,:

- 1. Одиночные подключения

(+CIPMUX=1) +IPD,<длина>:<данные>

2. Множественные подключения (+CIPMUX=1) +IPD,,<длина>,<данные>

Ссылки

  1. Прошивка и запуск модуля ESP8266
  2. Пример использования через облако IBM
  3. Сайт посвященный чипу esp8266
  4. Очень короткое знакомство с WiFi модулем ESP8266 ESP-03
  5. Пример программирования в среде SDK первая прошивка
  6. http://tim4dev.com/2015/03/esp8266-wifi-direct-programming/
  7. https://geektimes.ru/post/242669/ - esp8266 + noolite
  8. Настройки с MODBUS ::
    1. Скачать и установить python - https://www.python.org/downloads/release/python-2711/
    2. запустить cmd(windows), перейти в каталог cd c:\Python27 , набрать команду pip install pyserial
    3. форум тут - http://esp8266.ru/forum/threads/razrabotka-biblioteki-malogo-webservera-na-esp8266.56/page-80

Сноски

  1. для Win систем подойдет XTCOM UTIL (удобно работать, если прошивка состоит из одного файла), мультиплатформенный esptool (требуется python, нужно указывать параметры в командной строке), FLASH DOWNLOAD TOOL (много настроек, удобно прошивать прошивки, состоящие из нескольких файлов, позволяет «собрать» прошивку в один файл из нескольких). Также вы найдете и другие программы для прошивки ESP8266 — попробуйте разные и пользуйтесь той, которая вам больше понравится.
  2. Загрузка прошивки в модуль обычно осуществляется на скорости 115200, но режим прошивки модуля поддерживает авто определение скорости и прошивка может быть осуществлена на скорости от 9600 и выше. Максимальная скорость зависит от многих факторов (вашего USB-TTL конвертера, длины проводов и прочего) и может быть определена экспериментально на конфигурации именно вашего оборудования.