Поддерживаемые платы¶
Один и тот же код собирается под две платы. Различия (#if defined(ESP32) / ESP8266) скрыты в модулях. Один и тот же UI, одни и те же эндпоинты.
NodeMCU v1.0 (ESP8266)¶
| Характеристика | Значение |
|---|---|
| Чип | ESP-12E (ESP8266EX) |
| Flash | 4 МБ |
| RAM | ~80 КБ (всё пользовательское в heap) |
| Wi-Fi | 2.4 GHz b/g/n |
| GPIO | 11 свободных (часть резервирована) |
| ADC | 1 канал (A0), 10 бит, 0–3.3 В |
| Команда сборки | pio run (default) |
Подходит для: простые сценарии — несколько реле + 1–2 датчика + расписания. Самая дешёвая и проверенная плата.
Не подходит для: активного TLS-трафика, большого числа задач (>20), сложных алгоритмов в RAM, нескольких I²C-устройств одновременно с UDP-mesh — heap кончится.
Пины ESP8266¶
GPIO | NodeMCU | Назначение | Примечания
------|---------|-------------------------------|--------------------
0 | D3 | OK для GPIO | Подтянут к VCC; LOW при boot → flash-режим
1 | TX0 | UART TX | Использовать только если Serial не нужен
2 | D4 | OK | LED на плате; LOW не блокирует boot
3 | RX0 | UART RX | Использовать только если Serial не нужен
4 | D2 | OK (I²C SDA по умолчанию) | —
5 | D1 | OK (I²C SCL по умолчанию) | —
9 | SD2 | НЕ ИСПОЛЬЗОВАТЬ | Внутренняя SPI flash
10 | SD3 | НЕ ИСПОЛЬЗОВАТЬ | Внутренняя SPI flash
12 | D6 | OK | —
13 | D7 | OK | —
14 | D5 | OK | —
15 | D8 | OK; LOW при boot | Нельзя оставлять висящим при питании
16 | D0 | OK; deep-sleep wake | Не поддерживает interrupt
A0 | A0 | ADC, 10 бит, 0–3.3 В | —
GPIO 9, 10
Физически на плате есть, но подключены к внутренней SPI-памяти. Использовать категорически нельзя.
Глубокий сон
Для deep-sleep нужна перемычка между D0 и RST — иначе плата не проснётся. Это аппаратное требование, не баг прошивки. Подробнее в Настройках → Глубокий сон.
Лимиты по умолчанию¶
| Параметр | Значение |
|---|---|
DEVICES_MAX |
16 |
TASKS_MAX |
12 |
WIFI_NETWORKS_MAX |
5 |
USERS_MAX |
5 |
| Buffer лога в RAM | 32 строки × 200 байт |
Backup-фича (/api/v1/backup) |
❌ отключена (-D BACKUP_DISABLED=1, CB-141) |
Backup на NodeMCU отключён намеренно — стоит ~2.7 KB DRAM (rodata + WebServer routes), при baseline free heap ~10 KB это слишком впритык к crash-порогу 5 KB. Если очень нужен — соберите кастомную сборку без BACKUP_DISABLED и проверьте cloud: heap free=N в логах.
Если выходите за эти лимиты — пересмотрите архитектуру (часто tasks дробятся неоптимально) или возьмите ESP32.
WROOM-32 DevKit V1 (ESP32)¶
| Характеристика | Значение |
|---|---|
| Чип | ESP32-D0WDQ6 (Tensilica LX6 × 2) |
| Flash | 4–16 МБ (зависит от модуля) |
| RAM | 320 КБ DRAM + 200 КБ IRAM |
| Wi-Fi | 2.4 GHz b/g/n |
| Bluetooth | BLE + Classic (не используется в прошивке) |
| GPIO | 25+ свободных |
| ADC | 2 блока (15 каналов), 12 бит |
| Команда сборки | pio run -e esp32dev |
Подходит для: всё. Параллельные I²C-устройства, активный mesh, OTA с резервной партицией, длинные history-логи. Если есть выбор — берите ESP32.
Пины ESP32¶
GPIO | Назначение | Примечания
------|-----------------------------------------|--------------------
0 | Boot button | LOW при boot → flash-режим
1 | UART0 TX | Serial output, не для GPIO
2 | OK | LED на некоторых платах
3 | UART0 RX | Serial input, не для GPIO
4–15 | OK (15 при boot должен быть LOW) | —
16, 17| OK | —
18, 19| OK (стандартный SPI) | —
21, 22| OK (стандартный I²C: SDA=21, SCL=22) | —
23 | OK | —
25, 26| OK; DAC | —
27 | OK | —
32, 33| OK; ADC1 | —
34–39 | ТОЛЬКО ВХОД, ADC1 | Без pull-up/down, OUTPUT не поддерживается
6–11 | НЕ ИСПОЛЬЗОВАТЬ | Внутренняя SPI flash
ADC2 vs Wi-Fi
На ESP32 ADC2 (GPIO 4, 12–15, 25–27) не работает одновременно с активным Wi-Fi. Аналоговые входы вешайте на ADC1 (GPIO 32–39).
OTA partition
ESP32-сборка использует partitions_huge.csv — двойная app-партиция для безопасного OTA. После OTA-обновления старая версия остаётся в резервной партиции до следующего успешного boot.
Лимиты по умолчанию¶
| Параметр | Значение |
|---|---|
DEVICES_MAX |
32 |
TASKS_MAX |
32 |
WIFI_NETWORKS_MAX |
5 |
USERS_MAX |
10 |
| Buffer лога в RAM | 64 строки × 200 байт |
Backup-фича (/api/v1/backup) |
✅ включена |
ESP-01S (ESP8266, минимальный вариант)¶
| Характеристика | Значение |
|---|---|
| Чип | ESP8266EX |
| Flash | 1 МБ (внешний SPI chip) |
| RAM | ~80 КБ (та же что у NodeMCU) |
| Wi-Fi | 2.4 GHz b/g/n |
| GPIO наружу | только 2 (GPIO0, GPIO2) + TX/RX |
| USB-UART на борту | НЕТ — нужен внешний программатор |
| Команда сборки | pio run -e esp01s |
Подходит для: одиночное реле / mesh-нода / релейный модуль внутри умного выключателя. Размер 21×13 мм — влезает в коробку выключателя.
Не подходит для: что-либо со множеством периферии. Из реалистичных сценариев — 1 реле + LED-индикация на GPIO2 (там встроенный синий светодиод, active-LOW). На GPIO0 можно повесить кнопку, но с оговоркой (см. ниже).
API-only build, без web UI
На ESP-01S полная прошивка с HTML/CSS/JS не работает: heap'а не хватает на serve больших static-файлов, браузер видит ERR_CONTENT_LENGTH_MISMATCH. Поэтому env esp01s собирается с флагом -D NO_WEB_UI=1:
- LittleFS содержит только runtime-конфиги (
/config/), без/public/. FS image ~3KB. GET /возвращает короткий текст с подсказкойPOST /api/v1/settings/wifi.- Все остальные
/api/v1/*endpoint'ы работают как обычно. - Управление платой — через REST API напрямую (curl, Postman) или через cloud-сервис.
GPIO0 при boot должен быть HIGH
GPIO0 на ESP-01S — это и bootstrapping pin, и user-GPIO. Если на нём висит нагрузка которая держит линию LOW при power-on (например кнопка нормально-замкнутая, или мощный pull-down), плата уходит в bootmode и прошивка не стартует.
Безопасный сценарий: только GPIO2 для реле, GPIO0 не использовать или использовать как input с подтяжкой к VCC.
Пины ESP-01S¶
GPIO | Пин платы | Назначение | Примечания
------|-----------------|--------------------------|-----------
0 | GPIO0 | OK, но осторожно | LOW при power-on → bootmode
1 | TX | UART TX (Serial.print) | Используется монитор/cloud-log
2 | GPIO2 | OK; встроенный LED | LED active-LOW (горит при LOW)
3 | RX | UART RX | Используется при flash
Для прошивки нужен внешний программатор и физическая перемычка GPIO0→GND во время power-on. Полный гайд: Прошивка через программатор.
Лимиты по умолчанию¶
Те же что у ESP8266 (DEVICES_MAX=16, TASKS_MAX=12 и т.д.). На практике 1–2 устройства + 1–2 task'а — это весь use case ESP-01S.
Backup-фича (/api/v1/backup): ✅ включена на ESP-01S (CB-141 follow-up, v0.4.68). Без UI это единственный способ переноса конфига с другой платы через API. Cost ~2 KB DRAM, переносим — NO_WEB_UI build уже освободил большую часть .rodata.
Какую плату выбрать¶
Один реле + один датчик + расписание? → ESP8266 (NodeMCU)
3-5 датчиков, один-два реле, простые задачи? → ESP8266 (NodeMCU)
Mesh из 5+ плат + активные сценарии? → ESP32
I²C-датчики на батарее с deep-sleep? → ESP32 (там RTC SRAM, проще)
Бюджет важнее всего? → ESP8266 (NodeMCU)
Запас на будущее? → ESP32
Одиночное реле внутри коробки выключателя? → ESP-01S
Что не поддержано¶
- ESP32-S2 / S3 / C3 — не тестировались. Теоретически собрать можно, на практике могут вылезти отличия в
WiFi.h, ADC и partition table. Если попробуете — расскажите в issue. - Raspberry Pi Pico (RP2040) — нет порта Arduino-framework специфики (LittleFS API сильно другой).
- Arduino Mega / UNO — нет Wi-Fi, фундаментально не подходит.