Нейросеть для Arduino: как писать скетчи с ИИ и не сжечь плату

Модель может набросать скетч, но не видит вашу схему. Показываем, как описать плату, проверить код до заливки и отладить по выводу Serial.

5 мин · · разработка · модели

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

Что модель знает, а что придумывает

Типовые конструкции вроде pinMode, digitalRead, millis(), Serial и вызовов популярных библиотек встречаются в открытом коде часто, а вот деталей вашего проекта модель не знает. Слабые места:

  • Номера пинов. Если вы не назвали плату, модель выберет «типовые» пины, которые у вашей платы могут отсутствовать или иметь особую функцию.
  • Названия и версии библиотек. Возможны выдуманные имена или функции, которых нет в вашей версии библиотеки.
  • Напряжения и токи. Модель может подключить к пину нагрузку, которую он не вытянет, или соединить 5 В логику с 3,3 В платой.
  • Память. На маленьких платах (например, Uno с 2 КБ оперативной памяти) ненужные String и большие массивы приводят к нестабильной работе.

Как описать задачу

Чем точнее входные данные, тем меньше выдумок. В запрос включайте:

  1. Плату: Arduino Uno, Nano, Mega, ESP32 и т.д. Это определяет логические уровни и доступные пины.
  2. Схему подключения: какой компонент на каком пине, подтяжки, резисторы.
  3. Библиотеки: какие вы готовы использовать (или «без внешних библиотек»).
  4. Поведение: что должно происходить, при каких условиях, как часто.
  5. Ограничения: «без delay()», «не использовать String», «вывод отладки в Serial на 115200».

Шаблон запроса

bash
Плата: Arduino Uno (ATmega328P, логика 5 В).
Подключено:
- кнопка между пином 2 и GND, используем INPUT_PULLUP;
- светодиод на пине 9 через резистор 220 Ом на GND.
Задача: по нажатию кнопки переключать светодиод.
Требования:
- антидребезг без delay(), через millis();
- печатай в Serial (115200) состояние светодиода;
- без внешних библиотек;
- экономь память: строки через F().
Не добавляй пины и компоненты, которых нет в списке. Если данных не хватает, задай вопрос.

Пример результата

bash
const uint8_t BUTTON_PIN = 2;
const uint8_t LED_PIN = 9;
const unsigned long DEBOUNCE_MS = 30;

bool ledOn = false;
bool lastReading = HIGH;
bool stableState = HIGH;
unsigned long lastChange = 0;

void setup() {
  Serial.begin(115200);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);
  Serial.println(F("Ready"));

Скетч простой, поэтому его можно проверить глазами. Для более сложного кода понадобится система проверок.

Как проверить код до заливки в плату

  1. Компиляция. В Arduino IDE нажмите «Проверить» (Verify) или используйте arduino-cli compile --fqbn arduino:avr:uno ВашСкетч для Uno. Это ловит синтаксис и несуществующие функции. Для других плат нужен другой --fqbn, его подскажет документация arduino-cli.
  2. Сверка пинов. Сопоставьте каждую константу с вашей схемой. Особенно у ESP32 и плат с ограничениями на некоторые пины.
  3. Сверка библиотек. Название и версию библиотеки проверьте в менеджере библиотек. Если модель использует функцию, которой нет в документации библиотеки, значит, она её придумала.
  4. Проверка электрики до питания. Убедитесь в таких вещах:
    • у светодиода есть токоограничивающий резистор;
    • ток с пина не превышает допустимый для вашей платы (сверяйтесь с документацией на микроконтроллер: нагрузки вроде моторов и реле питайте не напрямую с пина, а через драйвер или транзистор);
    • сигналы 5 В не подаются на входы 3,3 В платы;
    • индуктивные нагрузки (реле, моторы) защищены диодом.
  5. Первый запуск без нагрузки. Сначала проверяйте логику по Serial, а потом подключайте мощные компоненты.

Эти пункты не заменяет ни одна модель: именно здесь «сжигаются» платы.

Как отлаживать по Serial

Типовой цикл отладки с моделью:

  1. Попросите модель добавить в код вывод ключевых значений: состояние пинов, показания датчика, время.
  2. Залейте скетч и откройте монитор порта на той же скорости, что в Serial.begin.
  3. Скопируйте вывод вместе с описанием того, что ожидали увидеть, и отправьте модели.
  4. Попросите назвать две-три гипотезы и способ проверки каждой, а не сразу переписывать код.

Пример запроса: «Вот скетч и вывод Serial. Светодиод переключается дважды за одно нажатие. Предложи причины и как проверить каждую». Так вы получите диагностику, а не случайную правку.

Если модель поддерживает картинки (из каталога Zukko, например, claude-sonnet-5-5), можно приложить фото собранной схемы. Но ошибки в чтении проводов возможны, поэтому описание словами всё равно обязательно.

Какая модель и сколько это стоит

Для скетчей на 100–200 строк контекст небольшой. Допустим, запрос с описанием и кодом занимает 1 500 токенов, ответ — 1 200. Цены Zukko на 18 октября 2026, $ за 1M токенов (вход / выход):

  • claude-sonnet-5-5 (0.4 / 2): 1 500 × 0.4 / 1 000 000 + 1 200 × 2 / 1 000 000 = $0.0006 + $0.0024 = $0.003
  • gpt-6.1-sol (0.27 / 1.32): $0.000405 + $0.001584 = $0.001989
  • deepseek-v4.1-flash (0.013 / 0.038): $0.0000195 + $0.0000456 = $0.0000651

Пять итераций отладки на claude-sonnet-5-5 обойдутся примерно в $0.015, если не накапливать длинную историю. Какая модель лучше знает Arduino, мы не утверждаем: возьмите две-три и проверьте на своих скетчах. Подсказки по составлению запросов есть в статьях 10 промптов для программиста и few-shot промптинг: пример вашего прежнего скетча в запросе помогает сохранить стиль.

Отправка запроса из Python

bash
from openai import OpenAI

client = OpenAI(base_url="https://api.zukko.pro/v1", api_key="fetch_ваш_ключ")

prompt = open("prompt.txt", encoding="utf-8").read()

response = client.chat.completions.create(
    model="claude-sonnet-5-5",
    messages=[
        {"role": "system", "content": "Ты помогаешь писать скетчи Arduino. Не придумывай пины и библиотеки."},
        {"role": "user", "content": prompt},
    ],
)
print(response.choices[0].message.content)

Формат запроса описан в документации по chat completions. Ключ создаётся в кабинете, баланс пополняется от $1. Из России баланс пополняется через СБП (к сумме добавится 8,5% комиссии платёжной страницы), MasterCard или криптовалютой.

Частые вопросы

Можно ли доверять скетчу, который написала нейросеть?

Как черновику, да. Перед заливкой скомпилируйте код, сверьте пины и библиотеки со схемой и проверьте электрику. Первый запуск лучше проводить без мощной нагрузки.

Какую нейросеть выбрать для программирования микроконтроллеров?

Универсального ответа нет. Для небольших скетчей может хватить недорогой модели, а сложную логику (прерывания, несколько устройств на шине) имеет смысл попробовать на более сильной. Решает тест на ваших задачах.

Что делать, если модель использует несуществующую библиотеку?

Проверьте название в менеджере библиотек. Если библиотеки нет, попросите переписать без неё или назвать альтернативу и сверьте с документацией библиотеки.

Подойдёт ли это для ESP32 и других плат?

Да, но указывайте плату явно: у ESP32 другие логические уровни (3,3 В), распределение пинов и ограничения на отдельные пины.

zukko

Платите в 25×
меньше

за Claude Code & ChatGPT

Один ключ fetch_* и base URL api.zukko.pro — в Cursor, Claude Code, Codex и любом SDK.