ESP8266 NodeMCU распиновка (pinout)
Распиновка (pinout) NodeMCU V2 (Amica, DOIT) полностью совпадает с распиновкой ESP8266 NodeMCU V3 (LoLin). Исключение составляют зарезервированные выводы RSV (на рисунке вверху слева). У NodeMCU V3 на них заведена «земля» и напряжение 5V с USB-разъема.

Описание и назначение выводов NodeMCU V2 ESP8266
GND — общий, «земля»
Выводы питания
Vin — вывод для подключения внешнего источника питания 5V. Стабилизатор AMS1117-3.3 позволяет подавать питание на Vin в широком диапазоне от 5 до 10 V. Хотя стабилизатор допускает подачу более высокого напряжения (до 15 V), но без дополнительного охлаждения может возникать перегрев чипа.
3.3V — контакт выходного напряжения внутрисхемного стабилизатора. Может быть использован для питания подключаемых к плате датчиков. Суммарная максимальная нагрузка всех выводов 3.3V не должна превышать 300мА.
Выводы GPIO
GPIO (General Purpose Interput Output) — контакты общего назначения для ввода/вывода данных. Могут быть сконфигурированы как входы или выходы и программно назначены на различные функции. Распиновка представлена на рисунке.
Выводы управления
RST (Reset) — вывод используется для сброса микроконтроллера ESP8266.
EN (Chip Enable) — при подаче на вывод сигнала высокого уровня, микроконтроллер ESP8266 переходит в рабочий режим, при сигнале низкого уровня — в режим низкого энергопотребления (режим энергосбережения).
WAKE — вывод используется для пробуждения чипа ESP8266 из режима глубокого сна (deep-sleep mode).
АЦП (ADC)
ADC0 / TOUT — вывод встроенного 10-разрядного аналого-цифрового преобразователя (АЦП). Преобразованные значения лежат в интервале 0-1023.
Плата разработки NodeMCU V2 имеет внутренний делитель напряжения, входной диапазон АЦП составляет 0 — 3,3 В.
UART
UART — асинхронный последовательный интерфейс устанавливает связь с другими устройствами по шине UART.
SPI
SPI (Serial Peripheral Interface) — последовательный периферийный интерфейс. NodeMCU имеет два SPI (SPI и HSPI) в ведущем и подчиненном режимах.
SDIO
SDIO — интерфейс безопасных цифровых входов/выходов, предназначен для коммутации с внешней флэш-памятью стандарта SD по последовательной шине.
Reserved
FLASH
Кнопка Flash на NodeMCU подключает к земле GPIO0. Ее можно использовать как обычную кнопку. Если программно подтянуть вывод GPIO0 с помощью внутреннего подтягивающего резистора к высокому уровню, то появление низкого уровня на этом выводе будет означать, что кнопка нажата.
Интерфейс I2C — последовательная асимметричная шина. I2C используется для подключения датчиков и периферийных устройств. NodeMCU ESP8266 не имеет аппаратных выводов I2C, но интерфейс можно реализовать программно. Поддерживаются как I2C Master, так и I2C Slave. Обычно в качестве контактов I2C используются следующие выводы.
PWM (pulse-width modulation) — широтно-импульсная модуляция (ШИМ) управляет мощностью методом пульсирующего включения и выключения вывода. NodeMCU поддерживает программный ШИМ на выводах, обозначенных на рисунке изгибающейся линией.

Onboard LEDs
Плата имеет два встроенных светодиода. Один находится на плате NodeMCU и подключен к GPIO16, а другой на плате модуля ESP-12 и подключен к GPIO2.
CLK (GPIO6), SDO (GPIO7), CMD (GPIO11), SD1 (GPIO8), SD2 (GPIO9) и SD1 (GPIO10) — вывода подключены к Flash чипу в модуле ESP-12E, не рекомендуется использовать.
Выводы GPIO6-GPIO11 (SDIO) привязаны к встроенной памяти и не рекомендуются к использованию в других целях, кроме подключения внешней памяти. Все цифровые контакты ввода/вывода, за исключением GPIO16, поддерживают обработку прерываний.
TX (GPIO1), RX (GPIO3) — контакты для загрузки прошивки и связи с компьютером, не рекомендуется использовать.
Материалы по теме:
Размещение этой статьи на других сайтах как полностью, так и частично разрешено только после согласования с администрацией myROBOT.RU
GPIO 0..16
Как можно задействовать GPIO6..11?
В инструкциях написано, что эти пины вроде как используются для общения с картой памятью. Но так же есть ссылки на использование этих пинов с другими функциями.
Сможем мы использовать эти пины?
А то как то маловато , 0, 2, 15, 16 уже заняты .
tretyakov_sa
Moderator
Команда форума
Как можно задействовать GPIO6..11?
В инструкциях написано, что эти пины вроде как используются для общения с картой памятью. Но так же есть ссылки на использование этих пинов с другими функциями.
Сможем мы использовать эти пины?
А то как то маловато , 0, 2, 15, 16 уже заняты .
В документации написано так: Цифровые контакты 6-11 используются для подключения флэш -памяти чипа на большинстве модулей. Попытка использовать эти контакты, вероятно, приведет к краху программы.
Хотя использовать GPIO9 и GPIO10 можно.
nikolz
Well-known member
В документации написано так: Цифровые контакты 6-11 используются для подключения флэш -памяти чипа на большинстве модулей. Попытка использовать эти контакты, вероятно, приведет к краху программы.
Хотя использовать GPIO9 и GPIO10 можно.
Не знаю где Вы читали, но если возьмете схему чипа ESP8266EX
то увидите, что GPIO и Pin это две большие разницы.
Есть лишь GPIO 0,1,2,3,4,5,12,13,14,15,16. GPIO c 6 по 11 нет у чипа снаружи. может быть внутри, но тогда надо чип пилить.
tretyakov_sa
Moderator
Команда форума
Не знаю где Вы читали, но если возьмете схему чипа ESP8266EX
то увидите, что GPIO и Pin это две большие разницы.
Есть лишь GPIO 0,1,2,3,4,5,12,13,14,15,16. GPIO c 6 по 11 нет у чипа снаружи. может быть внутри, но тогда надо чип пилить.
Если пользоваться ESP-1 bkb ESP-7, Вы как всегда правы!
Но ESP-12 имеет эти самые GPIO:

Нижний ряд — они и есть.
Написано это: Digital pins 6—11 are not shown on this diagram because they are used to connect flash memory chip on most modules. Trying to use these pins as IOs will likely cause the program to crash.
На вот этой странице: Arduino/reference.md at master · esp8266/Arduino · GitHub
nikolz
Well-known member
Если пользоваться ESP-1 bkb ESP-7, Вы как всегда правы!
Но ESP-12 имеет эти самые GPIO:

Нижний ряд — они и есть.
Написано это: Digital pins 6—11 are not shown on thBis diagram because they are used to connect flash memory chip on most modules. Trying to use these pins as IOs will likely cause the program to crash.
На вот этой странице: Arduino/reference.md at master · esp8266/Arduino · GitHub
Вы не точны ESP12 не имеет нижнего ряда его имеет ESP12-F(смотрите внимательно)
nikolz
Well-known member
и еще я Вам указал nodemcu, которая сделана на ESP12, и сам чип , причем здесь ESP1 и 7
tretyakov_sa
Moderator
Команда форума
и еще я Вам указал nodemcu, которая сделана на ESP12, и сам чип , причем здесь ESP1 и 7
Человек спрашивал:
Как можно задействовать GPIO6..11?
Значит знает, где они и на каких платах.
sarmathus
New member
Вот здесь: ESP8266 ESP-201 module — freeing up GPIO9 and GPIO10 | smarpl.com
описывается, как даунгрейдить флеш с четырехканального SPI до двухканального, уменьшив скорость обмена с флешем в 2 раза, но освободив GPIO9 и GPIO10. Нужен фен, пяльник и модификация прошивки.
Последнее редактирование: 15 Июн 2016
shuraf
Member
Вы не точны ESP12 не имеет нижнего ряда его имеет ESP12-F(смотрите внимательно)
Еще их выведенными наружу имеют ESP-12Q
* Не удалось подергать GPIO16 командой digitalWrite(16, LOW). Модуль ушел в циклический ребут.
Но сработало digitalWrite(16, false)
Придется довольствоваться малым SHT10+BMP280+MH-Z19+DS18B20 = 5 пинов из 6 + rx_tx
shuraf
Member
Вот здесь: ESP8266 ESP-201 module — freeing up GPIO9 and GPIO10 | smarpl.com
описывается, как даунгрейдить флеш с четырехканального SPI до двухканального, уменьшив скорость обмена м флешем в 2 раза, но освободив GPIO9 и GPIO10. Нужен фен, пяльник и модификация прошивки.
Вот жеж извращенцы неугомонные
При катострафической нехватке входов слейвом подключу ардуинку мини.
Leon010203
New member
Единственное где я видел их использование — подключение к raspberry pi как wifi адаптор
Atom
Member
Вот жеж извращенцы неугомонные
При катострафической нехватке входов слейвом подключу ардуинку мини.
Не обязательно Ардуино Мини. Можно обычный ATTiny2316 посадить — при его цене в 50 пенсов расходы намного дешевле ардурины мини. можно извратиться и на 74**595. Решений куча.
guinpin
New member
А куда у вас заняты пины 0 и 2? У меня на них релюшки щелкают, например. Подтягиваете к питанию через 10К, а для прошивки 0 перемычкой на землю.
16 занят только если вам нужен дипслип. Я не гуру по ESP8266, может еще для чего его можно использовать.
Так что, целых три пина доступны.
Кстати, как раз три пина требуется для управления сдвиговым регистром. Так что, если нужны обычные цифровые выходы, таким макаром их можно наплодить сколько угодно
PS: Посмотрел 15 пин — он тоже нужен только при старте. Притягиваете на землю через 10К и потом можно использовать как выход.
В общем, можно использовать пины и как входы, если есть гарантия, что на них не будет подаваться сигнал во время старта.
Последнее редактирование: 11 Июл 2016
A.V
New member
16 занят только если вам нужен дипслип.
С 16-м не всё так красиво. Сделал было его на своей плате на управление выходом, а он дрыгается при перезагрузке. Погуглив, нашёл, что я не один такой. Хорошо, это был запасной вариант, а основной через DS2406.
Итого на ESP07/12F имеем NRF24L01 /5 ног/, I2C/2 ноги/, 1Wire /1 нога/ и, опционально, GPIO вход/выход + ADC
guinpin
New member
С 16-м не всё так красиво. Сделал было его на своей плате на управление выходом, а он дрыгается при перезагрузке. Погуглив, нашёл, что я не один такой.
Бить себя пяткой в грудь не буду, но если использовать для управления релюшкой, например, и небольшая задержка не критична, можно воткнуть между ногой и землей конденсатор подходящей емкости. Хотя, конечно, граблей в таком решении слишком дофига.
Через DS2406 вы действительно удаленно рулите устройством или это локальный «расширитель пинов»? Если локальный, чем оно лучше, например 74HC595?
A.V
New member
Бить себя пяткой в грудь не буду,
.
Через DS2406 вы действительно удаленно рулите устройством или это локальный «расширитель пинов»? Если локальный, чем оно лучше, например 74HC595?
Не надо пяткой – вывих будет Когда выяснилось, что оно так себя ведёт, пробовал варианты — там не только дрыганье ногой (довольно длинное к тому ж), но и что-то похожее при программировании. Хлопотно. В общем, на той плате, что без 2406 (тупо розетка-таймер с 16х4 LCD для освещения цветов — по-быстрому, на замену сгоревшей), перекинул провода с какого-то свободного пина и успокоился.
DS2406 на плате как расширитель, потому как в проекте есть ещё 1-wire, а ног не вагон )) Преимуществ перед 595/165 у него много, но он сильно дороже.
— На 595 надо делать хитрую подтяжку, иначе при включении выходы могут быть в любом состоянии
— по ощущениям от 595 на макетке — ловит все окрестные шумы и может включить что угодно «не то»
— DS может работать как на вход, так и на выход (у меня 2й канал как «GPIO» выведен)
— Надо 1 ногу, вместо 4х пинов для 595 (да, даже не 3, а 4 — ибо надо ещё и про-инитить 595го корректно)
— у DS выход «защелкивается» и, вроде как, «вспоминает» своё состояние после сброса питания – но тут уж точно – на любителя ))
Плата делалась с претензией на универсальность, посему ноги задействованы довольно плотно (esp8266 / sensor-v3 — Bitbucket)
Mоnk
Member
Как-то так.
/*
GPIO0 SCL_pin
GPIO1 DS18B20_pin
GPIO2 SDA_pin
GPIO3 Rotary Encoder button
GPIO4 Rotary Encoder
GPIO5 Rotary Encoder
GPIO12 Свет
GPIO13 Вентиляция
GPIO14 DHT_pin
GPIO15 Нагреватель
GPIO16 Зуммер
*/
И все фунцЫклирует.
Fireforce
New member
У меня 2 абсолютно одинаковые платы LoLin NodeMcu v3. Покупал у разных продавцов.
В Arduino IDE выбираю простой пример мигания светодиодом и конфигурирую GPIO10,
— он же контакт SD3 на плате к которому подключен светодиод.
pinMode(10, OUTPUT);
Беру 1-ю плату и заливаю в нее скетч. Ничего не происходит, светодиод просто светится. На 2-й плате так же.
pinMode(9, OUTPUT);
т.е выход напряжения должен появится на GPIO9 — контакт SD2. Физически светодиод оставляю на прежнем месте, — подключенным к контакту SD3 (GPIO10).
Заливаю код в 1-ю плату, светодиод потух и дальше не происходит никаких действий.
Заливаю этот же код во 2-ю плату, — программа заработала, весело подмигивая светодиодом.
Спойлер: С чего все началось
Собрал я монитор качества воздуха. Изготовил печатную плату, установил на места все детали, а время на экран не выводится. Уже и программу проверил и модуль, а часы реального времени никак не могут связаться с программой в контроллере по GPIO10.
Правда автор проекта применил схожий контроллер, но от Amico. Я не придал этому особого значения и заказал схожий LoLin NodeMcu v3.
Долго я не мог понять в чем проблема. Потом начал звонить тестером ножки и оказалось что
11-я нога маленькой платы esp8266 с антенной — (GPIO9) физически соединена с ногой SD3 основной платы, хотя должна с SD2. Чтобы все заработало мне пришлось изменить строчку в
lua-скрипте.
В файле start.lua строку:
local ds=dofile('ds3231.lua')(12,6)
local ds=dofile('ds3231.lua')(11,6)
Печатную плату монитора качества воздуха не менял, — дорожка с SDA модуля ds3231 как шла на D12 контроллера, так и осталась.
ESP8266 NodeMCU V3 распиновка (pinout)
Распиновка (pinout) ESP8266 NodeMCU V3 «LoLin» совпадает с распиновкой ESP8266 NodeMCU V2 «Amica», за исключением двух зарезервированных у NodeMCU V2 выводов RSV (reserved). У NodeMCU V3 к ним подключена «земля» и напряжение 5V с USB-разъема.
Кроме использования двух зарезервированных выводов, плата NodeMCU V3 практически не отличается от V2. В обеих платах используются одинаковые микроконтроллеры ESP8266, они имеют одинаковое количество памяти. А к немногим отличиям можно отнести увеличенные габариты у V3, что неудобно при работе с макетными платами, и использование микросхемы CH340G в качестве моста USB – UART, вместо CP2102, что никак не сказывается на работе с платой, кроме необходимости выбора соответствующего драйвера.

Описание и назначение выводов NodeMCU V3 ESP8266
GND — общий провод, «земля»
Выводы питания
Vin — вывод для подключения внешнего источника питания 5V. Стабилизатор AMS1117-3.3 позволяет подавать питание на Vin в широком диапазоне от 5 до 10 V. Хотя стабилизатор допускает подачу более высокого напряжения (до 15 V), но без дополнительного охлаждения может возникать перегрев чипа.
3.3V — контакт, на который подается выходное напряжение внутрисхемного стабилизатора. Может быть использован для питания подключаемых к плате датчиков. Суммарная максимальная нагрузка всех выводов 3.3V не должна превышать 300мА.
V USB — вывод, на который заведено напряжение 5V с USB-разъема.
Выводы GPIO
GPIO (General Purpose Interput Output) — контакты ввода/вывода общего назначения. Могут быть сконфигурированы как входы или выходы и программно назначены на различные функции.
Выводы управления
RST (Reset) — вывод используется для сброса микроконтроллера ESP8266.
EN (Chip Enable) — при подаче на контакт сигнала высокого уровня, микроконтроллер ESP8266 переходит в рабочий режим, при сигнале низкого уровня — в режим энергосбережения.
WAKE — контакт используется для пробуждения чипа ESP8266 из режима глубокого сна (deep-sleep mode).
АЦП (ADC)
ADC0 / TOUT — вывод встроенного 10-разрядного аналого-цифрового преобразователя (АЦП). Преобразованные значения лежат в интервале 0-1023. Платы разработки NodeMCU V2 и V3 поставляются с внутренним делителем напряжения, поэтому входной диапазон составляет от 0 до 3,3 В. Диапазон входного напряжения для АЦП в кристалле ESP8266: 0 — 1 В.
UART
UART (Universal Asynchronous Receiver-Transmitter) — асинхронный последовательный интерфейс устанавливает связь с другими устройствами по шине UART. У контроллера ESP8266 два модуля UART. Максимальная скорость передачи данных, заявленная производителем, 4,5 Mbps.
SPI
SPI (Serial Peripheral Interface) — последовательный периферийный интерфейс. NodeMCU имеет два SPI (SPI и HSPI) в ведущем и подчиненном режимах.
SDIO
SDIO — интерфейс безопасных цифровых входов/выходов, предназначен для коммутации с внешней флэш-памятью стандарта SD по последовательной шине.
Reserved
FLASH
Кнопка Flash на NodeMCU подключает к земле GPIO0. Ее можно использовать как обычную кнопку. Если программно подтянуть вывод GPIO0 с помощью внутреннего подтягивающего резистора к высокому уровню, то появление низкого уровня на этом выводе будет означать, что кнопка нажата.
Интерфейс I2C — последовательная асимметричная шина. I2C используется для подключения датчиков и периферийных устройств. NodeMCU ESP8266 не имеет аппаратных выводов I2C, но интерфейс можно реализовать программно. Поддерживаются как I2C Master, так и I2C Slave. Обычно в качестве контактов I2C используются следующие выводы.
PWM (pulse-width modulation) — широтно-импульсная модуляция (ШИМ) управляет мощностью методом пульсирующего включения и выключения вывода. NodeMCU поддерживает программный ШИМ на выводах, обозначенных на рисунке изгибающейся линией.

Onboard LED
Плата имеет только один встроенный светодиод. Он подключен к GPIO2.
Материалы по теме:
Размещение этой статьи на других сайтах как полностью, так и частично разрешено только после согласования с администрацией myROBOT.RU
Знакомимся с модулем ESP8266 подробнее

ESP8266 — это микроконтроллер, разработанный в 2014 году и выпускающийся компанией Espressif Systems — китайской компанией из Шанхая. Он представляет собой сетевое решение с Wi-Fi-трансивером на борту плюс возможность выполнения записываемых в его память приложений.
Существует множество модификаций плат, именуемых обычно от ESP-01 до ESP-12. Сейчас уже появились ещё другие наименования плат от сторонних разработчиков. Отличия в платах заключается в основном в портах ввода-вывода, количестве флеш-памяти, вида коннекторов и т.п. Процессор — один и тот же, так что с точки зрения программирования не имеет значения какую плату программировать.
Спецификация ESP8266:
- Напряжение питания: 3,3 В
- Энергопотребление:10 мка. 170 мА
- Флеш-память: до 16 мб максимум (обычно 512 кб)
- Процессор: Tensilica L106, 32 бита
- Скорость процессора: 80. 160 МГц
- ОЗУ: 32 кб + 80 кб
- Порты ввода-вывода общего назначения: 17 (мультиплексируемые с другими функциями)
- АЦП: 1 ввод с разрешением 1024
- Поддержка 802.11: b/g/n/d/e/i/k/r
- Максимальное число подключений TCP: 5
Из спецификации видно, что вопрос как долго будет работать ESP8266 от батареек не может быть легко определён. Потребление энергии изменяется в очень широком диапазоне — при передаче на полной мощности оно составляет 170 миллиампер, а в режиме сне — всего 10 микроампер!
ESP8266 разработан так, что он может использовать подключённый к нему модуль памяти и это обычно флеш-память. Напомним, что количество циклов перезаписи в такую память составляет 10000 раз. Это вполне достаточно для случаев когда приложение записывает в память свои настройки или ведёт какой либо лог данных, но если ваше приложение записывает свои данные слишком быстро, память в скором времени перестанет работать.
Подключение к ESP8266
ESP8266 — это Wi-Fi устройство, значит и подключиться к нему можно через Wi-Fi, однако перед этим следует его настроить — процессор не знает названием вашей локальной сети и пароля для подключения к ней, а также других возможных настроек. Это, конечно, справедливо для случая когда мы хотим чтобы модуль подключался к нашей сети. Для случая когда сам модуль работает в режиме точки доступа, всё немного сложнее.
Для упрощения работы с модулем на стадии программирования и отладки своего приложения можно использовать последовательный порт (UART). ESP8266 имеет специальный последовательный порт для этого — два порта, означенных Rx и Tx. Tx — служит для передачи данных, а Rx — для приёма. Этими портами модуль соединяется с соответствующими портами партёра. Наиболее удобно подключить этот порт к компьютеру посредством переходника USB-UART. При таком подключении мы может отправлять модулю команды из программы терминала прямо с клавиатуры и получать ответы от модуля в терминал или записывать программу в модуль.
При подключении через UART следует установит одинаковую скорость портов. В процессе загрузки модуль ESP8266 пытается автоматически определить скорость подключения устройства-партнёра и установить у себя такую-же.
У модуля ESP8266 есть также второй последовательный порт. Главное его назначение — вывод диагностической и отладочной информации. Это может быть очень полезно при проверке своей программы. Пин Tx второго последовательного порта мультиплексирован с пином GPIO2.

Теория Wi-Fi
Работая с устройствами стандарта Wi-Fi, желательно иметь понимание принципе его работы в беспроводной сети. На высоком уровне, Wi-Fi — это беспроводная сеть для соединений TCP/IP. Wi-Fi — это набор протоколов беспроводной сети, описанных в стандарте IEEE 802.11.
Устройство, называемое Wireless Access Point (AP) — беспроводной точкой доступа (точкой доступа) работает как узел коммуникаций. Обычно оно подключено или работает в режиме роутера. Например, Wi-Fi роутер в вашем доме работает в таком режиме.
Модуль ESP8266 может работать как в режиме точки доступа (Access Point), так и в режиме клиента — рабочей станции (Station), а может и в обоих режимах одновременно. Чаще всего точка доступа имеет подключение к интернету и работает как мост между устройством и интернетом. Несколько рабочих станций в локальной сети общаются между собой также через точку доступа. Станция одновременно может быть подключена только к одной точке доступа. Каждое устройство в сети имеет собственный уникальный MAC-адрес — 48-битовое значение.
Если в пределах видимости находится несколько точек доступа, их потребуется как-то различать, поэтому у каждой точки доступа есть сетевой идентификатор, называемый SSID (Service Set Identifier, иногда также называемый BSSID) — это имя сети, имеющее длину до 32 символов.
Режим AT-команд
Самый быстрый способ пообщаться с модулем ESP8266 — это передать ему AT-команду и получить ответ. Набор AT-команд — это специальный набор инструкций, которые «знает» наш модуль и может выполнять определённые действия при их получении и выдавать в терминал результат их выполнения. Программа, называемая процессор AT-команд, уже установлена в модуле ESP8266 и готова к их приёму по последовательному порту. Эти команды начинаются с символов «AT».
AT-команды
Когда модуль подключён к терминалу компьютера, мы можем отправить самую простую команду — «AT«. В ответ на неё модуль должен отправить ответ «OK«.
| Тип | Формат | Описание |
|---|---|---|
| Тест | AT+=? | Запрос параметров и диапазона возможных значений |
| Запрос | AT+? | Запрос текущих значений параметров |
| Установка | AT+= | Установка значений параметров |
| Выполнение | AT+ | Выполнение команд |
Все команды заканчиваются символами «\r\n».
| Команда | Описание |
|---|---|
| AT | Пишет в ответ «OK» |
| AT+RST | Перезапускает модуль ESP8266 |
| AT+GMR | Возвращает версию SDK модуля и процессора AT команд. Пример: AT version:0.21.0.0 SDK version:0.9.5 |
| AT+GLSP= | Включение режима сна на указанное число миллисекунд. Модуль проснётся через указанное время. |
| ATE[0|1] | Отправка полученных AT команд обратно в терминал. ATE0 — эхо выключено ATE1 — эхо включено |
| AT+RESTORE | Восстановление значение по умолчанию из флеш-памяти |
| AT+UART_CUR=,,,, | Настройка режима работы UART |
| AT+UART_DEF=,,,, | То же, что и AT+UART_CUR=,,,, |
| AT+SLEEP? | Получить текущий режим сна |
| AT+SLEEP= | Режим сна: |
- 0 — режим сна выключен
- 1 — режим неглубокого сна
- 2 — режим модемного сна
- ecn — защита
- 0 — OPEN
- 1 — WEP
- 2 — WPA_PSK
- 3 — WPA2_PSK
- 4 — WPA_WPA2_PSK
- mode
- 0 — Soft AP
- 1 — Station
- 2 — Soft AP + Station
- 0 — DHCP включен
- 1 — DHCP выключен
- 0 — не подключаться
- 1 — подключаться
- stat
- 2 — получен IP
- 3 — подключен
- 4 — отключен
- 0 — ESP8266 работает как клиент
- 1 — ESP8266 работает как сервер
- type — тип, TCP или UDP
- addr — удалённый IP адрес
- port — удалённый порт
- local port — локальный порт
- mode — только для UDP
- 0 — режим одиночного подключения
- 1 — режим множественных подключений
- mode
- 0 — удалить сервер (требует перезапуска)
- 1 — создать сервер
- 0 — нормальный режим
- 1 — сквозной режим
Программирование ESP8266
Модуль ESP8266 позволяет записывать собственные приложения для их запуска. Вы может скомпилировать код с языка C и загрузить в модуль. Такая процедура называется «прошивкой» (flashing). Для того, чтобы ваше приложение выполняло полезные функции, у него должна быть возможность отправлять и принимать данные по сети и/или работать с внешними датчиками, входами и выходами. ESP8266 оснащён базовыми функциями для этого, набор которых представляет собой примитивную «операционную систему». Службы этой ОС могут быть вызваны вашим приложением. Они полностью документированы и для вас будет очень полезно уметь пользоваться ими.
Например, если вам надо подключиться к точке доступа WiFi, в API есть команда для этого. Для получения IP адреса также есть API, для получения времени с запуска модуля также есть API. Таких функций очень много и они позволяют делать с модулем очень много полезных вещей. Запомнить все функции, конечно, невозможно, но стоит знать об их существовании. В интернете можно получить последнюю информацию на сайте производителя: http://espressif.com/en/products/esp8266/ или http://bbs.espressif.com/.
Режим загрузки
Когда модуль ESP8266 загружается, он проверяет значения уровней на пинах MTDO (GPIO15), GPIO0 и GPIO2. Комбинация высоких и низких уровней на этих пинах позволяет получить 3-битовое число с восемью возможными значениями от 000 до 111. Каждое значение интерпретируется модулем:
Значение Десятичное значение Пояснение 000 0 нет данных 001 1 Загрузка с данных по UART. Также данные для прошивки модуля. 010 2 Быстрый старт 011 3 Загрузка с флеш-памяти 100 4 SDIO low speed V2 101 5 SDIO high speed V1 110 6 SDIO low speed V1 111 7 SDIO high speed V2 С практической точки зрения это значит, что если нам требуется нормальный запуск модуля, нам требуется загрузить его с флеш-памяти (значение на пинах 011), а если нам требуется перепрошить модуль, то на пинах должно быть значение 001.
SDK ESP8266
SDK (Software Development Kit — набор средств разработчика) для модуля ESP8266 для языка C представляет собой набор файлов, называемых заголовочными с расширениями .h. Простым языком это файлы определений типов данных и функций, которые могут потребоваться при компиляции программы. SDK ESP8266 содержит папку includes с файлами от компании Espressif для нашего модуля:
Файл Пояснение at_custom.h определения собственных расширений AT команд c_types.h определения для языка C eagle_soc.h Низкоуровневые определения и макросы espconn.h Определения для TCP и UDP espnow.h Функции поддержки esp now ets_sys.h нет данных gpio.h Порты ввода-вывода ip_addr.h Определения для IP адреса и макросы mem.h Определения для работы с памятью os_type.h Тип ОС osapi.h Пользовательские заголовки с названием «user_config.h» ping.h Определения для ping pwm.h Определения для ШИМ queue.h Определения списков и очередей smartconfig.h Определения конфигурации sntp.h Определения SNTP spi_flash.h Определения для флеш-памяти upgrade.h Определения для обновлений user_interface.h Определения для ОС и WiFi. Компиляция
Приложения для модуля ESP8266 пишутся обычно на языке C. Перед загрузкой программы в модуль её следует скомпилировать из текста в машинные коды.
Редактировать текст программы удобнее всего в каком-нибудь редакторе, который имеет подсветку синтаксиса, встроенную справку и другие полезные функции, и ещё лучше — в интегрированной среде разработки (Iintegrated Development Enviroment). Работая в такой среде вы можете написать текст программы, скомпилировать её и сразу же загрузить в модуль.
Широко известны такие среды разработки как Eclipse и Arduino IDE.
Eclipse — очень мощная среда, разработанная компанией IBM и получившая статус открытой много лет назад. Она написана на Java, что означает возможность работы в разных ОС: Windows, Linux, OS X. К этой среде разработки можно подключать множество дополнений, а набор таких дополнений для языка C называется «C Developers Tools» (CDT). CDT не включает компилятор языка C. Его следует выбрать самому. Подробнее о компиляции приложения для ESP8266 в Eclipse будет написано в отдельной статье.
Arduino IDE — гораздо более простая среда разработки, которая, тем не менее, позволяет писать и загружать в модуль свои приложения. Как это делать описано в нашей статье «Arduino IDE + ESP8266».
Отладка
При написании программы очень часто они работают не так как ожидалось. Для модуля ESP8266 отладка (получение служебной информации и состояния системы) облегчается наличием последовательного порта специально для вывода отладочной информации. Вы можете напечатать в UART1 (GPIO2) что хотите при помощи функции os_printf(). Если подключить на пину GPIO2 модуля преобразователь UART-USB, то вы сможете видеть эту информацию на экране компьютера в реальном времени. Таким образом, имея один порт UART для прошивки модуля, а второй для отладки, вам не придётся ничего переключать при создании своей программы. Включение или выключение вывода информации управляется функцией system_set_os_print().
В следующей статье мы напишем тестовую программу — мигание светодиодом, скомпилируем её и запишем в модуль.
Ещё наши статьи о WiFI модуле ESP8266:
- Arduino IDE + ESP8266
- ESP8266 + Arduino: пример скетча
- WiFi модуль ESP8266