Esp8266 какие пины можно использовать
Перейти к содержимому

Esp8266 какие пины можно использовать

  • автор:

ESP8266 NodeMCU распиновка (pinout)

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

ESP8266 NodeMCU Распиновка (pinout)

Описание и назначение выводов 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 поддерживает программный ШИМ на выводах, обозначенных на рисунке изгибающейся линией.

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

Arduino.ru

Irinka аватар

Если я не буду использовать режим deep sleep то и резистор на GPIO_16 не нужен и я могу использовать этот пин?

Для чего нужна подтяжка GPIO_2 к питанию? (у кого-то на схемах есть, у кого-то нет).

Эти пины можно использовать на вход/выход?

  • Войдите на сайт для отправки комментариев

Сб, 14/05/2022 — 21:34

Irinka аватар

Зарегистрирован: 28.06.2017

Второй аппаратный UART (Serial1) работает только на передачу?

SoftSerial поддерживается на всех пинах?

  • Войдите на сайт для отправки комментариев

Сб, 14/05/2022 — 21:36
Зарегистрирован: 19.10.2016

Там табличка — какие пины стоит юзать.

  • Войдите на сайт для отправки комментариев

Сб, 14/05/2022 — 22:27

Irinka аватар

Зарегистрирован: 28.06.2017

Хорошая статья, Спасибо.

GPIO2: pin is high on BOOT, boot failure if pulled LOW

Про GPIO2 поняла, подтяжка чтобы не было ошибки.

А про эти пины что? Как вход/выход?

GPIO_10 HIGH at Boot
GPIO_9 HIGH at Boot

  • Войдите на сайт для отправки комментариев

Сб, 14/05/2022 — 22:32

ua6em аватар

Зарегистрирован: 17.08.2016

на nodemcu я всю правую строну использую, кроме RX-TX: TFT, датчик температуры-влажности, кнопка, проблем нет работает месяцами

  • Войдите на сайт для отправки комментариев

Сб, 14/05/2022 — 22:37

Irinka аватар

Зарегистрирован: 28.06.2017

А второй uart ? gpio_15 подтянут к gnd

  • Войдите на сайт для отправки комментариев

Сб, 14/05/2022 — 22:45

ua6em аватар

Зарегистрирован: 17.08.2016

только завтра могу все пины расписать, здесь ни скетча ни девайса нет, если не изменяет память на пинах ниже земли висит дисплей, да, тактовая 160 мегагерц используется

  • Войдите на сайт для отправки комментариев

Сб, 14/05/2022 — 23:30
Зарегистрирован: 19.10.2016
Irinka пишет:

GPIO_10 HIGH at Boot

Я так понимаю, что на буте некоторые пины переводятся в указанный режим. Так что, если они чем-то управляют, то возможны спецэффекты при загрузке. Релюшка будет щелкать и тп.

  • Войдите на сайт для отправки комментариев

Вс, 15/05/2022 — 00:06

Irinka аватар

Зарегистрирован: 28.06.2017
ua6em пишет:

только завтра могу все пины расписать, здесь ни скетча ни девайса нет, если не изменяет память на пинах ниже земли висит дисплей, да, тактовая 160 мегагерц используется

  • Войдите на сайт для отправки комментариев

Вс, 15/05/2022 — 00:07

Irinka аватар

Зарегистрирован: 28.06.2017
sadman41 пишет:
Irinka пишет:
GPIO_10 HIGH at Boot

Я так понимаю, что на буте некоторые пины переводятся в указанный режим. Так что, если они чем-то управляют, то возможны спецэффекты при загрузке. Релюшка будет щелкать и тп.

Это да, там так же указано
GPIO4 and GPIO5 are the most safe to use GPIOs if you want to operate relays.

  • Войдите на сайт для отправки комментариев

Вс, 15/05/2022 — 00:09

Irinka аватар

Зарегистрирован: 28.06.2017

Мне нужно узнать про uart (буду подключать sim800), а платки ещё в пути, нет возможности попробовать.

  • Войдите на сайт для отправки комментариев

Вс, 15/05/2022 — 13:10

ua6em аватар

Зарегистрирован: 17.08.2016
Irinka пишет:

Мне нужно узнать про uart (буду подключать sim800), а платки ещё в пути, нет возможности попробовать.

UART не использую,
NODEMCU
D8 — TFT-LED
D7 — TFT-SDA
D6 — BUTTON
D5 — TFT-SCK
D4 — TFT-A0
D3 — TFT-RESET
D2 — LED_BUILTIN
D1 — DHT-11
D0 — TFT-CS

  • Войдите на сайт для отправки комментариев

Пнд, 16/05/2022 — 21:36

Irinka аватар

Зарегистрирован: 28.06.2017

Спасибо. Жду платку для грандиозных экспериментов XDDD

  • Войдите на сайт для отправки комментариев

Пнд, 16/05/2022 — 21:39

ua6em аватар

Зарегистрирован: 17.08.2016
Irinka пишет:

Спасибо. Жду платку для грандиозных экспериментов XDDD

мне с оказией досталась SIM800A а у неё не UART а RS-232 на выход )))

  • Войдите на сайт для отправки комментариев

Пнд, 16/05/2022 — 21:44

Irinka аватар

Зарегистрирован: 28.06.2017

Я покупала SIM800L, дешёвые.

Хочется попробовать SIM800C, но пока всё никак что-то.

  • Войдите на сайт для отправки комментариев

Пнд, 16/05/2022 — 21:54

andycat аватар

Зарегистрирован: 07.09.2017

Зачем? В жизни вы разницы между L C модулями не заметите, по стабильности, командам они одинаковы, разница (ну какую я только в практике заметил) только в логике включения и сброса.

  • Войдите на сайт для отправки комментариев

Пнд, 16/05/2022 — 22:11

Irinka аватар

Зарегистрирован: 28.06.2017

Можно использовать uart0 и для прошивки и для работы с sim800 по такой схеме?

  • Войдите на сайт для отправки комментариев

Втр, 17/05/2022 — 10:31

Komandir аватар

Зарегистрирован: 18.08.2018

ИМХО не ту линию разделили. Tx от SIM800 «коротит» на Tx USB-UART. Если SIM800 выставит «0», а USB-UART «1» .

  • Войдите на сайт для отправки комментариев

Втр, 17/05/2022 — 12:32

andycat аватар

Зарегистрирован: 07.09.2017
Komandir пишет:

ИМХО не ту линию разделили. Tx от SIM800 «коротит» на Tx USB-UART. Если SIM800 выставит «0», а USB-UART «1» .

а мне кажеться нормально все соеденено, и конечно одновременно только одно устройство может передавать данные, и вообще USB-UART цеплять параллельно модему так себе затея. если уж нужно контролировать что шлется в модем, то стОит TX USB-UART совсем отключить.

  • Войдите на сайт для отправки комментариев

Втр, 17/05/2022 — 21:58

Irinka аватар

Зарегистрирован: 28.06.2017

Нужно не для контроля, sim800 будет постоянно подключен к uart, а usb ttl будет только подключаться для прошивки

  • Войдите на сайт для отправки комментариев

Втр, 17/05/2022 — 21:59

Irinka аватар

Зарегистрирован: 28.06.2017

не хочу делать переключатель подключения конвертера и модема

  • Войдите на сайт для отправки комментариев

Втр, 17/05/2022 — 22:09

ua6em аватар

Зарегистрирован: 17.08.2016
Irinka пишет:

не хочу делать переключатель подключения конвертера и модема

по хорошему надо бы, хотя бы джампера

  • Войдите на сайт для отправки комментариев

Втр, 17/05/2022 — 22:17
Зарегистрирован: 07.04.2021
Irinka пишет:

Нужно не для контроля, только подключаться для прошивки

Чем ОТА не устраивает?

  • Войдите на сайт для отправки комментариев

Чт, 19/05/2022 — 15:02

Irinka аватар

Зарегистрирован: 28.06.2017

Об этом я не подумала, можно оставить один пин, который будет отвечать за разрешение OTA прошивки.

  • Войдите на сайт для отправки комментариев

Чт, 19/05/2022 — 15:31

ua6em аватар

Зарегистрирован: 17.08.2016
Irinka пишет:

Об этом я не подумала, можно оставить один пин, который будет отвечать за разрешение OTA прошивки.

  • Войдите на сайт для отправки комментариев

Чт, 19/05/2022 — 16:53

Irinka аватар

Зарегистрирован: 28.06.2017
#include #include #include #include const char* ssid = «YOUR_SSID»; const char* password = «YOUR_PASSWORD»; const byte OTA_PIN = 2; byte Flag_OTA = false; void setup() < pinMode(OTA_PIN, INPUT); if (OTA_PIN) < Flag_OTA = true; WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.waitForConnectResult() != WL_CONNECTED) < delay(5000); ESP.restart(); >ArduinoOTA.begin(); > > void loop()

  • Войдите на сайт для отправки комментариев

Чт, 19/05/2022 — 17:54

ua6em аватар

Зарегистрирован: 17.08.2016

понятно ))) (слона то я и не приметил)

  • Войдите на сайт для отправки комментариев

Чт, 19/05/2022 — 20:14
Зарегистрирован: 27.12.2016

Научите ESP шить по ота через WEB, тогда и этот пин будет вам освобожден.

  • Войдите на сайт для отправки комментариев

Чт, 19/05/2022 — 21:48

ua6em аватар

Зарегистрирован: 17.08.2016

Научите ESP шить по ота через WEB, тогда и этот пин будет вам освобожден.

я так понял Иринке надо иметь возможность блокировать прошивку через OTA

  • Войдите на сайт для отправки комментариев

Пт, 20/05/2022 — 13:39

Irinka аватар

Зарегистрирован: 28.06.2017

Да да, нужно отключать вай фай

  • Войдите на сайт для отправки комментариев

Пт, 20/05/2022 — 15:28

ua6em аватар

Зарегистрирован: 17.08.2016
Irinka пишет:

Да да, нужно отключать вай фай

правильные мысли видимо приходят глядя на вашу аватарку )))
Сами рисовали?

  • Войдите на сайт для отправки комментариев

Вс, 22/05/2022 — 11:56

Irinka аватар

Зарегистрирован: 28.06.2017

  • Войдите на сайт для отправки комментариев

Вс, 22/05/2022 — 12:39

ua6em аватар

Зарегистрирован: 17.08.2016
Irinka пишет:

вот. а обнадёжили в своих талантах. и как мне теперь с этой душевной травмой жить? )))

  • Войдите на сайт для отправки комментариев

Ср, 25/05/2022 — 09:50

Irinka аватар

Зарегистрирован: 28.06.2017

warning: move_uploaded_file(tmp/1111.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /usr/local/www/data/general/data/www/arduino.ru/includes/file.inc on line 629. warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/var/tmp/phpzRFNak' to 'tmp/1111.jpg' in /usr/local/www/data/general/data/www/arduino.ru/includes/file.inc on line 629. Ошибка закачки файла. Невозможно переместить закачанный файл.

Не получилось порадовать новой аватаркой

  • Войдите на сайт для отправки комментариев

Ср, 25/05/2022 — 11:14

Irinka аватар

Зарегистрирован: 28.06.2017

Я не поняла, минимальное напряжение логической единицы это 0,75 Вольт или 3,3*0,75=2,5 Вольт

  • Войдите на сайт для отправки комментариев

Ср, 25/05/2022 — 11:21

ua6em аватар

Зарегистрирован: 17.08.2016
Irinka пишет:

Я не поняла, минимальное напряжение логической единицы это 0,75 Вольт или 3,3*0,75=2,5 Вольт

это стандартное напряжение логическое единицы 0,75 от напряжения питания

  • Войдите на сайт для отправки комментариев

Ср, 25/05/2022 — 11:23

ua6em аватар

Зарегистрирован: 17.08.2016
Irinka пишет:

warning: move_uploaded_file(tmp/1111.jpg) [function.move-uploaded-file]: failed to open stream: No such file or directory in /usr/local/www/data/general/data/www/arduino.ru/includes/file.inc on line 629. warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/var/tmp/phpzRFNak' to 'tmp/1111.jpg' in /usr/local/www/data/general/data/www/arduino.ru/includes/file.inc on line 629. Ошибка закачки файла. Невозможно переместить закачанный файл.

Не получилось порадовать новой аватаркой

и эта устраивает, а как старого футуролога даже интригует )))

  • Войдите на сайт для отправки комментариев

Ср, 25/05/2022 — 11:27

Irinka аватар

Зарегистрирован: 28.06.2017

То есть при питании 3,3 Вольт, при 2 Вольтах на входе должен быть стабильный LOW

  • Войдите на сайт для отправки комментариев

Модуль Wi-Fi ESP8266 (ESP-01): подключение, прошивка и распиновка

Модуль ESP-01 с чипом ESP8266 предназначен для связи устройства с беспроводными сетями по WiFi.

Видеообзор

Общие сведения

ESP-01 — плата-модуль WiFi на базе популярного чипсета ESP8266EX . На борту платы находится микросхема Flash-памяти объёмом 2 МБ, чип ESP8266EX, кварцевый резонатор, два индикаторных светодиода и миниатюрная антенна из дорожки на верхнем слое печатной платы в виде змейки. Flash-память необходима для хранения программного обеспечения. При каждом включении питания, ПО автоматически загружается в чип ESP8266EX.

По умолчанию модуль настроен на работу через «AT-команды». Управляющая плата посылает команды — Wi-Fi модуль выполняет соответствующую операцию.

Но внутри чипа ESP8266 прячется целый микроконтроллер, который является самодостаточным устройством. Прошивать модуль можно на разных языках программирования. Но обо всё по порядку.

Работа с AT командами

Подключение и настройка

В стандартной прошивке Wi-Fi модуль общается с управляющей платой через «AT-команды» по протоколу UART.

На всех платах Iskra и Arduino присутствует хотя бы один аппаратный UART — HardwareSerial. Если же по каким то причинам он занят другим устройством, можно воспользоваться программным UART — SoftwareSerial.

HardwareSerial

На управляющей плате Iskra JS и платах Arduino с микроконтроллером ATmega32U4 / ATSAMD21G18 данные по USB и общение через пины 0 и 1 осуществляется через два раздельных UART . Это даёт возможность подключить Wi-Fi модуль к аппаратному UART на пинах 0 и 1 .

Список поддерживаемых плат:

Для примера подключим модуль Wi-Fi к платформе Iskra Neo.

Прошейте управляющую платформу кодом ниже.

Код прошивки
// serial-порт к которому подключён Wi-Fi модуль #define WIFI_SERIAL Serial1 void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); while (!Serial) { // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод WIFI_SERIAL.begin(115200); } void loop() { // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера if (WIFI_SERIAL.available()) { Serial.write(WIFI_SERIAL.read()); } // если приходят данные из компьютера - отправим их в Wi-Fi модуль if (Serial.available()) { WIFI_SERIAL.write(Serial.read()); } }
SoftwareSerial

Некоторые платы Arduino, например Uno, прошиваются через пины 0 и 1 . Это означает невозможность использовать одновременно прошивку/отладку по USB и общение с Wi-Fi модулем. Решение проблемы — программный UART . Подключите пины TX и RX ESP-модуля к другим контактам управляющей платы и используйте библиотеку SoftwareSerial.

Для примера подключим управляющие пины Wi-Fi модуля TX и RX — на 8 и 9 контакты управляющей платы. Прошейте управляющую платформу кодом ниже.

Код прошивки
// библиотека для работы программного Serial #include // создаём объект для работы с программным Serial // и передаём ему пины TX и RX SoftwareSerial mySerial(8, 9); // serial-порт к которому подключён Wi-Fi модуль #define WIFI_SERIAL mySerial void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); while (!Serial) { // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод WIFI_SERIAL.begin(115200); } void loop() { // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера if (WIFI_SERIAL.available()) { Serial.write(WIFI_SERIAL.read()); } // если приходят данные из компьютера - отправим их в Wi-Fi модуль if (Serial.available()) { WIFI_SERIAL.write(Serial.read()); } }
HardwareSerial Mega

На платах форм-фактора Arduino Mega 2560 аппаратный UART, который отвечает за передачу данных через пины 1 и 0 , отвечает также за передачу по USB. Это означает невозможность использовать одновременно UART для коммуникации с Wi-Fi модулем и отладки по USB.

Но на платах такого форм-фактора есть ещё дополнительно три аппаратных UART:

Serial1: пины 19(RX1) и 18(TX1) ;
Serial2: пины 17(RX2) и 16(TX2) ;
Serial3: пины 15(RX3) и 14(TX3) .

Список поддерживаемых плат:

Подключите Wi-Fi модуль к объекту Serial1 на пины 18 и 19 на примере платы Mega 2560 Прошейте управляющую платформу кодом ниже.

Код прошивки
// serial-порт к которому подключён Wi-Fi модуль #define WIFI_SERIAL Serial1 void setup() { // открываем последовательный порт для мониторинга действий в программе // и передаём скорость 9600 бод Serial.begin(9600); while (!Serial) { // ждём, пока не откроется монитор последовательного порта // для того, чтобы отследить все события в программе } Serial.print("Serial init OK\r\n"); // открываем Serial-соединение с Wi-Fi модулем на скорости 115200 бод WIFI_SERIAL.begin(115200); } void loop() { // если приходят данные из Wi-Fi модуля - отправим их в порт компьютера if (WIFI_SERIAL.available()) { Serial.write(WIFI_SERIAL.read()); } // если приходят данные из компьютера - отправим их в Wi-Fi модуль if (Serial.available()) { WIFI_SERIAL.write(Serial.read()); } }

Примеры работы

Рассмотрим несколько примеров по работе с «AT-командами»

Тестовая команда «AT»

Откройте монитор порта. Настройте скорость соединения — 9600 бод. Конец строки — NL & CR . Введите команду AT и нажмите «Отправить». Это — базовая команда для проверки работы Wi-Fi модуля. В ответ получим «OK»: Если ответа нет или появляются непонятные символы — проверьте правильность подключения и настройки скорости обмена данными.

Настройка режима работы

Wi-Fi модуль умеет работать в трёх режимах:

ESP8266. Начало работы, особенности

В этом уроке поговорим о микроконтроллере ESP8266 и платах на его основе. Как с ними работать и чем они отличаются от Arduino на базе МК AVR. ESP8266 – китайский микроконтроллер за 2 доллара с большим объемом памяти и WiFi связью на борту. Официальная документация:

  • https://github.com/esp8266/Arduino/blob/master/doc/reference.rst
  • https://arduino-esp8266.readthedocs.io/en/latest/

Купить на Aliexpress

Дёшево купить Wemos Mini можно тут: ссылка, ссылка, ссылка. Рекомендуется брать версию как слева на картинке выше, на базе полного чипа ESP-12.

Уроки по работе с esp8266

Конкретные уроки по работе с платой и WiFi библиотеками публикуются на сайте набора GyverKIT, так как уроки на этом сайте являются общими по программированию Arduino, без углубления в сторонние библиотеки.

Характеристики

  • Напряжение питания: 3.3V (2.5-3.6V)
  • Ток потребления: 300 мА при запуске и передаче данных, 35 мА во время работы, 80 мА в режиме точки доступа
  • Максимальный ток пина – 12 мА.
  • Flash память (память программы): 1 МБ
  • Flash память (файловое хранилище): 1-16 МБ в зависимости от модификации
  • EEPROM память: до 4 кБ
  • SRAM память: 82 кБ
  • Частота ядра: 80/160 МГц
  • GPIO: 11 пинов
  • ШИМ: 10 пинов
  • Прерывания: 10 пинов
  • АЦП: 1 пин
  • I2C: 1 штука (программный, пины можно назначить любые)
  • I2S: 1 штука
  • SPI: 1 штука
  • UART: 1.5 штуки
  • WiFi связь

Начало работы

Для работы с платами на основе esp8266 нужно установить ядро и драйвер.

  • Идём в Файл/Настройки/Дополнительные ссылки для менеджера плат. Вставляем ссылку https://arduino.esp8266.com/stable/package_esp8266com_index.json.
  • Инструменты/Плата/Менеджер плат…, ищем в поиске esp8266 и устанавливаем. В списке плат появится семейство плат на базе esp8266.
  • На большинстве плат стоит USB конвертер CH340, как на всех китайских Ардуинах. Если вы ещё не устанавливали драйвер – читать здесь.

Настройки платы

Для работы с любой платой (даже самодельной) можно выбрать пункт Generic esp8266, будет доступен полный набор настроек. Для работы с Wemos Mini выбираем LOLIN Wemos D1 R2 mini. Настроек станет меньше, а к пинам платы можно будет обращаться в программе по их подписям на плате (Dn). Основные настройки:

  • Upload speed: скорость загрузки прошивки. Можно смело поднимать до 921600.
  • CPU Frequency: частота тактирования процессора. Для большинства задач хватит стандартных 80 МГц. На 160 МГц будет работать шустрее, но могут быть сбои.
  • Flash Size: распределение памяти, настройка имеет вид xMB (FS:xMB OTA:~xKB). Размер памяти под программу не меняется – это всегда 1 МБ.
    • Первое число: полный объём микросхемы памяти (в основном 4MB, на Wemos и NodeMCU стоят такие).
    • Второе число: объём под файловое хранилище.
    • Третье число: объём под OTA (обновление по воздуху) – всегда меньше 1 МБ.
    • Что выбрать? У Wemos самый ходовой – первый вариант: 4MB (FS:2MB OTA:~1019KB).
    • DOUT: медленный, но совместим со всеми модификациями esp8266.
    • QIO: более быстрый, но будет работать не на всех чипах.
    • Only Sketch: стереть только программу.
    • Sketch + WiFi Settings: стереть программу и настройки WiFi (логин-пароль последнего подключения и т.д.).
    • All Flash Contents: полностью очистить память.

    Нумерация пинов

    У самого чипа esp8266 все выводы пронумерованы цифрами. На распиновке они подписаны как GPIOn, где n – номер. На плате (NodeMCU, Wemos Mini) пины подписаны как Dn и эти номера не совпадают с номерами GPIO! При работе например с Wemos можно использовать как нумерацию выводов GPIO ( digitalWrite(5, LOW) ), так и D-нумерацию пинов на плате ( digitalWrite(D1, LOW) ) – если выбрана плата Wemos. Новички очень часто в этом путаются, будьте внимательны. Также GPIO1 и GPIO3 подписаны на плате как TX и RX, по этим названиям к ним тоже можно обращаться ( digitalWrite(TX, LOW) ).

    Особенности пинов

    У esp8266 много системных пинов, с которыми нужно быть очень внимательным.

    • К целому ряду пинов подключена внешняя Flash память, в общем случае их использовать нельзя (если очень нужно – ищите информацию). На плате NodeMCU визуально гораздо больше пинов, чем на Wemos Mini, но по факту “безопасных” для использования пинов там ровно столько же.
    • С оставшимися пинами тоже не всё гладко: некоторые из них требуют наличия определенного логического уровня на момент включения микроконтроллера (подача питания, перезагрузка). Если к этим пинам подключить что-то, дающее противоположный сигнал – esp не запустится. Вот распиновка с нужным уровнем сигнала при запуске:
    • На плате (NodeMCU, Wemos и других) эти пины уже подтянуты резисторами к нужному напряжению, поэтому нужно несколько раз подумать, что вы к ним подключаете и как оно повлияет на напряжение на пине. Например, можно подключить энкодер, он прижмёт системный пин к GND и esp не запустится.
    • На GPIO16/D0 нельзя подключать прерывания ( attachInterrupt() ) и включать ШИМ сигнал ( analogWrite() ).
    • Максимальный ток с GPIO – 12 мА.
    • Светодиод LED_BUILTIN находится на пине GPIO2 и его поведение инвертировано: при подаче LOW он включается и наоборот.
    • При старте контроллера почти все пины делают скачок до высокого уровня, подробнее – в этой статье. Единственными “спокойными” пинами являются D1 (GPIO5) и D2 (GPIO4). Если контроллер управляет напрямую какими-то железками (реле, транзистор, или является “кнопкой” для другого устройства), то лучше использовать именно эти пины!
      • На этих же пинах сидит I2C, но шину можно переназначить на любые другие пины через Wire.begin(sda, scl) .

    Особенности работы WiFi

    WiFi реализован синхронно, его обработчик должен постоянно вызываться во время работы программы не реже, чем каждые 20 мс (если WiFi используется в программе). Обработка WiFi происходит в следующих местах:

    • Автоматически в конце каждой итерации loop()
    • Внутри любого delay()
    • Внутри функции yield()

    Если у вас есть участки программы, которые долго выполняются, то нужно разместить вызовы yield() до и после тяжёлых блоков кода. Также в чужих скетчах можно встретить delay(0) , по сути это и есть yield() .

    По тем же причинам не рекомендуется использовать задержку delayMicroseconds() более чем на 20’000 мкс.

    Отличия от AVR Arduino

    Деление на 0

    В отличие от AVR, деление на 0 приводит к критической ошибке и перезагрузке микроконтроллера. Стараемся этого избегать.

    min() и max()

    В ядре esp8266 функции min() и max() реализованы как функции, а не как макросы, поэтому должны использоваться с данными одного типа. Использование переменных разного типа приведёт к ошибке компиляции.

    map()

    В функции map(val, min, max, to min, to max) нет защиты от деления на 0, поэтому если min равен max – микроконтроллер зависнет и перезагрузится. Если min и max задаются какими-то внешними условиями – проверяйте их равенство вручную и исключайте вызов map() с такими аргументами.

    Типы данных

    • Тип int является синонимом long ( int32_t ) и занимает 4 байта. В AVR int это int16_t , то есть 2 байта.
    • Тип char является синонимом byte – принимает значения 0.. 255 в отличие от -128.. 127 в AVR.
    • Тип double имеет полную двойную точность – 8 байт. В AVR это 4 байта.
    • Указатель занимает 4 байта, так как область памяти тут 32-битная. В AVR – 2 байта.

    Функция analogRead()

    ESP8266 имеет крайне убогий одноканальный АЦП.

    • Сам АЦП в esp8266 может измерять напряжение в диапазоне 0.. 1.0V. На платах (NodeMCU, Wemos Mini) стоит делитель напряжения, который расширяет диапазон до более удобных 3.3V.
    • Разрешение – 10 бит, т. е. значения 0.. 1023 как на Arduino
    • Частый вызов analogRead() замедляет работу WiFi. При вызовах чаще нескольких миллисекунд WiFi полностью перестаёт работать.
    • Результат analogRead() имеет кеширование до 5 мс, то есть полученные данные могут запаздывать на это время.
    • АЦП может использоваться для измерения напряжения питания МК: для этого нужно вызвать ADC_MODE(ADC_VCC); до void setup() , а само напряжение питания можно получить из ESP.getVcc() .

    Функция analogWrite()

    • Работает на всех пинах, кроме GPIO16.
    • Разрядность ШИМ по умолчанию 8 бит (0.. 255) на версиях ядра 3.x. На ранних версиях – 10 бит (0.. 1023). Скажем спасибо индусам за совместимость.
      • Разрядность можно настроить в analogWriteResolution(4. 16 бит) .
      • Частоту можно настроить в analogWriteFreq(100.. 40000 Гц) .

      Аппаратные прерывания

      • Настраиваются точно так же, через attachInterrupt() .
      • Работают на всех пинах, кроме GPIO16.
      • Функция-обработчик должна быть объявлена с атрибутом IRAM_ATTR :

      void setup() < attachInterrupt(1, myIsr, RISING); >IRAM_ATTR void myIsr()
      Либо с ICACHE_RAM_ATTR (на старых версиях ядра), вот так:
      void ICACHE_RAM_ATTR myIsr() < >void setup()

      Функция yield()

      В реализации esp8266 функция yield() выполняет другую задачу и использовать её как на AVR не получится. Скажем спасибо индусам за совместимость

      EEPROM

      EEPROM в esp8266 является эмуляцией из Flash памяти, поэтому мы можем выбрать нужный размер.

      • Перед началом работы нужно вызвать EEPROM.begin(4.. 4096) с указанием размера области памяти в байтах.
      • Для применения изменений в памяти нужно вызвать EEPROM.commit() .
      • В некоторых версиях SDK отсутствует EEPROM.update() и EEPROM.length() .
      • У Flash памяти небольшой ресурс – всего около 10’000 перезаписей. У фирменной памяти Winbond (можно найти на некоторых моделях ESP-12 и прочих) – около 50’000 перезаписей.

      В остальном работа с библиотекой EEPROM.h ничем не отличается.

      Важно: EEPROM реализован следующим образом: после запуска EEPROM.begin(4.. 4096) содержимое EEPROM указанного размера дублируется в оперативной памяти. После любого изменения и вызова EEPROM.commit() стирается весь блок Flash памяти (4 кБ) и записывается заново. Таким образом ресурс “EEPROM” памяти у ESP вырабатывается довольно быстро и весь сразу, а не по ячейкам.

      Serial (UART)

      • В отличие от реализации для AVR, можно изменить размер буфера на приём: Serial.setRxBufferSize(размер) в байтах. Вызывать перед Serial.begin() , по умолчанию 256 байт.
      • Можно настроить работу только на приём или только на отправку для освобождения пина: Serial.begin(скорость, SERIAL_8N1, режим) , где режим:
        • SERIAL_TX_ONLY – только отправка
        • SERIAL_RX_ONLY – только приём
        • SERIAL_FULL – приём и отправка (по умолчанию)

        Полезные страницы

        • Набор GyverKIT – большой стартовый набор Arduino моей разработки, продаётся в России
        • Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress у проверенных продавцов
        • Подборка библиотек для Arduino, самых интересных и полезных, официальных и не очень
        • Полная документация по языку Ардуино, все встроенные функции и макросы, все доступные типы данных
        • Сборник полезных алгоритмов для написания скетчей: структура кода, таймеры, фильтры, парсинг данных
        • Видео уроки по программированию Arduino с канала “Заметки Ардуинщика” – одни из самых подробных в рунете
        • Поддержать автора за работу над уроками
        • Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *