15 промтов для генерации скетчей и отладки прошивок Arduino, ESP32 и Raspberry Pi в IoT-проектах 2026 года

Почему промты стали новым инструментом в арсенале embedded-разработчика

В 2026 году разработка встраиваемых систем уже не мыслится без AI-ассистентов. По данным опроса Stack Overflow Developer Survey 2025, более 70% разработчиков используют AI-инструменты для генерации и отладки кода. Однако для микроконтроллеров есть специфика: ограниченные ресурсы, работа с периферией, временные ограничения. Универсальные промты здесь не работают — нужны точные формулировки, учитывающие архитектуру (AVR, Xtensa, ARM), объём памяти и особенности SDK.

Эта подборка — результат практического опыта авторов asibiont.com и анализа открытых репозиториев на GitHub. Мы отобрали 15 промтов, которые реально экономят часы при работе с Arduino, ESP32 и Raspberry Pi. Каждый промт сопровождается примером результата и пояснениями. Все примеры кода проверены на актуальных версиях фреймворков (Arduino IDE 2.3, ESP-IDF 5.2, Raspberry Pi OS Bookworm).

Базовые промты: генерация кода и работа с периферией

1. Генерация скетча для мигания светодиодом с настройкой таймера

Задача: Быстро создать скетч для Arduino, который мигает светодиодом без использования delay(), чтобы не блокировать другие задачи.

Промт:

Напиши скетч для Arduino Uno (ATmega328P), который мигает светодиодом на пине 13 с частотой 1 Гц, используя millis() вместо delay(). Добавь комментарии на русском, объясняющие логику. Код должен быть оптимизирован по размеру.

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

// Скетч мигания светодиодом без блокировки
const uint8_t LED_PIN = 13;
unsigned long previousMillis = 0;
const long interval = 500; // Полупериод 500 мс

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
    digitalWrite(LED_PIN, !digitalRead(LED_PIN));
  }
  // Здесь можно выполнять другие задачи
}

Пояснение: AI корректно использует беззнаковую арифметику для millis(), избегая переполнения. Такой подход рекомендуется в официальной документации Arduino.

2. Настройка ШИМ на ESP32 через LEDC

Задача: Сгенерировать код для плавного изменения яркости светодиода на ESP32 с использованием аппаратного ШИМ.

Промт:

Напиши код для ESP32 (ESP-IDF 5.2) с использованием LEDC для ШИМ на пине GPIO18. Частота 5000 Гц, разрешение 12 бит. Реализуй плавное увеличение и уменьшение яркости в цикле. Добавь пояснения по выбору частоты и разрешения.

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

#include "driver/ledc.h"

void app_main() {
    ledc_timer_config_t timer = {
        .speed_mode = LEDC_LOW_SPEED_MODE,
        .duty_resolution = LEDC_TIMER_12_BIT,
        .timer_num = LEDC_TIMER_0,
        .freq_hz = 5000,
        .clk_cfg = LEDC_AUTO_CLK
    };
    ledc_timer_config(&timer);

    ledc_channel_config_t channel = {
        .gpio_num = 18,
        .speed_mode = LEDC_LOW_SPEED_MODE,
        .channel = LEDC_CHANNEL_0,
        .timer_sel = LEDC_TIMER_0,
        .duty = 0,
        .hpoint = 0
    };
    ledc_channel_config(&channel);

    while (1) {
        for (int duty = 0; duty < 4096; duty += 100) {
            ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, duty);
            ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
            vTaskDelay(pdMS_TO_TICKS(20));
        }
        for (int duty = 4095; duty >= 0; duty -= 100) {
            ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, duty);
            ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
            vTaskDelay(pdMS_TO_TICKS(20));
        }
    }
}

Пояснение: Промт задаёт конкретные параметры, что исключает догадки. AI правильно использует API LEDC и добавляет задержки через FreeRTOS.

3. Чтение данных с датчика DHT22 на Raspberry Pi Pico

Задача: Получить температуру и влажность с DHT22 на Raspberry Pi Pico (MicroPython).

Промт:

Напиши код на MicroPython для Raspberry Pi Pico, который читает данные с DHT22 (пин GP15) каждые 2 секунды и выводит в консоль. Обработай возможные ошибки таймаута. Используй библиотеку dht.

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

import machine
import dht
import time

sensor = dht.DHT22(machine.Pin(15))

while True:
    try:
        sensor.measure()
        temp = sensor.temperature()
        hum = sensor.humidity()
        print(f"Температура: {temp}°C, Влажность: {hum}%")
    except OSError as e:
        print("Ошибка чтения DHT22:", e)
    time.sleep(2)

Пояснение: AI корректно обрабатывает исключение OSError, которое возникает при сбое связи. Код готов к запуску.

Продвинутые промты: отладка, оптимизация, интеграция

4. Отладка зависания ESP32 при подключении к Wi-Fi

Задача: Найти причину зависания ESP32 при подключении к Wi-Fi в ESP-IDF.

Промт:

Мой ESP32 (ESP-IDF 5.2) зависает при вызове esp_wifi_connect(). Логи показывают "wifi:state: init -> auth (b0)". Предложи пошаговый план отладки: какие функции проверить, какие логи включить, как использовать esp_wifi_set_debug_log(). Дай пример кода для диагностики.

Пример результата:
AI предложит:
1. Увеличить лог Wi-Fi: esp_log_level_set("wifi", ESP_LOG_VERBOSE);
2. Проверить питание: просадки напряжения ниже 3.0 В.
3. Убедиться, что не вызывается esp_wifi_connect() до WIFI_EVENT_STA_START.
4. Пример диагностического кода:

static void wifi_event_handler(void* arg, esp_event_base_t event_base,
                               int32_t event_id, void* event_data) {
    if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) {
        esp_wifi_connect();
    } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) {
        ESP_LOGW(TAG, "Disconnected, retrying...");
        esp_wifi_connect();
    }
}

Пояснение: Промт заставляет AI дать структурированный план, а не просто код. Это ускоряет поиск проблемы.

5. Оптимизация энергопотребления ESP32 для батарейного питания

Задача: Снизить потребление ESP32 до минимального в режиме глубокого сна.

Промт:

Как настроить ESP32 для работы от батареи? Нужно просыпаться раз в час, считывать температуру с DS18B20 и отправлять по MQTT. Опиши шаги: выбор режима сна, отключение периферии, настройка пробуждения по таймеру. Приведи пример кода с использованием esp_sleep_enable_timer_wakeup().

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

#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP 3600

void app_main() {
    // Инициализация датчика и Wi-Fi
    esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
    esp_deep_sleep_start();
}

AI также напомнит отключить Wi-Fi перед сном и использовать esp_wifi_stop().

Пояснение: Промт задаёт конкретные требования, и AI предлагает проверенные методы.

6. Порт кода с Arduino на ESP-IDF

Задача: Перенести скетч Arduino на ESP-IDF.

Промт:

У меня есть скетч Arduino для ESP32, использующий библиотеку Adafruit_SSD1306 для OLED. Как переписать его на ESP-IDF? Какие аналоги библиотек использовать? Покажи пример инициализации I2C и вывода текста.

Пример результата:
AI предложит использовать esp_lcd и ssd1306 компонент из ESP Component Registry. Пример:

#include "ssd1306.h"
#include "esp_lcd_panel_io.h"
// ... инициализация i2c, создание панели, вывод текста через ssd1306_clear() и ssd1306_draw_string()

Пояснение: AI знает о существовании компонентов и даёт ссылки на документацию.

Экспертные промты: работа с периферией и системные вопросы

7. Настройка DMA для АЦП на STM32

Задача: Организовать непрерывный сбор данных с АЦП через DMA.

Промт:

Настрой АЦП1 на STM32F4 для непрерывного преобразования с передачей через DMA в буфер. Частота дискретизации 10 кГц. Используй HAL. Приведи код инициализации и обработчик прерывания DMA.

Пример результата:
AI сгенерирует код с HAL_ADC_Start_DMA() и настройкой Circular mode. Укажет на необходимость калибровки АЦП.

Пояснение: Промт требует конкретный микроконтроллер и частоту, что исключает общие ответы.

8. Создание кастомного драйвера для Linux на Raspberry Pi

Задача: Написать простой символьный драйвер для GPIO на Raspberry Pi.

Промт:

Напиши символьный драйвер Linux для Raspberry Pi 4, который управляет GPIO18 (включить/выключить). Драйвер должен регистрироваться как /dev/my_led. Приведи код модуля ядра и Makefile. Учти особенности ядра 6.6.

Пример результата:
AI предоставит код с register_chrdev, gpio_request, gpio_direction_output. Упомянет про class_create для автоматического создания устройства.

Пояснение: AI учитывает версию ядра и даёт актуальный синтаксис.

9. Отладка I2C на осциллографе: интерпретация сигналов

Задача: Разобрать сигналы I2C при ошибке NACK.

Промт:

У меня на осциллографе видно, что после адреса устройства I2C (0x3C) линия SDA остаётся высокой, а SCL продолжает тактироваться. Что это значит? Как найти причину? Опиши типичные проблемы и методы решения.

Пример результата:
AI объяснит, что NACK означает отсутствие устройства или неверный адрес. Предложит проверить подтягивающие резисторы, питание, адрес.

Пояснение: Промт описывает конкретную ситуацию, и AI даёт диагностическое дерево.

10. Написание unit-тестов для встраиваемого кода

Задача: Протестировать функцию фильтрации АЦП без железа.

Промт:

Напиши unit-тесты на C (фреймворк Unity) для функции скользящего среднего, которая принимает массив uint16_t и возвращает среднее. Функция должна быть независима от железа. Приведи пример мока для АЦП.

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

#include "unity.h"
#include "filter.h"

void test_moving_average(void) {
    uint16_t data[] = {100, 200, 300, 400, 500};
    TEST_ASSERT_EQUAL_UINT16(300, moving_average(data, 5));
}

Пояснение: AI предлагает использовать Unity — популярный фреймворк для embedded.

11. Генерация кода для работы с CAN-шиной на ESP32

Задача: Отправить сообщение по CAN на ESP32 с трансивером MCP2551.

Промт:

Напиши код для ESP32 (ESP-IDF) для отправки CAN-сообщения с ID 0x123 и данными 0xDEADBEEF. Используй встроенный контроллер TWAI. Настрой скорость 500 кбит/с. Приведи схему подключения.

Пример результата:
AI использует twai_transmit() и настраивает twai_general_config_t. Указывает пины GPIO21 (TX) и GPIO22 (RX).

Пояснение: Промт требует конкретный ID и данные, что упрощает тестирование.

12. Оптимизация кода для уменьшения размера прошивки

Задача: Уменьшить размер бинарника для ATmega328P.

Промт:

Мой скетч для Arduino Uno занимает 95% флеша. Как уменьшить размер? Предложи конкретные методы: использование PROGMEM, отключение библиотек, оптимизация компилятора. Дай примеры.

Пример результата:
AI предложит:
- Использовать F() макрос для строк.
- Заменить Serial.print на Serial.write.
- Включить -Os (уже по умолчанию).
- Удалить bootloader, если не нужен.

Пояснение: AI даёт практические шаги с примерами кода.

13. Работа с FreeRTOS на ESP32: создание задач и очередей

Задача: Организовать многозадачность с обменом данными через очередь.

Промт:

Создай две задачи на ESP32: одна читает датчик и отправляет данные в очередь, вторая принимает и выводит в лог. Используй FreeRTOS. Приведи код с xQueueCreate, xTaskCreate и обработкой ошибок.

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

QueueHandle_t queue = xQueueCreate(10, sizeof(float));
xTaskCreate(sensor_task, "Sensor", 2048, NULL, 5, NULL);
xTaskCreate(logger_task, "Logger", 2048, queue, 5, NULL);

Пояснение: AI правильно использует API FreeRTOS и добавляет проверки.

14. Настройка OTA-обновлений для ESP32

Задача: Реализовать обновление прошивки по воздуху.

Промт:

Как реализовать OTA-обновление на ESP32 через HTTP-сервер? Напиши код с использованием esp_https_ota. Опиши процесс разбиения флеша и отката при ошибке.

Пример результата:
AI приведёт пример с esp_https_ota() и объяснит разделы ota_0, ota_1. Упомянет про esp_ota_mark_app_valid_cancel_rollback().

Пояснение: Промт требует конкретный метод, и AI даёт рабочий пример.

15. Генерация документации для проекта на Doxygen

Задача: Автоматически создать документацию по коду.

Промт:

Сгенерируй комментарии Doxygen для функций в файле main.c (приведён ниже). Опиши параметры, возвращаемые значения, примеры использования. Учти стиль для встраиваемых систем.

Пример результата:
AI добавит блоки /** ... */ с @param, @return, @brief.

Пояснение: Промт экономит время на рутинном документировании.

Заключение

Промты для embedded-разработки — это не просто генерация кода, а способ делегировать рутину и сосредоточиться на архитектуре. Главное правило: чем конкретнее запрос (микроконтроллер, версия SDK, параметры), тем полезнее ответ. Используйте эти шаблоны как основу, адаптируя под свои задачи. Помните, что AI не заменяет чтение даташитов и отладку на железе, но значительно ускоряет путь от идеи до прототипа.

Попробуйте применить хотя бы три промта из этой подборки в своём следующем проекте — и вы заметите, как освободится время для более творческих задач. Делитесь своими находками в комментариях.

← Все статьи

Комментарии

Читайте также

Как Low-Code и No-Code платформы меняют бизнес: обзор Bubble, Airtable, Make и n8n на курсе Asibiont

21 июля 2026

Интеграция ESP32-CAM (OV2640) с AI-агентом ASI Biont: распознавание лиц на Edge AI и автоматизация умного дома

15 июля 2026

14 промтов для Google Sheets: автоматизация отчётности, QUERY, Apps Script и поиск аномалий без Excel

2 октября 2026

Промты для Go и Rust: микросервисы с gRPC и REST API, конкурентность и профилирование без лишних рук

5 октября 2026

Освоение обработки естественного языка (NLP): как курс Asibiont трансформирует ваши навыки ИИ в 2026 году

19 июля 2026

Облачная архитектура (AWS/GCP/Azure): Как перестать переплачивать за облако и освоить оптимизацию затрат

10 октября 2026

React — современный фронтенд: как курс на Asibiont помогает освоить React 19 и Next.js быстрее и эффективнее

4 июля 2026

Интеграция Helm с ИИ-агентом: Автоматизация развертываний Kubernetes с помощью ASI Biont

15 июля 2026

Клинические исследования 2026: как AI и новые регуляции меняют профессию CRA — обзор курса Clinical Research и GCP от Asibiont

27 июля 2026