❯ Простенький гаджет превращается в суровый тест

Собираем девайс на ESP32: API, датчики, экраны и Home Assistant

Плата ESP32 в корпусе, напечатанном на 3D-принтере
Плата ESP32 в корпусе, напечатанном на 3D-принтере

Если вы работаете с крупной кодовой базой или монорепами, скромное контекстное окно Claude Code и жесткие лимиты на использование могут несколько ограничивать. Проблему с «памятью» Claude Code я решил с помощью базы данных Postgres, но необходимость постоянно кликать по крошечной иконке, чтобы проверить остаток квоты, жутко раздражала.

В конце концов мне это надоело, и я решил собрать небольшой настольный экранчик для вывода лимитов. Чтобы больше никаких лишних кликов и консольных команд – бросил взгляд и сразу видишь, сколько осталось. Заодно подумал: почему бы не добавить датчик температуры? Пусть девайс измеряет климат у меня в кабинете, а эти данные я потом проброшу в Home Assistant, чтобы настроить автоматическое включение кондиционера.

Показания датчика DHT22 на OLED-дисплее
Показания датчика DHT22 на OLED-дисплее
Подключение датчика DHT22 к плате ESP32
Подключение датчика DHT22 к плате ESP32

Схема проще некуда. Понадобится стандартная плата ESP32 (доступный микроконтроллер со встроенными модулями файфая и блютуза), датчик температуры DHT22, обычный монохромный OLED-дисплей (я взял на чипе SH1106, но подойдет практически любой аналогичный) и тактовая кнопка для переключения экранов. Вот и весь набор.

Я набросал простенький корпус в Blender, запустил 3D-принтер и буквально через пару часов держал готовые детали в руках.

Две платы ESP32
Две платы ESP32
Маркировка классического модуля ESP32 и плата ESP32-S3
Маркировка классического модуля ESP32 и плата ESP32-S3

Настало время загрузить работой наших ИИ-помощников. Все три агента получили один и тот же промпт:

**Я хочу собрать инфопанель на базе ESP32, выполняющую три задачи:**

1. Отображать остаток квоты поиска/запросов моего тарифного плана Claude.
2. Считывать температуру и влажность с подключенного датчика DHT22  
   и передавать эти данные в систему Home Assistant.
4. Показывать текущую погоду и температуру за окном в Нью-Дели.

**Используемое железо: плата ESP32 Devkit V1, датчик DHT22,
монохромный OLED-дисплей SH1106 (128×64).
Также подключена четырехконтактная тактовая кнопка –
она должна переключать экраны между этими тремя режимами
и обновлять дисплей при нажатии.**

Цель была проста: получить рабочий прототип, выполняющий все три задачи, потратив при этом минимум запросов. С ходу идеальный код не выдал никто – каждому агенту потребовалось несколько уточняющих промптов, но пути к решению они выбрали совершенно разные.

❯ Antigravity

Впечатляющий разбег, но планирование оказалось долгим

Первым в бой ринулся инструмент Antigravity от Google на базе Gemini 3.1 Pro (в режиме максимального усердия – High effort). Он оказался чертовски быстрым, но весьма своеобразным. Получив промпт, модель мигом загуглила, как проверять лимиты Anthropic API, выдала пошаговый план разработки и засыпала меня наводящими вопросами.

Antigravity составляет план реализации в ответ на первый запрос
Antigravity составляет план реализации в ответ на первый запрос
Предложенный Antigravity план работы
Предложенный Antigravity план работы

Я запускал все три ИИ‑агента одновременно. Пока Codex и Claude Code корпели над кодом, выдавая первые наброски прошивок для ESP32, Antigravity упрямо требовал утвердить его план действий, отказываясь писать даже строчку кода без моего одобрения. Ответив на все его вопросы, я получил… еще один план!

А вдобавок – категоричное заявление: мол, вытянуть лимиты подписки Claude Pro не получится, так как у Anthropic нет официального API для этой функции. Передавать же температуру в Home Assistant ИИ предложил через встроенный REST API – самый простой способ, если не хочется связываться с ESPHome.

Antigravity пытается разобраться с эндпойнтом API для получения лимитов Claude
Antigravity пытается разобраться с эндпойнтом API для получения лимитов Claude
Код для инфопанели ESP32, сгенерированный Antigravity
Код для инфопанели ESP32, сгенерированный Antigravity

Чтобы сдвинуть дело с мертвой точки, я скормил ассистенту ссылку на GitHub-репозиторий Clawdmeter Германна Бьёргвина – это похожий проект на базе платы Waveshare ESP32-S3-Touch-AMOLED-2.16. Только тогда до модели дошло: можно взять OAuth-токен, созданный утилитой Claude CLI, и отправить его на специальный бета-сервер API для получения лимитов. К слову, на тот момент Antigravity все еще не выдал реального кода. Если вы тоже считаете, что Antigravity пока не дорос до уровня Claude Code и Codex, этот случай лишь укрепит вашу веру.

Изменения, которые Antigravity предлагает внести в план реализации
Изменения, которые Antigravity предлагает внести в план реализации

Стоило мне наконец согласовать третий (и, слава богу, последний) план действий, как ИИ за пару минут накатал проект для PlatformIO. Он разбил код на кучу файлов, вынеся пароль от вайфая и OAuth-токен отдельно от основного исходника. С точки зрения безопасности подход верный, но для девайса, который никогда не выйдет за пределы домашней сети, городить такую архитектуру – явный перебор. Новички в мире Arduino IDE и ESP32 от подобной россыпи файлов вместо одного понятного скетча и вовсе могут впасть в ступор.

Инфопанель ESP32 под управлением кода от Antigravity
Инфопанель ESP32 под управлением кода от Antigravity

❯ Codex так и не понял задачу

Ошибки, которые лишили шансов на успех

Созданный OpenAI ассистент Codex (на базе GPT 5.5 в режиме высокой точности) не стал тратить время на раздумья. Буквально за три минуты он выкатил два YAML-файла, но свернул при этом в совершенно неожиданную сторону. ИИ решил использовать ESPHome, чтобы завязать плату на датчик, изначально совместимый с Home Assistant. Такой подход хорош, если вам нужен чистый термометр в кабинет на базе DHT22. Но когда на плату навешаны еще две совершенно другие задачи, тянуть тяжелую ESPHome – решение сомнительное.

Codex собирает информацию для проектирования инфопанели ESP32
Codex собирает информацию для проектирования инфопанели ESP32

Codex тоже резонно заметил, что у Anthropic нет официального API для проверки лимитов Claude Pro. Но в отличие от Antigravity, это препятствие его ничуть не смутило – он решил обойти его костылями: Codex создал виртуальный ползунок input_number.claude_plan_usage_percent в Home Assistant. Идея в том, чтобы я вручную (или через какую-то внешнюю автоматизацию) двигал этот ползунок, сообщая плате о лимитах! В качестве альтернативы ИИ предложил настроить настоящий сенсор через API, но только если у меня есть админский ключ консоли Anthropic. Которого у меня, конечно же, нет.

Схема подключения компонентов для инфопанели, составленная Codex
Схема подключения компонентов для инфопанели, составленная Codex

В следующем запросе я скинул ему ссылку на тот же репозиторий Clawdmeter. Codex кивнул, мол, идею понял, но вместо того, чтобы отказаться от тяжеловесного ESPHome, упрямо продолжил гнуть свою линию. Он предложил использовать всё те же ручные переменные, добавив, что «следующим шагом будет написание промежуточного моста в духе Clawdmeter, который будет транслировать реальные данные об использовании Claude Code в созданные виртуальные сущности». Зато Codex выдал вполне толковую и наглядную схему подключения компонентов.

Сгенерированный Codex код ESPHome для инфопанели ESP32
Сгенерированный Codex код ESPHome для инфопанели ESP32

Метод, конечно, жизнеспособный, но требующий кучи костылей и неоправданного усложнения на ровном месте. Ощущение, будто Codex зацепился за датчик температуры (наверняка из-за обилия готовых примеров в сети) и попытался втиснуть всю остальную логику в эту экосистему, вместо того чтобы переписать архитектуру под конкретную задачу.

Предложенный Codex код для интеграции в Home Assistant
Предложенный Codex код для интеграции в Home Assistant
Codex пытается скорректировать код получения лимитов Claude
Codex пытается скорректировать код получения лимитов Claude

Чтобы довести этот прототип до ума, пришлось бы потратить уйму времени на переписки с ИИ. Если честно, мне было бы проще написать всё с нуля самому, чем продираться сквозь дебри ESPHome, куда меня так настойчиво затягивал Codex.

❯ Claude Code не спешил, но сделал всё как надо

Неторопливый итеративный подход, здравая логика и рабочий код

Claude Code, на базе Sonnet 4.6 в режиме High effort, с самого старта оказался медленнее всех. Главным образом из-за того, что серверы были перегружены и утилита то и дело мозолила глаза предупреждением «модель под высокой нагрузкой». Поделать с этим на стороне клиента ничего нельзя, да и столкнулся я с таким впервые за несколько месяцев активного использования Claude Code, так что ругаться не стал.

Ответ Claude на первый запрос по проекту ESP32
Ответ Claude на первый запрос по проекту ESP32

Немного подумав, Claude с первой же версии выдал один готовый INO-файл (формат Arduino IDE), выполняющий все три задачи. Никаких капризов, как у Antigravity, или упрямства, как у Codex. Claude Code элегантно решил проблему с лимитами: он просто отправляет POST-запрос /v1/messages со значением max_tokens:1 модели Haiku, получая в заголовках ответа данные о доступных токенах и запросах на текущий период. ИИ четко расписал, какие конкретно лимиты мы сможем увидеть, а какие (вроде общего месячного лимита подписки Claude Pro) вытянуть не удастся.

Claude проверяет эндпойнты API для запроса лимитов
Claude проверяет эндпойнты API для запроса лимитов
Сообщение Claude об исправлении эндпойнта API
Сообщение Claude об исправлении эндпойнта API

Как и в прошлые разы, я подкинул ссылку на проект Clawdmeter, чтобы упростить задачу. Ассистент сориентировался мгновенно: обновил скетч Arduino новыми заголовками, показал превью будущего экрана и выкатил итоговый понятный INO-файл, полностью готовый для заливки на плату, заботливо приложив инструкцию о том, как получить OAuth-токен.

Схема подключения компонентов от Claude Code
Схема подключения компонентов от Claude Code
Пояснения Claude к финальной версии кода
Пояснения Claude к финальной версии кода

Как и Antigravity, Claude настроил передачу данных с термометра через REST API Home Assistant. Однако он подметил важнейшую деталь: если сервер Home Assistant перезагрузится, интеграция «отвалится» до тех пор, пока плата не отправит данные повторно. Чтобы связь не терялась, ассистент порекомендовал использовать протокол MQTT, хотя это и потребует некоторых настроек на стороне умного дома.

Плата ESP32 с прошивкой, сгенерированной в Claude Code
Плата ESP32 с прошивкой, сгенерированной в Claude Code

❯ Только один дошел до финиша

Какая модель в итоге выдала рабочий дашборд и почему

Для моих задач идеальным решением оказался именно Claude Code. Он выдал понятную схему подключения деталей и всего один INO-файл, избавив проект от лишней сложности. Для девайса, живущего исключительно внутри локальной домашней сети, плодить файлы ради выноса OAuth-токенов или паролей вайфая попросту бессмысленно.

Готовая инфопанель ESP32
Готовая инфопанель ESP32

К тому же я давно пользуюсь Claude, так что в его памяти уже хранился мой список датчиков и плат, а также локальный IP-адрес моего сервера Home Assistant. Он просто подставил все это прямо в скетч – мне почти ничего не пришлось править ручками перед прошивкой. Некоторые видят в Claude Code лишь скромного ассистента, но при хорошем контексте он способен заменить целую армию разработчиков.

Впрочем, если вы давно пользуетесь Codex или Antigravity, для вас аналогичной палочкой-выручалочкой могут стать именно они.

Экран уличной погоды на инфопанели ESP32
Экран уличной погоды на инфопанели ESP32
Экран комнатной температуры всё там же на ESP32
Экран комнатной температуры всё там же на ESP32

Второе место с небольшим отставанием занял Antigravity. Он изо всех сил пытался сделать всё правильно, но переборщил со сложностью: код пришлось допиливать и отлаживать вручную, прежде чем плата ожила. К тому же Antigravity зажал схему подключения – пришлось выуживать распиновку прямо из исходника, чтобы понять, куда какой проводок втыкать.

Экран лимитов Claude (код сгенерирован Claude Code)
Экран лимитов Claude (код сгенерирован Claude Code)
Экран комнатной температуры (код сгенерирован Antigravity)
Экран комнатной температуры (код сгенерирован Antigravity)

Наконец, Codex. Идея использовать ESPHome сама по себе неплоха, но лишь в том случае, если бы мы собирали обычный комнатный термометр. Несмотря на мои подсказки по работе с лимитами, ИИ упорно цеплялся за ESPHome, усложняя систему и заставляя меня ковырять YAML, когда для подобной комбопанели гораздо логичнее было накатать обычный код в Arduino. Конечно, можно было заставить агента сменить курс и выдать обычный скетч, как это сделали конкуренты, но это вылилось бы в очередные утомительные циклы переписки, отладки и правки архитектурных косяков.

❯ Выбор инструмента зависит от задачи

Когда важна скорость, когда – точность и в чем предназначение каждого ИИ-ассистента

Как я уже говорил, жизнеспособны все три решения, но некоторые требуют значительной доработки напильником. Нельзя сказать, что какой-то один инструмент безоговорочно лучше остальных; скорее сфера встраиваемых систем наглядно обнажает пропасть между ИИ-инструментами, которые просто генерируют строки кода, и теми, которые действительно вникают в суть инженерной задачи. Результат будет зависеть от ваших привычек и от того, какой путь решения вам ближе.

Antigravity выдает отличную скорость и впечатляет, если скормить ему правильный контекст. Codex как будто бы утыкается в самые популярные и задокументированные методы из интернета, даже когда они вообще не к месту. Но когда дело доходит до проекта, где на скромном и слабом железе нужно подружить несколько разных подсистем, – именно неторопливый, вдумчивый и концептуально более простой подход Claude Code дал единственный результат, который я смог залить на плату и запустить с первой попытки.

Может быть интересно:
Перейти ↩

Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале