Агент уверенно врёт про ваш микроконтроллер. Я это починил
ИИ выдаёт аккуратный код. Компилируется с первого раза, заливается без ошибок. Но экран показывает цветной шум.
И код тут ни при чём. У платы панель на 172×320 пикселей живёт в окне 240 пикселей контроллера, цвет надо инвертировать, а данные отдавать big-endian иначе вместо картинки правдоподобно выглядящий мусор. Этого нет ни в одном туториале: это припрятано в вики производителя между двумя предупреждениями мелким текстом. Модель туда не заглядывала.
Знакомо? Проблема не в том, что LLM глупые. Проблема в том, что знание о конкретной плате размазано тонким слоем по даташиту на 1500 страниц, мануалу на алике на китайском и вечеру отладки, который вы на это потратили. И у модели этого всего нет.
Зоопарк молчаливых фейлов
Пины, которые не те, чем кажутся.
У Waveshare ESP32-C6-LCD-1.47 дисплей и слот microSD сидят на одном SPI - MOSI (GPIO6) и SCLK (GPIO7) общие, разделяет их только chip select. Модель, не знающая этого, спокойно разведёт их по разным шинам и получит конфликт на шине, который будет выглядеть как плохой контакт или дохлая карта. А ещё у слота физически не разведены линии SD_D1/SD_D2 - он работает только в SPI-режиме, SDIO-код из туториала не заведётся никогда.
На классическом ESP32 DevKit надпись D2 на шелкографии у платы Espressif означает GPIO9, а у DOIT-клона - GPIO2. Одни и те же два символа - разные пины. Код из туториала, написанного под «другую» плату, уложит ваш сигнал на GPIO6-11 это шина внутренней флеша, и плата получит boot loop или, что хуже, начнёт тихо насиловать флешку под нагрузкой.
На Raspberry Pi Pico пины GPIO23, 24, 25 и 29 - самые настоящие GPIO в коде, но их физически нет на 40-пиновом разъёме. Проект с ними компилируется, заливается, "работает", а на макетке ничего не происходит, и вы часами ищете проблему в прошивке c красными глазами.
На Arduino Nano пины A6 и A7 подключены только к мультиплексору АЦП - за ними нет порт-регистра. digitalWrite(A6) компилируется и молча не делает ничего.
У ESP32 канал ADC2 полностью занят Wi-Fi, пока радио работает: adc_onsheet_read() просто возвращает timeout. Схема с аналоговыми датчиками на ADC2 «не работает» без единого объяснения - и узнать это из кода невозможно.
Что я сделал
Я начал собирать открытую коллекцию Agent Skills для Claude Code - по одному скиллу на плату. Добавляю пока те что у меня есть в коллекции. Скилл - это каталог с несколькими файлами, который Claude Code подгружает сам, когда вы работаете с соответствующей платой. Внутри - только то знание, которого у модели нет, в трёх слоях:
SKILL.md - выжимка, которая читается всегда: карта пинов, рабочее дерево клоков и правила, предотвращающие дорогие ошибки;
reference/ - глубокие детали, подгружаются по необходимости: полная разведка пинов с альтернативными функциями, кулинарная книга периферии, таблица подводных камней;
template/ - полностью рабочий проект, который собирается и шьётся. Каждая строчка рецептов вытащена из него, а не написана по памяти.
Сейчас в репозитории 8 плат: два STM32, четыре ESP32, классический Arduino Nano на ATmega328P и Raspberry Pi RP2040.
Как этим пользоваться
Склонировать репозиторий
Прилинковать скиллы
Дальше скилл подхватывается сам, когда вы работаете с этой платой в Claude Code (или по явному вызову /stm32f411-blackpill). Можно поставить и в область конкретного проекта просто скопировать каталог в .claude/skills/ внутри проекта с прошивкой.
Для старта нового проекта не надо собирать всё руками. В шаблоне есть готовые примеры на которых удобно собрать проект.
А теперь про длинный проект
Выше - про написание мигалок. Но настоящая боль embedded-разработки проекты длиной в месяцы, где архитектура разрастается: FreeRTOS с кучей задач, свои драйверы, датчики на трёх шинах, и всё это делит между собой пины, таймеры, DMA-каналы и прерывания. Вот тут знание контекста решает больше, чем умение писать код.
Проблема: у ИИ амнезия, а у вас - нет. Каждая сессия с ассистентом начинается с чистого листа. На второй неделе проекта вы уже помните, что таймер 2 отдан под ШИМ подсветки, SPI2 делят дисплей и карта памяти, а A0/A1 заняты под аналоговый фронтенд. Модель - нет. И вы либо заново объясняете это в каждом диалоге (полчаса ритуалов перед каждой задачей), либо узнаёте о конфликте, когда свежесгенерированный драйвер спокойно перехватывает пин у рабочего модуля - и всё выглядит как «само сломалось».
Скилл ломает этот цикл, потому что живёт не в чате, а в репозитории:
1. Знание переживает сессии. Скопируйте скилл в .claude/skills/ внутри проекта и каждая новая сессия, каждая задача, каждый вопрос начинается не с нуля, а с базы знаний о железе. Не «объясните модели карту пинов в двадцатый раз», а «она уже знает».
2. Знание версионируется вместе с кодом. Файлы скилла лежат в git рядом с прошивкой. Нашли новую граблю на шестой неделе проекта дописали правило в скилл, закоммитили (можно кстати агента попросить это сделать). Теперь это знание доступно каждому в команде и каждому новому диалогу. Знание перестаёт жить в голове у одного человека и в логах мессенджеров оно становится артефактом проекта, как код.
3. Знание задаёт контракт с железом. Сложная встроенная архитектура - это в первую очередь разделение конечных ресурсов между модулями. Конфликты за эти ресурсы - особый класс багов: компилятор их не ловит, проявляются они далеко от причины. Скилл фиксирует, что чем занято и модель перестаёт предлагать код, нарушающий раздачу. Фактически это односторонний интерфейс между вашей архитектурой и платой: как API, только про железо.
4. Контекст расходуется осознанно. Скилл устроен как матрёшка: короткая выжимка читается всегда, тяжёлые справочники подключаются только когда задача их касается. На длинных проектах, где в контексте и так много вашего кода, это критично: туда не тащат огромный даташит, туда тащат ответ на конкретный вопрос.
5. Онбординг ускоряется - людей и сессий. Справочник читается как выжимка «всё, что надо знать об этой плате, в порядке вредности». Редкий случай, когда один документ работает одновременно на новичка в команде и на ИИ-ассистента.
Честная оговорка: скилл хранит знание о плате, а не об архитектуре вашего приложения - проектные конвенции живут отдельно, в AGENTS.md репозитория. Но граница проходит ровно там, где должна: скилл - это контракт с железом, и его можно развивать вместе с проектом - скопировали, дописали свои занятые ресурсы и найденные грабли, и база знаний растёт вместе с прошивкой.
Планы и как помочь
Планы расширять количество плат и скиллов в репозитории.
Хочется контрибьюторов. Пайплайн контрибуции описан в репозитории: найдите спеку (даташит), соберите hello world, который реально запускается на железе, и пишите скилл с того, что узнали. Лучшие скиллы - про платы, на которых вы уже обжигались.
https://github.com/alexex1993/mcu-skills (за звезды буду признателен)
Расскажите в комментариях: с какими платами у вас было больше всего боли?







































