Датчик в ванной я решил делать на ESP8266: NodeMCU за 300 рублей и «на сдачу» ESP-01 казались идеальной парой. Вечер вышел насыщенный. Сначала в списке плат снова не было ничего похожего. Потом я наугад выбрал Generic ESP8266 Module, дождался честных «100 %» в заливке — и модуль промолчал: ни Serial, ни светодиода, ни признаков жизни. Вторая заливка — то же самое. Полночь я потратил на многократную перепрошивку заведомо исправной платы.
Оба тупика лечатся одной настройкой, но по разным причинам: плату нужно добавить пакетом — как ESP32 из прошлого урока, — а пункт в списке плат оказывается не украшением, а пучком обещаний про память и сброс. Пакет живёт в том же Менеджере плат, что и ядро Espressif, механика один в один, меняется только адрес. Разберём порядок целиком: правильные пункты для NodeMCU, Wemos D1 mini и голого ESP-01, прошивку через адаптер и отличия, которые у ESP8266 проявляются раньше всего — один аналоговый вход, логика 3,3 В и нумерация пинов.
Пакет ESP8266 Community: пять шагов
- «Файл → Настройки → Дополнительные ссылки для Менеджера плат»: вставьте http://arduino.esp8266.com/stable/package_esp8266com_index.json
- «Инструменты → Плата → Менеджер плат», поиск esp8266, пакет «esp8266 by ESP8266 Community» → «Установить»
- В списке плат выбрать пункт под свою железку: NodeMCU 1.0 (ESP-12E Module) или LOLIN(WEMOS) D1 R2 & mini
- Порт и скорость монитора 115200 бод — как у ESP32; на 9600 бут-лог превратится в кракозябры
- Загрузить Blink и сверить мигание — ритуал тот же, что в обычной заливке скетча
Пункт списка — это обещание, а не подпись
Каждый пункт списка несёт конкретные настройки: размер flash, метод сброса после заливки, частоту кварца. NodeMCU 1.0 (ESP-12E Module) обещает 4 МБ flash и сброс через обвязку платы; LOLIN(WEMOS) D1 R2 & mini — то же для самого популярного мини-формата; Generic ESP8266 Module — ручной профиль, где всё выставляется руками: Flash Size, Reset Method (nodemcu, ck, none, dtr), Crystal Frequency, Upload Speed. Моя ошибка была в выборе: я взял Generic для NodeMCU. Заливка честно дошла до ста процентов, но после записи плате некому было дёрнуть ресет — модуль так и остался в режиме прошивки. Поменял пункт на NodeMCU 1.0, не тронув ни строчки кода, — всё ожило.
Кстати, загляните после установки в «Инструменты»: с выбором платы меняется весь список настроек — от Flash Size до Reset Method. Это не визуальный шум: каждая строка уходит в компиляцию и утилиту загрузки, как частота Clock у ATtiny из позапрошлого урока. Пункт списка — это письмо, которое вы подписываете: память такая-то, сброс такой-то. Подписали за другой модуль — плате приходит не её программа.
| Плата | USB-чип | Flash | Чем хороша и чем строга |
|---|---|---|---|
| NodeMCU 1.0 (ESP-12E) | CH340 или CP2102 | 4 МБ | прошивается по micro-USB, делитель на A0 до 3,3 В; пины подписаны D0–D8 |
| Wemos D1 mini | CH340 | 4 МБ | габарит крохи и куча шилдов; в списке ищите LOLIN(WEMOS) D1 R2 & mini |
| ESP-01 / ESP-01S | USB нет | 1 МБ | самая дешёвая, прошивается через адаптер; GPIO0 на землю = режим прошивки |
ESP-01 — отдельная дисциплина. USB-порта на плате нет вообще: для прошивки нужен адаптер — USB-TTL с питанием 3,3 В или специальный прошивочный переходник. Порядок такой: GPIO0 соединить с землёй и только потом подать питание — чип стартует в режиме загрузчика; заливка идёт по тем же 115200. Питание строго 3,3 вольта: входы ESP8266 не терпят 5 В, а напрямую к Uno его подключать нельзя — общая земля, отдельная логика уровней. Драйвер у адаптера тот же, что у самой NodeMCU: CH340 или CP2102, лечится как в уроке про невидимый CH340. С памятью тоже внимательнее: старые ESP-01 несут 512 КБ, версии S и поздние — 1 МБ, и в ручном профиле это значение надо выбрать точно, иначе утилита запишет за границу чипа. Зато после прошивки ESP-01 живёт в розетке-переходнике и молча держит Wi-Fi: для реле в щитке это идеальный размер. И ещё нюанс: адаптеры для ESP-01 бывают с кнопками и без — вариант с кнопками GPIO0 и RESET заметно бережнее нервы, без них режим прошивки включается переподключением провода наугад.
// Встроенный светодиод NodeMCU висит на GPIO2 и инвертирован:// LOW = горит, HIGH = погашен. Скорость монитора — 115200 бод.void setup() { pinMode(2, OUTPUT); Serial.begin(115200);} void loop() { Serial.print("up="); Serial.println(millis() / 1000); digitalWrite(2, LOW); delay(500); digitalWrite(2, HIGH); delay(500);}Запустили — и не пугайтесь первого экрана. До строчки setup() NodeMCU сыплет в монитор бут-лог ROM-загрузчика: выбор режима загрузки, инициализация flash, частота SPI. На 115200 бод он читаемый, но выглядит как служебный тараторящий поток — это нормально и исчезает, как только входит ваш скетч. Если монитор пуст, а светодиод мигает, — панель открыта не на той скорости или не открыта вовсе: она садится на тот же порт, что и заливка, и открывается одной кнопкой. Тишина на две-три секунды между логом и первым аптаймом — это радио калибруется; тоже норма, а не подвисание.
Три отличия от Uno, которые всплывают в первый же день. Первое — аналоговая часть: вход один, A0. На голом модуле он принимает не больше 1,0 В; на NodeMCU и D1 mini стоит резисторный делитель, поднимающий предел до 3,3 В — как в уроке про analogRead подключается так же, но масштаб другой. И шум у этого входа свой: во время передачи Wi-Fi показания плавают на десятки единиц из 1023 — для термистора терпимо, для точных замеров вход не годится. Второе — логика: 3,3 В на выходах, и никакие 5-вольтовые модули напрямую. Третье — шелкография: на NodeMCU подписаны D0–D8, а скетч говорит на GPIO: D4 — это GPIO2, D2 — GPIO4, D1 — GPIO5. Я полвечера гонял светодиод «на D2», а он честно сидел на GPIO2, то есть D4.
Когда настройка отрепетирована, плате прямая дорога в сеть — начинается всё с подключения к роутеру, синтаксис у ESP8266 и ESP32 общий, а если ещё выбираете между семействами, поможет сравнение ESP32 и ESP8266. Тренажёр ниже приучает к главному: перед нажатием «Загрузить» проверьте пункт списка плат — ручка изображает выбор в меню, и три положения ручки дают три разные судьбы одной заливки.
- 1. Скетч «успешно» залился на NodeMCU с профилем Generic — модуль молчит. В чём причина?
- 2. Что нужно, чтобы прошить ESP-01?
- 3. Сколько аналоговых входов у ESP8266 и каков предел на голом модуле?
- 4. На шелкографии NodeMCU вы видите D4. Какой это GPIO для скетча?
- 5. Встроенный светодиод NodeMCU на GPIO2 загорается при...
- Пакет ESP8266 Community: http://arduino.esp8266.com/stable/package_esp8266com_index.json в Настройки → Установить в Менеджере плат
- Пункт списка — обещание про flash и сброс: NodeMCU 1.0 для NodeMCU, LOLIN(WEMOS) для D1 mini, Generic — для голых модулей
- «Залилось на 100 % и тишина» — почти всегда неверный пункт платы, а не мёртвый модуль
- ESP-01 прошивается через адаптер USB-TTL 3,3 В с GPIO0 на земле при подаче питания; USB на плате нет
- Логика 3,3 В: 5 В на входы — прямо в чип; A0 один, на голом модуле до 1 В, на NodeMCU — до 3,3 В через делитель
Частые вопросы по теме урока
- Скетч «успешно» залился на NodeMCU с профилем Generic — модуль молчит. В чём причина?
- Generic выставляет reset method none: после записи некому дёрнуть ресет, и модуль остаётся в режиме прошивки. Выбор пункта NodeMCU 1.0 чинит это без правки кода. Не тот пункт платы: профиль задаёт размер flash и метод сброса
- Что нужно, чтобы прошить ESP-01?
- На ESP-01 нет USB-чипа. Прошивка идёт через адаптер, а режим загрузчика включается подачей питания с GPIO0 прижатым к земле — после записи GPIO0 отпускают. Адаптер USB-TTL на 3,3 В и GPIO0 на землю при подаче питания
- Сколько аналоговых входов у ESP8266 и каков предел на голом модуле?
- Аналоговый вход один — TOUT, диапазон на голом чипе 0–1,0 В. Делитель на NodeMCU и D1 mini поднимает предел до 3,3 В, но вход всё равно один. Один вход, не больше 1,0 В
- На шелкографии NodeMCU вы видите D4. Какой это GPIO для скетча?
- Нумерация D-меток не совпадает с GPIO: D4 = GPIO2 (на нём и встроенный светодиод), а D2 = GPIO4. В скетче всегда пишите номер GPIO, не номер D. GPIO2
- Встроенный светодиод NodeMCU на GPIO2 загорается при...
- Светодиод подтянут к питанию, поэтому LOW зажигает его. Отсюда инверсная логика в мигалке — новичков она сбивает чаще, чем сам Wi-Fi. LOW: он инвертирован