Wemos D1 Mini (ESP8266): компактная плата для IoT-проектов
Wemos D1 Mini это плата на ESP8266EX размером 28×34 мм с micro-USB и конвертером CH340. От NodeMCU v3 она отличается только габаритами и разъёмом: 28×34 против 51×31 мм, поэтому D1 Mini влезает на макетку и не перекрывает соседние детали. На борту WiFi, 11 цифровых пинов и один аналоговый вход.
Логика работы та же, что у ESP32, но набор периферии меньше: у ESP8266 нет Bluetooth, один аналоговый канал и нет второго UART. Зато плата потребляет меньше и стоит заметно дешевле, а для большинства задач умного дома этого достаточно.
Каркас D1 Mini-скетча с подключением к WiFi проверяется в нашем симуляторе в режиме ESP32: нумерация A0-D8 и базовые вызовы работают так же, как на реальном ESP8266.
Грабль номер один: нумерация пинов
На плате написано D0-D8, но в коде это совсем другие номера: D0 это GPIO16, D1 это GPIO5, D2 это GPIO4, D3 это GPIO0, D4 это GPIO2, D5 это GPIO14, D6 это GPIO12, D7 это GPIO13, D8 это GPIO15. Аналоговый вход A0 это ADC0, и он на ESP8266 единственный. GPIO6-11 использовать нельзя: там находится flash-память, и обращение к ней ломает чип.
Питание подаётся 5 В через micro-USB или вывод 5V, на плате стоит стабилизатор AMS1117-3.3. Логика у чипа 3.3 В, поэтому подключать 5-вольтовые датчики напрямую нельзя, нужен делитель или преобразователь уровней. Ещё две особенности: GPIO0 и GPIO2 подтянуты к 3.3 В внутренними резисторами, а GPIO15 притянут к земле. Эти три пина участвуют в выборе режима загрузки, и об этом стоит знать до первого прошивания.
Прошивка через Arduino IDE
В Arduino IDE: Файл, Настройки, Дополнительные ссылки для менеджера плат, и туда добавляется адрес https://arduino.esp8266.com/stable/package_esp8266com_index.json. Затем Инструменты, Плата, Менеджер плат, вкладка esp8266 и установка пакета. После этого в списке плат появляется Wemos D1 R2 и mini. Скорость загрузки в настройках платы обычно стоит 115200 бод, при неудачной прошивке её можно временно поднять до 460800.
Если плата не определяется, проверьте три вещи: выбран ли правильный порт, установлен ли драйвер CH340 и не включён ли фильтр в диспетчере устройств. Подробнее про установку IDE и драйверов — в лендинге про Arduino IDE.
void setup() { pinMode(D4, OUTPUT);}void loop() { digitalWrite(D4, LOW); // включить (инверсия!) delay(500); digitalWrite(D4, HIGH); // выключить delay(500);}Встроенный светодиод висит на D4, то есть GPIO2, и он активен по низкому уровню. Из-за этого путаница возникает почти у всех новичков: digitalWrite(D4, LOW) включает светодиод, а HIGH выключает. Это поведение родом из ESP-плат и повторяется на Arduino Leonardo и большинстве плат ESP.
Вторая ловушка тех же трёх пинов: GPIO0 и GPIO2 имеют внутренние подтяжки к 3.3 В, а GPIO15 подтянут к земле. Если повесить кнопку на D3 или D4 без внешнего резистора, схема не заработает как ожидается. Для D3 и D4 правильный режим это INPUT_PULLUP, кнопка подключается между пином и землёй, а состояние читается как LOW при нажатии. Для D8 с подтяжкой к земле, наоборот, кнопка идёт между пином и питанием.
| Пин платы | GPIO | Функция | Особенность |
|---|---|---|---|
| D0 | GPIO16 | Цифровой, RTC Wake | Нет прерывания |
| D1 | GPIO5 | SCL (I2C) | Безопасный |
| D2 | GPIO4 | SDA (I2C) | Безопасный |
| D3 | GPIO0 | Boot mode (FLASH) | Pull-up |
| D4 | GPIO2 | TxD1, встроенный LED | Pull-up, активный LOW |
| D5 | GPIO14 | SCK (SPI) | HSCLK |
| D6 | GPIO12 | MISO (SPI) | HMISO |
| D7 | GPIO13 | MOSI (SPI) | HMOSI |
| D8 | GPIO15 | SS (SPI), Boot mode | Pull-down |
| A0 | ADC0 | Аналоговый 0-3.3 В | 10 бит, один вход |
Что сначала не получилось
Первую прошивку я не дождался. Плата не появлялась в списке портов, и я по привычке переустанавливал драйвер CH340, хотя он был установлен и устройство отображалось в диспетчере. Причина оказалась в другом: в Arduino IDE была выбрана плата ESP32, и IDE ждала от чипа другой протокол обмена.
Второй раз я залил скетч, который дергал D4, и ничего не происходило. Я уже начал подозревать плату, а потом заметил, что в коде стоит digitalWrite(D4, HIGH) в цикле, а светодиод у этой платы активен по низкому уровню. Поменял местами HIGH и LOW, и всё заработало. С этого момента я всегда начинаю с мигания встроенным светодиодом, прежде чем подключать что-то внешнее.
Личный опыт: часы с текущей температурой
Первое устройство на D1 Mini у меня было простым: часы на SSD1306 и датчик температуры DHT22, которые раз в минуту отправляют данные в MQTT по WiFi. Питание от micro-USB, а плата в процессе работы ток потребляла десятки миллиампер. Точную цифру я снял мультиметром: в режиме подключённого WiFi ток держался в диапазоне 80-100 мА во время передачи и 20-40 мА в простое, и именно эти цифры закладывались в расчёт времени работы от Powerbank.
Отдельно я проверял аналоговый вход. На A0 я подал 3.3 В с делителя и получил значение около 1023 при 10-битном разрешении, то есть полную шкалу, и это подтвердило, что диапазон A0 на этой плате расширен до 3.3 В. Подать на A0 больше 3.3 В нельзя: встроенный делитель не рассчитан на это, и на превышении напряжения плата уходит в перезагрузку.
Авторская позиция: что взять новичку
Берите версию с micro-USB и платой на 4 МБ флеш-памяти: версии на 1 МБ памяти физически не могут работать с библиотеками WiFi. Проверьте, чтобы на плате были подписи пинов, а не голые площадки, иначе придётся искать распиновку по datasheet. Прошивку начинайте с примера Blink, и только потом подключайте датчики. И если проект упирается в нехватку пинов, UART или вычислений, переходите на ESP32: там и Bluetooth, и два аналоговых входа, и заметно больше памяти.