ESP8266

20-05-2022

После того как я наигрался с Arduino, на глаза попался микроконтроллер китайского производителя Espressif Systems с интерфейсом Wi-Fi - ESP8266. Существует множество версий этого контроллера, а также реализаций плат с ним. Наиболее популярными можно назвать NodeMCU.

NodeMCU — это платформа на основе модуля ESP8266. Плата предназначена для управления различными схемами на расстоянии посредством передачи сигнала через Wi-Fi. На базе NodeMCU можно создать «умный дом», настроив управление светом или вентиляцией через телефон, регистрацию показаний датчиков и многое другое.

Есть несколько версий плат, отличие в используемом драйвере USB-Serial и габаритах:

NodeMCU

Немного большая по размерам версия с чипом CH340G обычно дешевле, версия с чипом CP2102 компактнее, но обычно подороже. Также для этих плат можно приобрести специальные монтажные платы.

Для версии с чипом CH340G - HW-389:

HW389HW-389

Для версии CP2102 - HW-588A, с драйвером для маломощных моторчиков:

HW-588A

Приобреталось это в году так 2018 в известном магазинчике. И естественно была собрана очередная метеостанция, которая до сих пор установлена и работает на улице. Правда прошивку месяц назад пришлось заменить.

Работать с платой можно в Arduino IDE. Для этого следует установить ядро и драйвер.

  • Переходим в Файл->Настройки->Дополнительные ссылки для менеджера плат. Вставляем ссылку https://arduino.esp8266.com/stable/package_esp8266com_index.json.
  • Инструменты/Плата/Менеджер плат, ищем в поиске esp8266 и устанавливаем. В списке плат появится семейство плат на базе esp8266.

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

Соответствие номеров контактов ESP8266 для Arduino IDE:

Pins-Names

Более удобным, для не программистов, методом создания прошивок является ESPHome, который отлично интегрируется в Home Assistant.

Распиновка NodeMCU ESP-12:

NodeMCU

Назначение выводов NodeMCU:

GND - общий провод, "земля"

Vin - вывод для подключения внешнего источника питания 5V. Стабилизатор AMS1117-3.3 позволяет подавать питание на Vin в широком диапазоне от 5 до 10V. Хотя стабилизатор допускает подачу более высокого напряжения (до 15V), но без дополнительного охлаждения может возникать перегрев чипа.

3.3V - контакт, на который подается выходное напряжение внутрисхемного стабилизатора. Может быть использован для питания подключаемых к плате датчиков. Суммарная максимальная нагрузка всех выводов 3.3V не должна превышать 300мА.

VUSB - вывод, на который заведено напряжение 5V с USB-разъема.

GPIO (General Purpose Interput Output) - контакты ввода/вывода общего назначения. Могут быть сконфигурированы как входы или выходы и программно назначены на различные функции.

RST (Reset) - вывод используется для сброса микроконтроллера ESP8266.

EN (Chip Enable) - при подаче на контакт сигнала высокого уровня, микроконтроллер ESP8266 переходит в рабочий режим, при сигнале низкого уровня - в режим энергосбережения.

WAKE - контакт используется для пробуждения чипа ESP8266 из режима глубокого сна (deep-sleep mode).

ADC0 / TOUT - вывод встроенного 10-разрядного аналого-цифрового преобразователя (АЦП). Преобразованные значения лежат в интервале 0-1023. Платы разработки NodeMCU V2 и V3 поставляются с внутренним делителем напряжения, поэтому входной диапазон составляет от 0 до 3,3 В. Диапазон входного напряжения для АЦП в кристалле ESP8266: 0 - 1 В.

UART (Universal Asynchronous Receiver-Transmitter) - асинхронный последовательный интерфейс устанавливает связь с другими устройствами по шине UART. У контроллера ESP8266 два модуля UART. Максимальная скорость передачи данных, заявленная производителем, 4,5 Mbps.

SPI (Serial Peripheral Interface) - последовательный периферийный интерфейс. NodeMCU имеет два SPI (SPI и HSPI) в ведущем и подчиненном режимах.

SDIO - интерфейс безопасных цифровых входов/выходов, предназначен для коммутации с внешней флэш-памятью стандарта SD по последовательной шине.

FLASH

Кнопка Flash на NodeMCU подключает к земле GPIO0. Ее можно использовать как обычную кнопку. Если программно подтянуть вывод GPIO0 с помощью внутреннего подтягивающего резистора к высокому уровню, то появление низкого уровня на этом выводе будет означать, что кнопка нажата.

Интерфейс I2C - последовательная асимметричная шина. I2C используется для подключения датчиков и периферийных устройств. NodeMCU ESP8266 не имеет аппаратных выводов I2C, но интерфейс можно реализовать программно. Поддерживаются как I2C Master, так и I2C Slave.

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

Pins used

GPIO6 - GPIO11 подключаются к микросхеме флэш-памяти на платах ESP8266. Эти контакты не рекомендуется использовать.

В следующем списке показано состояние контактов при загрузке:

  • GPIO16 : ВЫСОКИЙ уровень при загрузке
  • GPIO0 : ошибка загрузки, если НИЗКИЙ уровень
  • GPIO2 : ВЫСОКИЙ уровень при загрузке, сбой загрузки, если НИЗКИЙ уровень
  • GPIO15 : ошибка загрузки, если ВЫСОКИЙ уровень
  • GPIO3 : ВЫСОКИЙ уровень при загрузке
  • GPIO1 : ВЫСОКИЙ уровень при загрузке, сбой загрузки, если НИЗКИЙ уровень
  • GPIO10 : ВЫСОКИЙ уровень при загрузке
  • GPIO9 : ВЫСОКИЙ уровень при загрузке

Есть определенные контакты, которые выдают сигнал 3,3 В при загрузке ESP8266. Это может быть проблематично, если к ним подключить реле или другие периферийные устройства. Следующие GPIO выдают сигнал HIGH при загрузке:

  • GPIO16
  • GPIO3
  • GPIO1
  • GPIO10
  • GPIO9

Другие GPIO, кроме GPIO5 и GPIO4, могут выдавать низковольтный сигнал при загрузке, что может быть проблематично, если они подключены к транзисторам или реле! GPIO4 и GPIO5 являются наиболее безопасными для использования GPIO, для управления реле!

ESP8266 поддерживает аналоговое чтение только в одном GPIO. Этот GPIO называется ADC0 и обычно обозначается как A0. Если использовать макетную плату NodeMCU, диапазон входного напряжения составляет от 0 до 3,3 В, поскольку эти платы содержат внутренний делитель напряжения.

Плата NodeMCU имеет встроенный светодиод. Этот светодиод подключается к GPIO2. Светодиод подключен к подтягивающему резистору, поэтому, если послать ВЫСОКИЙ сигнал, светодиод выключится.

Если на вывод RST подать НИЗКИЙ уровень, ESP8266 сбрасывается. Это то же самое, что и нажатие встроенной кнопки RESET.

Когда GPIO0 получает НИЗКИЙ уровень, он переводит ESP8266 в режим загрузчика. Это то же самое, что и нажатие встроенной кнопки FLASH/BOOT.

GPIO16 можно использовать для пробуждения ESP8266 от глубокого сна. Чтобы вывести ESP8266 из глубокого сна, GPIO16 должен быть подключен к контакту RST.

ESP8266 не имеет аппаратных контактов I2C, но может быть реализован программно. Таким образом, можно использовать любой GPIO в качестве I2C. Обычно в качестве контактов I2C используются следующие GPIO:

  • GPIO5: SCL
  • GPIO4: SDA

Выводы, используемые в качестве SPI в ESP8266:

  • GPIO12: MISO
  • GPIO13: MOSI
  • GPIO14: SCLK
  • GPIO15: CS

ESP8266 поддерживает программную ШИМ на всех контактах ввода-вывода: от GPIO0 до GPIO16 . Сигналы ШИМ на ESP8266 имеют 10-битное разрешение.

ESP8266 поддерживает прерывания в любом GPIO , кроме GPIO16.

Список материалов: