Як я змусив мікроконтролер програмувати себе сам. Локальний AI-агент для STM32 (без хмар)
Усім привіт! Embedded-розробка (особливо bare-metal) — це завжди про специфічний біль. Ти годинами куриш даташити, налаштовуєш периферію в STM32Cube, а потім пишеш кілометри рутинного С-коду, просто щоб ініціалізувати якийсь сенсор чи підняти ШІМ.
Якось я запитав себе: а чи можна автоматизувати не просто автодоповнення коду, а весь цикл від ідеї до прошитого заліза? Так з’явився мій проєкт — автономний редактор Hopeok Pro Coder.
Я вирішив не використовувати хмарні API типу ChatGPT чи Claude у самому продакшені через проблеми з контекстом та потенційні ризики для пропрієтарного коду. Замість цього я спроєктував власну локальну архітектуру.
🛠 Як це працює під капотом:
- Локальна LLM та власний Золотий Датасет: Під капотом крутиться спеціалізована модель на базі Qwen (3 мільярди параметрів), яка працює повністю офлайн на відеокарті RTX 3060 12GB. Але «з коробки» така невелика модель не вміє ідеально працювати зі специфікою CubeMX. Тому я спроєктував складну архітектуру донавчання. Я використав Claude як «вчителя», щоб згенерувати власний «золотий датасет» — тисячі вичищених еталонних прикладів STM32-коду з правильним використанням HAL-драйверів. Вже на цій ідеальній базі я зафайнтьюнив свою локальну Qwen. Результат: якість топової хмарної моделі, але локально, швидко і без витрат на токени.
- Планувальник та тікети: Система приймає ТЗ, самостійно декомпонує його на логічні кроки (тікети), аналізує поточну конфігурацію CubeMX і покроково виконує завдання, як справжній Middle-розробник.
- Хірургічна інтеграція: ШІ розуміє структуру проєктів STM32. Він модифікує код виключно у дозволених секціях (
/* USER CODE BEGIN */.../* USER CODE END */), тому генератор CubeMX не затирає зміни при перезбірці проєкту. - Повний цикл (Zero-touch): Після апруву згенерованих патчів система сама викликає компілятор, чекає на
exit code 0і прошиває підключену плату через ST-Link.
🎥 Демонстрація роботи (на відео): Я записав невеличкий тест-драйв на платі NUCLEO-G474RE. На відео видно весь процес: від промпта «Налаштуй блимання світлодіода на PA5 кожні 500мс» до компіляції (0 errors) та реального блимання плати на столі. Усе це зайняло менше 2 хвилин
4 коментарі
Додати коментар Підписатись на коментаріВідписатись від коментарівце було колись, зараз ШІ та купи китайських плат, але поки що потрібно робити дабл чек того що на виході того ШІ
для чого той машинний наратор?
а він зможе:
«зроби розпіновку та HAL для RMII для ETH PHY чіпа драйвера якого нема в підтримці NuttX»?
Привіт! Дякую за коментар та влучні питання 🤝
Щодо «дабл чеку» — абсолютно погоджуюся! Сліпо довіряти ШІ в bare-metal не можна. Саме тому в системі реалізований локальний компілятор: ШІ не просто генерує текст, а сам компілює його і перевіряє на відсутність помилок. Фінальне рев’ю логіки, звісно, залишається за людиною.
Стосовно машинного наратора — тут все прозаїчно. Для озвучки я використав сервіс ElevenLabs. Хотів зробити максимально чисте і зрозуміле демо, де голос звучить рівно і фокус залишається виключно на архітектурі та роботі заліза.
Щодо задачі з RMII, ETH PHY та NuttX — це крутий челендж! Відповім чесно: прямо зараз, «з коробки», моя модель це не зробить. Причина в тому, що я файнтьюнив Qwen 3B на своєму датасеті, який зараз заточений суто під HAL-драйвери та архітектуру STM32Cube. Але краса підходу з RAG та локальним датасетом у тому, що систему можна донавчити. Якщо згодувати їй еталонну документацію по NuttX та приклади імплементації кастомних драйверів — вона зможе генерувати цей специфічний код. Нарощування бази знань — це якраз мій наступний етап.
ШІ без інженера такий драйвер не напише, дива не буває. Але ШІ, яким керує спеціаліст, що знає, як працює RMII і як читати мануали — зробить це легко. Я використовую нейромережі не для того, щоб вони думали замість мене, а для того, щоб вони виконували рутину за моєю логікою.
> А машинна озвучка — це просто ефективний інструмент презентації. Давайте оцінювати технічний результат (працююче залізо), а не обгортку."
Усім привіт! 👋 Дякую редакції DOU за публікацію.
Радий поділитися цим концептом із ком’юніті. Ідея автономного AI-агента для «заліза» виникла з бажання мінімізувати рутину при налаштуванні периферії і сфокусуватися на архітектурі. Звісно, це лише версія 1.0, і попереду ще багато роботи з оптимізації роботи пам’яті моделі та підтримки складніших протоколів.
Буду радий відповісти на будь-які ваші технічні запитання щодо архітектури, підготовки датасету або взаємодії з CubeMX. Як вважаєте, чи скоро подібні асистенти стануть стандартом в embedded-розробці, як це зараз відбувається у веб-індустрії? Діліться думками!