Справочник по платам ESP32, используемым в проектах VibeEngineering: характеристики, официальные источники, и главное — наш собственный опыт: что сработало, что нет, на чём мы обожглись и чего делать не стоит.
Не маркетинг и не пересказ даташитов. Каждый пункт «плюсы/минусы» здесь оплачен временем отладки на живом железе; спорные утверждения помечены как непроверенные.
| Плата | Чип | Flash / PSRAM | Наши проекты | Статус |
|---|---|---|---|---|
| ESP32-S3-DevKitC-1 N16R8 | ESP32-S3, 2×240 МГц | 16 МБ / 8 МБ octal | AtomSpectra Waterfall, Radex-шлюз, БДКГ-05 мост, стенды BLE | ✅ основная рабочая |
| Seeed XIAO ESP32C3 | ESP32-C3, RISC-V 160 МГц | 4 МБ / нет | RadonEye-шлюз, Radex-шлюз (C3), BLE Explorer | ✅ в работе |
| ESP32-S3-USB-OTG | ESP32-S3, 2×240 МГц | 8 МБ / нет | USB-host терминал к спектрометрам (usb_host_probe) |
⚠ ниша |
| ESP32-DevKitC v4 (WROOM-32) | ESP32, 2×240 МГц | 4 МБ / нет | ранние BLE-шлюзы, ble-explorer |
🕗 legacy |
| Прошивка / проект | Плата | Фреймворк | Репозиторий |
|---|---|---|---|
atomspectra-waterfall — водопад гамма-спектров, USB Host + Web UI |
S3-DevKitC-1 N16R8 | ESP-IDF v5.4 | atomspectra-waterfall-esp32 |
radex_gateway_s3_n16r8.yaml — BLE-шлюз Radex MR107ion |
S3-DevKitC-1 N16R8 | ESPHome (arduino) | radex-esp32 |
radex_gateway_c3.yaml — тот же шлюз под C3 |
XIAO ESP32C3 | ESPHome (arduino) | radex-esp32 |
radon_ha_gateway_c3.yaml — BLE-шлюз RadonEye Plus2 |
XIAO ESP32C3 | ESPHome (arduino) | radoneye-esp32 |
atomfast_gateway*.yaml — BLE-шлюз AtomFast Plus2 |
DevKitC v4 / S3 | ESPHome (arduino) | atomfast-esp32 |
bdkg05-esp32-bridge — Modbus-RTU мост к БДКГ-05 |
S3-DevKitC-1 N16R8 | ESP-IDF | atomtex-esp32 |
usb_host_probe — полевой USB-терминал (экран, SD, Web UI) |
S3-USB-OTG | ESP-IDF v5.5 | внутренний |
explorer_c3.yaml — сканер/RE BLE-устройств |
XIAO ESP32C3 | ESPHome (arduino) | внутренний (ble-explorer) |
radex-idf, ble-test-server, ble-nimble-client — стенды BLE |
S3-DevKitC-1 | ESP-IDF v5.4 | внутренние |
Самая дорогая ошибка в нашей практике. board: esp32-s3-devkitc-1 задаёт распиновку и
загрузчик, но не объём флеша и не наличие PSRAM. ESPHome по умолчанию берёт 4 МБ,
а определение платы в PlatformIO PSRAM не включает вовсе. Маркировка «N16R8» живёт только
на наклейке модуля — в сборку она не попадает сама.
Итог одного такого недосмотра: прошивка год работала на плате с 16 МБ флеша и 8 МБ PSRAM, используя 4 МБ и ноль PSRAM, при этом документация уверяла, что «8 МБ PSRAM — запас heap есть».
Правило: профиль памяти задавать явно и проверять сборкой, а не намерением.
На всех наших платах WiFi и Bluetooth работают на 2,4 ГГц через одно радио. Практические следствия, полученные измерением:
- Приёмный буфер, которого хватало без WiFi, начинает терять данные после его включения. У нас: потери в потоке спектрометра выросли с 0 % до устойчивых 7–9 %, пока кольцо не увеличили вчетверо (8 КБ → 32 КБ). Сначала мерить пик заполнения буфера, а не переносить задачи по ядрам — две гипотезы про конкуренцию ядер дали идентичные числа и обе были отвергнуты измерением.
bluetooth_proxyв ESPHome рядом с чувствительным BLE-клиентом пришлось убрать — интерференция.- Если задача требует и стабильного BLE-скана, и сети — рассмотрите вынос транспорта на провод. У Seeed есть готовый пример такого решения (BLE + Ethernet W5500).
ESP-IDF для режима STA по умолчанию ставит WIFI_PS_MIN_MODEM: радио спит между маячками
точки доступа. Наш чистый ping (20 пакетов, без всякой нагрузки) дал разброс 2–112 мс
при среднем 63 мс — для локальной сети это ненормально.
Лечится esp_wifi_set_ps(WIFI_PS_NONE) ценой роста потребления. Разумный компромисс —
переключатель «от сети / от батареи».
На платах без PSRAM архитектурные решения, безобидные на S3 с внешней памятью, ломают всё. Переход с опроса на постоянное соединение (WebSocket) добавил ~10 КБ статики и уронил свободную кучу до сотен байт — веб-сервер переставал принимать соединения даже без единого браузера. Решение откатили целиком.
Правило: прежде чем менять архитектуру обмена, посмотрите бюджет RAM конкретной платы.
Случаи из практики, где документация расходилась с платой:
- Полярность сигнала перегрузки по току оказалась обратной описанию в user guide.
- Заявленный в документации «1-bit режим SD» на деле поднимался как 4-проводный SDIO.
- Карта памяти 64 ГБ с завода отформатирована в exFAT, а сборка FatFs в ESP-IDF идёт с выключенным exFAT — карта не монтируется с невнятным кодом ошибки. Лечится форматированием в FAT32 (для тома >32 ГБ это умеет Windows 11 сборки 26100+).
Номера портов волатильны, а в системе могут быть последовательные устройства, не имеющие к платам никакого отношения (звуковые карты, модемы). Перед прошивкой идентифицируйте плату по MAC, а не по номеру порта — ошибка здесь стоит дорого.
Полезно: у XIAO ESP32C3 в board-определении PlatformIO прописаны USB VID/PID
(2886:0046 и 303a:1001) — по ним плата опознаётся однозначно.
Все внешние ссылки — на официальные страницы производителей и их GitHub. Наши выводы опираются на измерения на живом железе; там, где утверждение не проверено, это сказано явно.
Проекты VibeEngineering: atomspectra-waterfall-esp32 · radex-esp32 · radoneye-esp32 · atomfast-esp32 · atomtex-esp32