После того как я наигрался с Arduino, на глаза попался микроконтроллер китайского производителя Espressif Systems с интерфейсом Wi-Fi - ESP8266. Существует множество версий этого контроллера, а также реализаций плат с ним. Наиболее популярными можно назвать NodeMCU.
NodeMCU — это платформа на основе модуля ESP8266. Плата предназначена для управления различными схемами на расстоянии посредством передачи сигнала через Wi-Fi. На базе NodeMCU можно создать «умный дом», настроив управление светом или вентиляцией через телефон, регистрацию показаний датчиков и многое другое.
Есть несколько версий плат, отличие в используемом драйвере USB-Serial и габаритах:
Немного большая по размерам версия с чипом CH340G обычно дешевле, версия с чипом CP2102 компактнее, но обычно подороже. Также для этих плат можно приобрести специальные монтажные платы.
Для версии с чипом CH340G - HW-389:
Для версии CP2102 - 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:
Более удобным, для не программистов, методом создания прошивок является ESPHome, который отлично интегрируется в Home Assistant.
Распиновка NodeMCU ESP-12:
Назначение выводов 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.
Выводы, выделенные зеленым цветом, можно использовать. Те, которые выделены желтым, можно использовать, но они могут иметь неожиданное поведение, в основном при загрузке. Выводы, выделенные красным, не рекомендуется использовать в качестве входов или выходов.
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.
Список материалов:
- ESP8266. Начало работы, особенности
- ESP8266 pinout reference and how to use GPIO pins
- ESP8266 - PinOut
- ESP8266 Pinout Reference: Which GPIO pins should you use?
- ESP8266 NodeMCU V3 распиновка (pinout)