LLM уверенно врёт про ваш микроконтроллер. arduino.. arduino. Claude.. arduino. Claude. esp32.. arduino. Claude. esp32. llm.. arduino. Claude. esp32. llm. MCU.. arduino. Claude. esp32. llm. MCU. pi pico.. arduino. Claude. esp32. llm. MCU. pi pico. skills.. arduino. Claude. esp32. llm. MCU. pi pico. skills. stm32.. arduino. Claude. esp32. llm. MCU. pi pico. skills. stm32. искусственный интеллект.. arduino. Claude. esp32. llm. MCU. pi pico. skills. stm32. искусственный интеллект. Программирование микроконтроллеров.

Embedded-development (или разработка встраиваемых систем) – это такая сфера, где паяльник и IDE находятся ближе всего. Естественно, туда пришёл ИИ: попросишь модель написать прошивку – выдаёт аккуратный код. Компилируется с первого раза, заливается без ошибок. Но внезапно, экран показывает цветной шум.

И код тут ни при чём. Внутри этого дисплея стоит контроллер ST7789, рассчитанный на матрицу 240×320, а стекло на плате обрезанное, 172×320: тот же чип, но видимые пиксели занимают только центральную часть его памяти. Поэтому драйвер обязан смещать область записи на 34 пикселя – без этого картинка уезжает вбок, треть контента уходит за край стекла, а с другого края лезет мусор. Плюс панель требует инверсии цвета и порядок от старшего к младшему байту. Этого нет ни в одном туториале: это припрятано в вики производителя между двумя предупреждениями мелким текстом. Модель туда не заглядывала.

Знакомо? Проблема не в том, что LLM глупые. Проблема в том, что знание о конкретной плате размазано тонким слоем по даташиту на стопицот страниц, мануалу на алике на китайском и вечеру отладки, который вы на это потратили. И у модели этого всего нет.

И как видите: плат на текущий момент целый зоопарк

И как видите: плат на текущий момент целый зоопарк

Зоопарк молчаливых фейлов

  • У Waveshare ESP32-C6-LCD-1.47 дисплей и слот microSD сидят на одном SPI – MOSI (GPIO6) и SCLK (GPIO7) общие. Модель, не знающая этого, спокойно разведёт их по разным шинам и получит конфликт на шине, который будет выглядеть как плохой контакт или дохлая карта памяти.

  • На Raspberry Pi Pico пины GPIO23, 24, 25 и 29 – самые настоящие GPIO в коде, но их физически нет на 40-пиновом разъёме. Проект с ними компилируется, заливается, “работает”, а на макетке ничего не происходит, и вы часами ищете проблему в прошивке c красными глазами.

  • У ESP32 канал ADC2 полностью занят Wi-Fi, пока радио работает просто возвращает таймаут. Схема с аналоговыми датчиками на ADC2 не работает без единого объяснения – и узнать это из кода невозможно.

  • Частота на 100 МГц (нужно 96 МГц) молча убивает USB самого STM32F411, а HAL_Delay() вешает плату, потому что кто-то должен был вручную определить SysTick_Handler – но об этом почти нигде не написано.

    И много чего ещё…

Как это решать?

Я начал собирать открытую коллекцию скиллов для Claude Code – по одному скиллу на плату. Добавляю пока те, что у меня есть у меня коллекции (на фото выше). Скилл – это каталог с несколькими файлами, который Claude Code подгружает сам, когда вы работаете с соответствующей платой. Внутри только то знание, которого у модели нет, в трёх слоях:

  • SKILL.md – выжимка, которая читается всегда: карта пинов, характеристика чипа и правила, предотвращающие дорогие ошибки;

  • reference/ – глубокие детали, подгружаются по необходимости: полная разводка пинов с альтернативными функциями, периферия, таблица подводных камней;

  • template/ – полностью рабочий проект, который собирается и шьётся. Каждая строчка вытащена из него, а не написана по памяти.

По сути, это проблема нехватки контекста. Агент неплохо знает семейство микроконтроллеров – даташиты у него есть, но про вашу конкретную плату не знает ничего: как разведены пины, какое тактирование реально заводится, какие вызовы HAL молча не работают. Идея репозитория: собрать это знание – из даташитов, вики вендора и самостоятельной отладки на живом железе и запаковать в скиллы для агентов. Web Search MCP частично спасает, но гуглить на каждый чих – это сжечь контекст, а в довесок ещё и наловить туториалов для соседней ревизии платы.

Сейчас в репозитории 8 плат: два STM32, четыре ESP32, классический любимый всеми Arduino Nano на ATmega328P и Raspberry Pi RP2040.

Как этим пользоваться

git clone https://github.com/alexex1993/mcu-skills.git
cd mcu-skills
./scripts/install.sh --list
./scripts/install.sh stm32f411-blackpill

Дальше скилл подхватывается сам, когда вы работаете с этой платой в 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 или мигалку, реально запускаемую на железе, и пишите скилл с того, что узнали (или попросите агента написать). Лучшие скиллы – про платы, на которых вы уже обжигались.

Автор: Alexex14

Источник