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

Поддерживаемые платы

Один и тот же код собирается под две платы. Различия (#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, фундаментально не подходит.

Сборка с нуля

См. Быстрый старт → шаг 3.