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

NodeMCU DevKit V1.0 на ESP8266: распиновка и устройство

Плата NodeMCU DevKit V1.0 по её открытой схеме и Gerber-файлам: какой GPIO ESP8266 стоит за каждой подписью D0–D10, какие выводы мешают загрузке или заняты флеш-памятью, как устроены вход A0, питание и автоматическая загрузка прошивки.

Обновлено Редакция GAW

NodeMCU DevKit V1.0 — открытая отладочная плата на модуле ESP-12E с микроконтроллером ESP8266EX: Wi-Fi, 4 МБ флеш-памяти в модуле, мост USB-UART и стабилизатор 3,3 В. Её схема, перечень элементов и файлы для производства опубликованы командой NodeMCU под лицензией MIT, поэтому плату выпускают многие производители. Страница описывает оригинальную разводку V1.0; у клонов бывают другие мост USB-UART и стабилизатор и другая ширина платы, но назначение контактов обычно то же.

ПараметрЗначение
МикроконтроллерESP8266EX: 32-битное ядро Tensilica L106 до 160 МГц
Памятьоколо 50 КБ ОЗУ для программы в режиме станции; флеш 4 МБ в модуле ESP-12E
РадиоWi-Fi 802.11 b/g/n, 2,4 ГГц
Контакты2 × 15 с шагом 2,54 мм: 11 GPIO (D0–D8, RX, TX), 6 выводов флеш-памяти, A0
АЦП10 бит, один вход: 0–3,2 В на A0 через делитель платы
USBmicro-USB, мост USB-UART CP2102
Питание5 В от USB или VIN, стабилизатор NCP1117 на 3,3 В
КнопкиRST (сброс) и FLASH (GPIO0)
Размер25,4 × 48,26 мм, четыре крепёжных отверстия 2,92 мм

Распиновка

Плата нарисована сверху, антенной модуля вверх, разъёмом USB вниз; размеры и места контактов взяты из Gerber-файлов платы. Слева — разъём J1 (A0 у антенны), справа — J2 (D0 у антенны). Подпись на плате — это номер в Arduino (D0–D8) или название сигнала, а рядом с ней указан GPIO ESP8266 и его аппаратные функции: выводы HSPI и UART.

антеннаESP-12ENCP1117CP2102RSTFLASHmicro-USBJ1-1: A0 — АЦП, 0–3,2 В1A0АЦП, 0–3,2 ВJ1-2: RSV — АЦП без делителя, 0–1 В2RSVАЦП без делителя, 0–1 ВJ1-3: RSV — не подключён3RSVне подключёнJ1-4: SD3 — GPIO10 — GPIO104SD3GPIO10J1-5: SD2 — GPIO9 — GPIO95SD2GPIO9J1-6: SD1 — GPIO8 — GPIO86SD1GPIO8J1-7: CMD — GPIO11 — GPIO117CMDGPIO11J1-8: SD0 — GPIO7 — GPIO78SD0GPIO7J1-9: CLK — GPIO6 — GPIO69CLKGPIO6J1-10: GND10GNDJ1-11: 3V3 — 3,3 В113V33,3 ВJ1-12: EN — включение модуля12ENвключение модуляJ1-13: RST — сброс низким уровнем13RSTсброс низким уровнемJ1-14: GND14GNDJ1-15: VIN — вход 5 В15VINвход 5 ВJ2-1: D0 — GPIO16 — GPIO16, WAKE1D0GPIO16WAKEJ2-2: D1 — GPIO5 — GPIO52D1GPIO5J2-3: D2 — GPIO4 — GPIO43D2GPIO4J2-4: D3 — GPIO0 — GPIO04D3GPIO0J2-5: D4 — GPIO2 — GPIO2, U1TXD5D4GPIO2U1TXDJ2-6: 3V3 — 3,3 В63V33,3 ВJ2-7: GND7GNDJ2-8: D5 — GPIO14 — GPIO14, HSPICLK8D5GPIO14HSPICLKJ2-9: D6 — GPIO12 — GPIO12, HSPIQ9D6GPIO12HSPIQJ2-10: D7 — GPIO13 — GPIO13, HSPID, U0CTS10D7GPIO13HSPIDU0CTSJ2-11: D8 — GPIO15 — GPIO15, HSPICS, U0RTS11D8GPIO15HSPICSU0RTSJ2-12: RX — GPIO3 — GPIO3, U0RXD12RXGPIO3U0RXDJ2-13: TX — GPIO1 — GPIO1, U0TXD13TXGPIO1U0TXDJ2-14: GND14GNDJ2-15: 3V3 — 3,3 В153V33,3 В
NodeMCU DevKit V1.0, вид сверху: контакты, их номера и функции GPIO. Плата 25,4 × 48,26 мм, шаг контактов 2,54 мм.
  • ввод-вывод
  • питание и земля
  • управление: EN, RST
  • заняты на плате
  • выбранная функция

Контакты и функции

У ESP8266 аппаратных интерфейсов немного: SPI и HSPI, два UART (у UART1 только передатчик), I²S. Шина I²C и ШИМ сделаны программно: даташит указывает для I²C частоту до 100 кГц, а библиотеки Arduino позволяют назначить SDA, SCL и ШИМ на любой GPIO, кроме GPIO16. По умолчанию библиотека Wire использует GPIO4 (D2) как SDA и GPIO5 (D1) как SCL; подтягивающие резисторы шины на плате не установлены — их номинал считает калькулятор подтяжки I²C.

КонтактПодписьGPIOМультиплексорЕщё
J1-1A0—АЦП, 0–3,2 В
J1-2RSV—АЦП без делителя, 0–1 В
J1-3RSV—не подключён
J1-4SD310SDDATA3, SPIWP, HSPIWPзанят флеш-памятью модуля
J1-5SD29SDDATA2, SPIHD, HSPIHDзанят флеш-памятью модуля
J1-6SD18SDDATA1, SPID, U1RXDзанят флеш-памятью модуля
J1-7CMD11SDCMD, SPICS0, U1RTSзанят флеш-памятью модуля
J1-8SD07SDDATA0, SPIQ, U1TXDзанят флеш-памятью модуля
J1-9CLK6SDCLK, SPICLK, U1CTSзанят флеш-памятью модуля
J1-10GND—общий провод
J1-113V3—3,3 В
J1-12EN—включение модуля
J1-13RST—сброс низким уровнем
J1-14GND—общий провод
J1-15VIN—вход 5 В
J2-1D016—в домене RTC: подтяжка только вниз; для выхода из глубокого сна соединяют с RST; в Arduino для ESP8266 по умолчанию LED_BUILTIN_AUX
J2-2D15CLK_RTCв Arduino для ESP8266 по умолчанию SCL (Wire)
J2-3D24CLK_XTALв Arduino для ESP8266 по умолчанию SDA (Wire)
J2-4D30SPICS2, CLK_OUTвывод обвязки загрузки: 1 — запуск программы, 0 — загрузка прошивки по UART
J2-5D42I2SO_WS, U1TXD_BK, U0TXD_BKвывод обвязки загрузки: при загрузке должен быть 1; в Arduino для ESP8266 по умолчанию LED_BUILTIN
J2-63V3—3,3 В
J2-7GND—общий провод
J2-8D514MTMS, I2SI_WS, HSPICLK, U0DSRв Arduino для ESP8266 по умолчанию SCK (SPI)
J2-9D612MTDI, I2SI_DATA, HSPIQ, U0DTRв Arduino для ESP8266 по умолчанию MISO (SPI)
J2-10D713MTCK, I2SI_BCK, HSPID, U0CTSв Arduino для ESP8266 по умолчанию MOSI (SPI)
J2-11D815MTDO, I2SO_BCK, HSPICS, U0RTSвывод обвязки загрузки: при загрузке должен быть 0; в Arduino для ESP8266 по умолчанию SS (SPI)
J2-12RX3U0RXD, I2SO_DATA, CLK_XTAL_BKв Arduino для ESP8266 по умолчанию Serial RX, D9
J2-13TX1U0TXD, SPICS1, CLK_RTC_BKв Arduino для ESP8266 по умолчанию Serial TX, D10
J2-14GND—общий провод
J2-153V3—3,3 В

Номера D0–D10 существуют только в ядре Arduino для ESP8266: digitalWrite(D1, HIGH) и digitalWrite(5, HIGH) — одно и то же. Светодиод LED_BUILTIN в этом ядре — GPIO2 (D4), а синий светодиод самой платы NodeMCU подключён к GPIO16 (D0) через резистор 470 Ом от 3,3 В и горит при низком уровне — в ядре это LED_BUILTIN_AUX.

Выводы, с которыми осторожно

Обвязка загрузки: D3, D4, D8. Схема NodeMCU прямо предупреждает: при каждом включении, сбросе и пробуждении GPIO15 (D8) должен быть в низком уровне, GPIO2 (D4) — в высоком; GPIO0 (D3) в высоком уровне запускает программу, в низком — загрузку прошивки. На плате GPIO0 и GPIO2 подтянуты к 3,3 В, а GPIO15 — к земле резисторами 12 кОм. Кнопка или датчик, которые перетягивают эти выводы при включении, не дадут плате запуститься.

Флеш-память: SD0–SD3, CMD, CLK (GPIO6–11). По этим линиям модуль читает программу из флеш-памяти; занимать их нельзя. Выводы SD2 и SD3 (GPIO9, GPIO10) на схеме обозначены и как GPIO, но по табл. 2-1 даташита эти выводы ESP8266 соединяются с линиями SD_D2 и SD_D3 флеш-памяти, поэтому использовать их как обычные входы и выходы рискованно.

D0 (GPIO16) находится в домене RTC: внутренняя подтяжка у него только к земле, а для выхода из глубокого сна его соединяют с RST — тогда по таймеру GPIO16 выдаёт низкий уровень и сбрасывает ESP8266. На плате для этого предусмотрен перемычечный резистор R10 0 Ом, который по умолчанию не установлен. Карта выводов NodeMCU предупреждает, что D0 годится только для чтения и записи уровня — без прерываний, ШИМ и I²C.

TX и RX (GPIO1, GPIO3) подключены к мосту USB-UART: через них идёт загрузка прошивки и обмен с компьютером. При включении загрузчик ESP8266 выводит в UART0 служебные сообщения; их скорость зависит от кварца модуля — 115 200 бит/с при 40 МГц и 74 880 бит/с при 26 МГц. Если это мешает подключённому устройству, UART0 можно перевести на GPIO15 (TX) и GPIO13 (RX) — в ядре Arduino это Serial.swap().

Питание

Питание собрано на схеме листа POWER:

  • USB даёт 5 В, которые через диод Шоттки (1N5819, SS14 или S4) попадают в цепь 5 В платы — это контакт VIN;
  • VIN можно использовать и как вход внешнего питания 5 В: диод не пускает его обратно в USB;
  • из цепи 5 В стабилизатор NCP1117ST33T3G делает 3,3 В для модуля, они выведены на три контакта 3V3.

Примечание на схеме даёт параметры стабилизатора: рабочий выходной ток 800 мА, ограничение тока 1000 мА, максимальное входное напряжение 20 В и падение напряжения 1,2 В при 800 мА. Значит, для полного тока на VIN нужно не меньше 4,5 В, а при высоком входном напряжении мощность P = (Uвх − 3,3) · I превращается в тепло — как её оценить, разобрано в статье о линейных стабилизаторах. Подавать питание сразу на 3V3 можно только стабилизированными 3,3 В: допустимое напряжение питания ESP8266EX — от 2,5 до 3,6 В.

Вход A0 и АЦП

АЦП ESP8266 — 10-битный, вход один (TOUT), и сам по себе он измеряет 0–1,0 В. На NodeMCU контакт A0 подключён к нему через делитель: 220 кОм от A0 к входу АЦП и 100 кОм от входа на землю. Отсюда шкала A0:

UA0=N1023⋅1,0⋅220+100100≈N⋅3,13 мВ,Umax⁡=3,2 В,U_{A0} = \frac{N}{1023} \cdot 1{,}0 \cdot \frac{220 + 100}{100} \approx N \cdot 3{,}13\ \text{мВ},\quad U_{\max} = 3{,}2\ \text{В},

где N — показание analogRead(A0) (0–1023). Сопротивление делителя — 320 кОм, поэтому источник с большим собственным сопротивлением будет давать заниженные показания. Чтобы мерить напряжения выше 3,2 В, перед A0 ставят ещё один делитель — его рассчитает калькулятор делителя напряжения. По схеме контакт J1-2 (подписан RSV) соединён с входом АЦП напрямую, без делителя; на карте выводов NodeMCU он отмечен как зарезервированный.

Ограничения входов и выходов

По табл. 5-1 даташита ESP8266EX при питании выводов VIO = 3,3 В:

ПараметрЗначение
Входное напряжение низкого уровняот −0,3 В до 0,25 · VIO (0,83 В)
Входное напряжение высокого уровняот 0,75 · VIO (2,48 В) до 3,6 В
Выходное напряжение низкого уровняне больше 0,1 · VIO (0,33 В)
Выходное напряжение высокого уровняне меньше 0,8 · VIO (2,64 В)
Максимальный ток вывода12 мА

Внутренние подтягивающие резисторы у выводов ESP8266 есть только к питанию (у GPIO16 — только к земле). Нагрузку больше 12 мА — реле, двигатели, ленты светодиодов — подключают через транзисторный ключ, а 5-вольтовую логику — через преобразователь уровней.

Загрузка прошивки

Прошивка загружается по USB через мост CP2102 и UART0. Схема автозагрузки на двух транзисторах S8050 управляет выводами RST и GPIO0 от линий DTR и RTS моста, поэтому esptool, Arduino IDE и другие программы сами переводят ESP8266 в режим загрузки:

DTRRTSRSTGPIO0
1111
0011
1001
0110

Вручную режим загрузки включают кнопками: зажать FLASH (GPIO0 через резистор 470 Ом на землю), нажать и отпустить RST, отпустить FLASH. Вход RST подтянут к 3,3 В резистором 12 кОм и зашунтирован конденсатором 100 нФ, вход EN подтянут резистором 12 кОм.

Минимальный объём флеш-памяти, нужный ESP8266, по даташиту — 512 КБ без обновления по воздуху и 1 МБ с ним; 4 МБ модуля ESP-12E хватает с запасом, а часть памяти можно отдать под файловую систему. Программы пишут в Arduino IDE с ядром ESP8266, в ESP8266_RTOS_SDK или на MicroPython; сравнение сред — в разделе программ.

Частые вопросы

Какой GPIO соответствует D1, D2 и другим выводам NodeMCU?

D0 — GPIO16, D1 — GPIO5, D2 — GPIO4, D3 — GPIO0, D4 — GPIO2, D5 — GPIO14, D6 — GPIO12, D7 — GPIO13, D8 — GPIO15, RX (D9) — GPIO3, TX (D10) — GPIO1. В Arduino можно писать и D1, и 5 — это один и тот же вывод; в прошивках на ESP-IDF и MicroPython используются номера GPIO.

Какое напряжение можно подать на A0 у NodeMCU?

До 3,2 В. Сам вход АЦП ESP8266 рассчитан на 0–1,0 В, но на NodeMCU перед ним стоит делитель из резисторов 220 и 100 кОм, поэтому полной шкале соответствует 1,0 · 320 / 100 = 3,2 В. Более высокие напряжения ослабляют внешним делителем.

Почему NodeMCU не загружается, если подключить что-то к D3, D4 или D8?

Это выводы обвязки загрузки ESP8266. При каждом включении, сбросе и пробуждении GPIO15 (D8) должен быть в низком уровне, GPIO2 (D4) — в высоком, а GPIO0 (D3) в высоком уровне запускает программу, в низком — режим загрузки прошивки. На плате они подтянуты резисторами 12 кОм; внешняя схема, которая перетягивает их в другой уровень при включении, мешает загрузке.

Можно ли питать NodeMCU от 5 В через VIN?

Да. VIN — это цепь 5 В платы после диода Шоттки от USB, из неё стабилизатор NCP1117 делает 3,3 В. Диод не даёт напряжению с VIN уйти в USB компьютера. Чтобы стабилизатор отдавал 800 мА, на входе нужно минимум 3,3 + 1,2 = 4,5 В; предельное входное напряжение по примечанию на схеме — 20 В, но чем оно выше, тем сильнее греется линейный стабилизатор.

Можно ли подавать 5 В на выводы ESP8266?

По таблице 5-1 даташита входное напряжение высокого уровня ограничено 3,6 В, поэтому 5-вольтовые сигналы подключают через делитель или преобразователь уровней. Выход GPIO даёт ток до 12 мА.

Источники

  1. NodeMCU Team. NodeMCU DevKit V1.0 (nodemcu/nodemcu-devkit-v1.0, коммит 7cb0a33) — схема NODEMCU_DEVKIT_V1.0.PDF (листы ESP-12 CORE, USB TO UART, POWER, IO CONN, KEY, ADC), перечень элементов, карта выводов, Gerber- и Excellon-файлы; лицензия MIT
  2. Espressif. ESP8266EX Datasheet v7.1 — табл. 2-1 — выводы и обвязка загрузки; разд. 4 — GPIO, SPI, HSPI, I²C, I²S, UART, ШИМ, АЦП; табл. 5-1 — уровни и ток выводов
  3. Espressif. ESP8266_RTOS_SDK v3.4: esp8266/pin_mux_register.h — функции мультиплексора каждого вывода, по которым сверены таблицы даташита
  4. ESP8266 Arduino Core 3.1.2: variants/nodemcu/pins_arduino.h, variants/generic/common.h — номера D0–D10, выводы Wire и SPI по умолчанию, LED_BUILTIN; лицензия LGPL 2.1

Нашли ошибку?