Гайд · ИИ · ESP32
Дай ESP32 лицо, которое думает
ESP32 не потянет большую языковую модель — но станет идеальным фронтендом для неё. Чип принимает вопрос, размещённая модель думает, а лицо-робот реагирует на всём пути: слушает → размышляет → говорит → готово. Вот архитектура, единственное важное правило безопасности и приём, что всё связывает.
Схема: ESP спереди, модель сзади
Не пытайся крутить ИИ на самом чипе. Выигрышное разделение простое: ESP32 держит интерфейс — принимает ввод (текст, кнопку, позже микрофон), показывает, что происходит, и рисует ответ — а размещённая модель делает язык. Между ними — крошечный сервер под твоим контролем. Запрос уходит в одну сторону и возвращается:
ты пишешь → ESP32 → твой прокси → LLM → ответ + настроение → лицо ESP32 Всё, что видит и трогает пользователь, живёт на ESP и отдаётся живым веб-дашбордом — так у «агента» есть тело задолго до голоса.
Правило одно: ключ API никогда не касается ESP
Тут чаще всего ошибаются. Никогда не зашивай ключ LLM в прошивку. Любой, кто снимет
.bin с флеша, прочитает его — см.
где ESP32 хранит данные — да и микроконтроллер всё равно не может
безопасно «пинить» ротируемую TLS-цепочку вендора. Вместо этого подними тонкий прокси
(Cloudflare Worker, маленький Node-роут), который держит секрет. ESP зовёт твой URL с обычным
сообщением; прокси добавляет ключ, зовёт модель и возвращает маленький JSON. Это примерно пятнадцать
строк — и заодно позволяет менять модели, ставить лимиты и кэш, не перепрошивая ни одного устройства.
Лицо — это машина состояний
Вот приём, от которого всё оживает: у сетевого запроса есть состояния — отправка, ожидание, пришёл-ответ, ошибка — и они один-в-один ложатся на выражения. Ты не описываешь прогресс текстом; лицо и есть прогресс-бар. Ставишь одну связанную переменную — и отданное лицо (и любой экран на устройстве) следует за ней по WebSocket:
mood = FACE_LISTENING; // спросили
mood = FACE_PONDERING; // передали модели
reply = askAgent(msg); // вызов прокси
mood = FACE_SPEAKING; // ответ пришёл
mood = replyMood; // осесть в настроение самой модели Последняя строка — самая интересная: пусть модель сама выберет настроение. Попроси её закончить ответ индексом настроения — и лицо отразит содержание ответа, а не только «трубопровод»: довольное, неуверенное, извиняющееся. У лица десятки состояний на выбор (собраны и превью в BoardLab); агенту, чтобы казаться живым, хватает горстки.
Кто что делает
| Слой | Где крутится | Задача |
|---|---|---|
| Лицо + UI | на ESP32 | принять ввод, показать состояние, нарисовать ответ |
| Прокси | твой сервер / Worker | держать ключ, звать модель, формировать JSON |
| Модель | в облаке | понять, ответить, выбрать настроение |
Держи границу чистой — и каждый кусок остаётся заменяемым: меняешь модель в прокси, перекрашиваешь лицо в прошивке, и одно не трогает другое.
Куда двигаться дальше
Текст в браузере — простейший фронтенд, но тот же пайплайн так же примет кнопку или микрофон — меняешь ввод, машину состояний оставляешь. Добавь правильное радио и источник питания — и говорящее лицо станет настоящим устройством на полке. Полный скетч (вместе с контрактом прокси) идёт примером AI-Agent в репозитории RisalDash.
Сначала тело? Полный живой дашборд — лицо, датчики, управление — в пару строк C++.
Лицо агента вживую
Несколько состояний из тех, что ведёт этот пайплайн — анимируются сами.