ESP8266 NodeMCU V3 распиновка (pinout)
ESP8266 NodeMCU V3 (LoLin)
Распиновка (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 поддерживает программный ШИМ на выводах, обозначенных на рисунке изгибающейся линией.
Обзор USB адаптера для ESP-01 на CH340G
Автор: Сергей · Опубликовано 05.05.2017 · Обновлено 13.04.2020
USB адаптер специально разработан для модулей ESP-01 в котором содержится преобразователь уровней и регулятор напряжения на 3.3В, а так же удобное подключение. Через данный адаптер можно обмениваться данными с чипом ESP8266, а так прошивать его (необходима доработка паяльником).
Технические параметры
► Напряжение питания: 5 В
► Максимальный рабочий ток: 240 мА
► Интерфейс USB 2.0
► Габариты: 50 мм x 16 мм x 12 мм
► Поддержка операционных систем: Windows XP / 7 / 8 / 8.1 / 10.
Общие сведения
USB адаптер, переставляет собой небольшую плату, черного цвета с восьмиконтактным разъемом желтого цвета (шаг разъема 2.54 мм) в который вставляется модуль ESP01, на другой стороне адаптера располагается USB разъем типа А. Связь с компьютером и модулем осуществляет микросхема CH340, рядом с ней установлен кварцевый резонатор на 12 МГц. Так как модуль ESP8266 работает от 3.3В, на адаптере предусмотрен стабилизатор напряжения на 3.3В (LM6206N3, максимальный ток 250 мА).
Принципиальная схема адаптера USB ESP01, показана на рисунке.
Доработка USB адаптера для ESP-01
Для прошивки ESP01 (01S) необходимо доработать адаптер (то есть, нужно при включении замкнуть GND и GPIO0). Самый простой вариант, это установить переключатель или джампер, на фото показан пример доработки, при прошивке переводим джампер в положение прошивки (замыкаем GND и GPIO0)
Модуль ESP-01 (01S) устанавливается по направлению стрелки
Установка драйвера
Адаптер построен на популярном чипе CH340G, так как на большинстве операционных систем драйвера нет, необходимо установить его в ручную, для которого скачиваем архив и устанавливаем драйвер в зависимости от ОС 64 бита или 32 бита
Ссылки
Скачать драйвер для CH340 (Windows)
Купить на Aliexpress
Беспроводной Wi-Fi модуль ESP8266-01 (ESP-01)
Адаптер USB для ESP-01 (Wi-Fi, CH340G)
Купить в Самаре и области
Беспроводной Wi-Fi модуль ESP8266-01 (ESP-01)
Адаптер USB для ESP8266 (Wi-Fi, CH340G)
ESP8266. Начало работы, особенности
В этом уроке поговорим о микроконтроллере ESP8266 и платах на его основе. Как с ними работать и чем они отличаются от Arduino на базе МК AVR. ESP8266 – китайский микроконтроллер за 2 доллара с большим объемом памяти и WiFi связью на борту. Официальная документация:
Купить на 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
min() и max()
В ядре esp8266 функции min() и max() реализованы как функции, а не как макросы, поэтому должны использоваться с данными одного типа. Использование переменных разного типа приведёт к ошибке компиляции.
В функции map(val, min, max, to min, to max) нет защиты от деления на 0, поэтому если min равен max – микроконтроллер зависнет и перезагрузится. Если min и max задаются какими-то внешними условиями – проверяйте их равенство вручную и исключайте вызов map() с такими аргументами.
Типы данных
- Тип int является синонимом long ( int32_t ) и занимает 4 байта. В AVR int это int16_t , то есть 2 байта.
- Тип double имеет полную двойную точность – 8 байт. В AVR это 4 байта.
- Указатель занимает 4 байта, так как область памяти тут 32-битная. В AVR – 2 байта.
Функция analogRead()
ESP8266 имеет крайне убогий одноканальный АЦП.
- Сам АЦП в esp8266 может измерять напряжение в диапазоне 0.. 1.0V. На платах (NodeMCU, Wemos Mini) стоит делитель напряжения, который расширяет диапазон до более удобных 3.3V.
- Частый вызов 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 бит) .
- Частота ШИМ по умолчанию 1 кГц.
- Частоту можно настроить в analogWriteFreq(100.. 40000 Гц) .
- ШИМ реализован программно, поэтому на повышенной частоте и разрядности будет тормозить выполнение программы!
Аппаратные прерывания
- Настраиваются точно так же, через attachInterrupt() .
- Работают на всех пинах, кроме GPIO16.
- Функция-обработчик должна быть объявлена с атрибутом IRAM_ATTR :
Либо с ICACHE_RAM_ATTR (на старых версиях ядра), вот так:
Функция yield()
В реализации esp8266 функция yield() выполняет другую задачу и использовать её как на AVR не получится. Скажем спасибо индусам за совместимость
EEPROM
EEPROM в esp8266 является эмуляцией из Flash памяти, поэтому мы можем выбрать нужный размер.
- Перед началом работы нужно вызвать EEPROM.begin(4.. 4096) с указанием размера области памяти в байтах.
- Для применения изменений в памяти нужно вызвать EEPROM.commit() .
В остальном работа с библиотекой EEPROM.h ничем не отличается.