ESP32 для самоделок и умного дома: Wi‑Fi и Bluetooth в одной плате, прошивка и первые проекты
ESP32 — семейство микроконтроллеров компании Espressif, в которых радиомодуль Wi-Fi и Bluetooth встроен прямо в чип. На такой плате пишут прошивку: она опрашивает датчик температуры или протечки, включает реле, показывает данные на веб-странице и передаёт их в систему умного дома. Чтобы работать с ESP32, нужно выбрать модель из линейки, освоить одну среду — Arduino, ESP-IDF или MicroPython — либо описывать устройство без кода в ESPHome, а также помнить про питание 3,3 В, режим глубокого сна и выводы, которые нельзя занимать как попало.
Содержание

Самое частое заблуждение — считать ESP32 «Arduino с Wi-Fi», к которому можно подключить всё то же самое. Отличий больше, чем кажется. Логика у платы трёхвольтовая, часть выводов при включении решает, как чип будет загружаться, а радиомодуль потребляет столько, что от батарейки устройство живёт недолго, если не уводить его в сон. Хороший первый проект собирает все три темы вместе: датчик на балконе, который раз в десять минут просыпается, отправляет температуру в Home Assistant и снова засыпает.
Что умеет ESP32 и когда нужна другая плата
Классический ESP32, с которого началась линейка, — это одно- или двухъядерный процессор Xtensa LX6 с частотой до 240 МГц, 520 КБ оперативной памяти, Wi-Fi 802.11b/g/n в диапазоне 2,4 ГГц и Bluetooth 4.2 в двух вариантах — классическом и Low Energy. Напряжение питания чипа — от 2,3 до 3,6 В, рекомендованное — 3,3 В (ESP32 Series Datasheet, версия 5.3).
Другая плата нужна, если беспроводная связь не требуется, а модули рассчитаны на 5 В, — тогда проще Arduino Uno. Для камеры с распознаванием и базы данных удобнее Raspberry Pi. Общий выбор платформ разобран в соседней статье о программировании микроконтроллеров, здесь речь только об ESP32.
Линейка: ESP32, S3, C3 и C6
Название ESP32 на плате ещё не говорит, какой внутри чип, а модели различаются ядром, версией Bluetooth и интерфейсами. Таблица собрана по даташитам Espressif: ESP32 версии 5.3, ESP32-S3 версии 2.2, ESP32-C3 версии 2.4 и ESP32-C6 версии 1.5.
| Модель | Ядро | Связь | Чем выделяется | Ток в deep sleep |
|---|---|---|---|---|
| ESP32 | 1–2 × Xtensa LX6, до 240 МГц | Wi-Fi 4, Bluetooth 4.2 Classic и LE | единственный из четырёх с классическим Bluetooth | 10 мкА |
| ESP32-S3 | 2 × Xtensa LX7, до 240 МГц | Wi-Fi 4, Bluetooth 5 LE | 45 выводов, USB OTG, интерфейс камеры, SIMD-инструкции | 7 мкА |
| ESP32-C3 | 1 × RISC-V, до 160 МГц | Wi-Fi 4, Bluetooth 5 LE | компактный и простой, 22 вывода (у части версий 16) | 5 мкА |
| ESP32-C6 | RISC-V до 160 МГц и экономичное ядро до 20 МГц | Wi-Fi 6, Bluetooth 5.3 LE, IEEE 802.15.4 | Zigbee 3.0 и Thread 1.3 | 7 мкА |
Для датчика с батарейкой подойдёт C3. Если нужны камера, дисплей или USB-клавиатура, берите S3. C6 нужен, когда устройство должно работать в сети Zigbee или Thread, а старый ESP32 — когда требуется классический Bluetooth, например для передачи звука. Все четыре модели работают с Wi-Fi только в диапазоне 2,4 ГГц, поэтому роутер должен раздавать сеть и на этой частоте.
С чего начать: плата, среда и первые проекты
Для первой платы удобна отладочная версия DevKit с USB-разъёмом: через него она и прошивается, и питается. Arduino IDE с пакетом arduino-esp32 даёт множество готовых примеров, PlatformIO в VS Code удобнее для больших проектов. ESP-IDF — фирменная среда Espressif на C с FreeRTOS: в ней доступны все настройки чипа, но порог входа выше. MicroPython позволяет писать на Python и проверять команды в консоли без компиляции. ESPHome стоит особняком: устройство описывают в YAML-файле, а прошивку система собирает сама. Для всех вариантов ESP32 ESPHome по умолчанию использует фреймворк ESP-IDF, а в конфигурации рекомендует указывать модель чипа через variant, а не через устаревший board (документация ESPHome).
Порядок упражнений ниже выстроен так, чтобы каждое добавляло одну новую тему и ошибку можно было найти сразу. Сначала нужно убедиться, что плата прошивается, затем подключить датчик, потом сеть, и только после этого — сон, при котором отладка становится труднее: заснувшая плата пропадает из монитора порта.
- Мигание светодиодом и вывод счётчика в монитор порта: проверка кабеля, драйвера и загрузки.
- Цифровой датчик температуры на шине I2C с питанием 3,3 В.
- Подключение к Wi-Fi и простая веб-страница на самой плате с текущим показанием.
- Передача того же показания по Bluetooth LE и чтение его телефоном.
- Глубокий сон с пробуждением по таймеру и счётчиком пробуждений в памяти RTC.
- Тот же датчик в ESPHome с выводом в Home Assistant.
Проверить результат каждого шага просто: плата должна выдержать сутки работы без зависаний, а после отключения питания — сама подключиться к сети.
Выводы-ловушки: почему плата не загружается
Часть выводов ESP32 называется strapping-пинами: в момент сброса чип считывает их уровень и по нему решает, как загружаться. В документации ESP-IDF к ним отнесены GPIO0, GPIO2, GPIO5, GPIO12 и GPIO15 (ESP-IDF, GPIO & RTC GPIO). Низкий уровень на GPIO0 переводит чип в режим прошивки, а низкий уровень на GPIO15 отключает стартовые сообщения загрузчика.
Самый коварный из них — GPIO12, он же MTDI. По руководству esptool, высокий уровень на нём при сбросе переключает питание флеш-памяти (VDD_SDIO) с 3,3 на 1,8 В. Если на модуле стоит флеш-память на 3,3 В, ей не хватает напряжения, и плата перестаёт прошиваться или загружаться (esptool, Boot Mode Selection). Внутренний резистор притягивает вывод к земле, поэтому на столе всё работает, а сбой появляется, когда к GPIO12 подключают модуль с подтяжкой к питанию. Проще всего перенести модуль на другой вывод. Есть и радикальный способ: команда espefuse set-flash-voltage 3.3V навсегда фиксирует напряжение флеш-памяти, после чего состояние GPIO12 при сбросе игнорируется. Но eFuse — однократно программируемые биты, и прожжённый бит вернуть нельзя (esptool, set-flash-voltage), поэтому сначала убедитесь, что флеш-память на модуле трёхвольтовая.
Ещё две группы выводов заняты или ограничены. GPIO6–11, а на модулях с дополнительной памятью и GPIO16–17, обычно подключены к флеш-памяти и PSRAM, и трогать их нельзя. GPIO34–39 работают только на вход и не имеют встроенных подтягивающих резисторов: кнопка на таких выводах без внешнего резистора даёт случайные срабатывания. У других моделей свой набор: у ESP32-C3 strapping-пины — GPIO2, GPIO8 и GPIO9, поэтому схему с одной модели нельзя переносить на другую, не сверившись с её даташитом.
Питание и глубокий сон
По даташиту ESP32 в режиме modem-sleep при 240 МГц чип потребляет 30–68 мА, в light-sleep — 0,8 мА, а в deep sleep с таймером и памятью RTC — 10 мкА. Но 10 мкА относятся к самому чипу. На отладочной плате стабилизатор, преобразователь USB-UART и светодиод питания потребляют больше, поэтому для автономного датчика плату выбирают с экономичным стабилизатором или собирают свою.
Документация ESP-IDF предупреждает: соединения Wi-Fi и Bluetooth в режимах deep sleep и light sleep не сохраняются (ESP-IDF, Sleep Modes). После пробуждения из deep sleep программа запускается заново, с подключения к сети. Переживают сон только переменные в памяти RTC — в Arduino и ESP-IDF их помечают атрибутом RTC_DATA_ATTR. Будить чип умеют таймер, сенсорная кнопка, сопроцессор ULP и выводы RTC, у классического ESP32 это GPIO0, 2, 4, 12–15, 25–27 и 32–39.
Учебный пример. Датчик температуры на балконе собран на ESP32-C3 и питается от аккумулятора. Каждые десять минут таймер будит плату, она подключается к Wi-Fi, через ESPHome передаёт показание в Home Assistant и засыпает. Если батарея садится за неделю, первым делом измерьте мультиметром ток платы во сне.
Где новички ошибаются
Большинство проблем с ESP32 связаны не с кодом, а с питанием, кабелем и выбором выводов. Список ниже идёт от самых частых причин к более редким, и проверять стоит в том же порядке.
- Кабель только для зарядки: плата светится, но порт не появляется.
- Пятивольтовый сигнал прямо на вход: уровни у ESP32 рассчитаны на 3,3 В, нужен делитель или преобразователь уровней.
- Реле или сервопривод питаются от вывода 3,3 В платы: при включении напряжение проседает, и чип перезагружается.
- Роутер раздаёт сеть только на 5 ГГц, и ESP32 её не видит.
- В ESPHome указан не тот
variantили неверный размер флеш-памяти: по документации прошивка не загрузится или плата не стартует. - Кнопка на GPIO34–39 без внешнего резистора и модуль с подтяжкой на GPIO12.
Чему учат на курсах
Писать код для этой платы на C++ учат на курсе Skillbox «C++ для робототехников»: в обзоре курса Arduino и ESP32 названы в списке практики, задания выполняются в симуляторе Wokwi, поэтому своя плата не нужна. Итоговая работа — приложение на Qt5 для управления виртуальным шагающим роботом. Срок на странице указан по-разному, его стоит уточнить у школы.
Ограничение такого формата в том, что проблемы с GPIO12, просадками питания и током во сне проявляются только на реальной плате, поэтому проекты стоит повторить на железе.
Если интересует умный дом как работа, ESP32 будет лишь одним из инструментов. На курсе Skillbox «Инженер умного дома» программная часть построена на языке C и микроконтроллерах ARM, а об ESP сказано только, что «в материалах встречаются Arduino и ESP», — модель платы не названа. Курс длится 15 месяцев; сколько заданий выполняется на ESP, уточните у школы.
Для самоделки электроника важна не меньше прошивки: нужно понимать, почему реле подключают через транзистор и как рассчитать делитель для пятивольтового датчика.
Эту часть закрывает курс Skillbox «Электроника и схемотехника»: в списке инструментов указаны «Arduino или ESP», осциллограф и мультиметр, в практике — сборка схем с MOSFET-транзистором, итоговый проект — система умного освещения. Какой контроллер используется, на странице не уточняется, а срок указан по-разному, поэтому эти условия стоит проверить до оплаты.
Как ESP32 влияет на доход
Отдельной открытой статистики по зарплатам за умение работать с ESP32 нет: в вакансиях эта плата идёт строкой в требованиях к программисту микроконтроллеров, инженеру по автоматизации или разработчику устройств умного дома, а не отдельной должностью. Данных о надбавке за этот навык найти не удалось. Чтобы оценить рынок, ищите вакансии по словам «ESP32» и «ESP-IDF» с фильтром по региону и опыту и смотрите медиану, а не верхнюю границу вилки.
Чаще навык приносит доход косвенно: кружок для учителя, заказы на автоматизацию дачи для электрика. Если вы сравниваете школы, где учат C++ — языку скетчей Arduino для ESP32, — пригодится широкий рейтинг онлайн-школ по программированию на C++: он охватывает весь язык, а не только встраиваемые системы, поэтому программу каждого курса проверяйте на наличие практики с микроконтроллерами.