15 промтов для IoT и Embedded: как общаться с Arduino, ESP32 и Raspberry Pi на языке AI

Введение

Интернет вещей (IoT) и встраиваемые системы (Embedded) перестали быть уделом исключительно инженеров-электронщиков. С появлением мощных и доступных платформ, таких как Arduino, ESP32 и Raspberry Pi, создание умных устройств стало доступно широкому кругу разработчиков, от хобби-энтузиастов до профессиональных команд. Однако, как показывает практика, ключевая сложность в разработке IoT-проектов часто лежит не в аппаратной части, а в написании качественного, эффективного и безопасного кода. Именно здесь на помощь приходят промты — структурированные запросы к большим языковым моделям (LLM), которые позволяют генерировать, отлаживать и оптимизировать код для микроконтроллеров.

Эта статья — не просто список промтов. Это практическое руководство, основанное на реальном опыте разработки IoT-систем и документации производителей (Arduino Official Documentation, Espressif ESP-IDF Programming Guide, Raspberry Pi Documentation). Мы разбили промты на три категории: базовые (для знакомства с платформой), продвинутые (для работы с датчиками и протоколами) и экспертные (для создания production-grade решений). Каждый промт сопровождается примером результата и пояснением, как его адаптировать под свою задачу.

Категория 1: Базовые промты — знакомство с платформой

1. Задача: Настройка среды разработки для Arduino

  • Промт: «Напиши пошаговую инструкцию для новичка по установке Arduino IDE на Windows 11, включая установку драйверов для платы Arduino Uno и настройку порта. Укажи типичные ошибки (например, 'port not found') и способы их решения.»
  • Пример результата:
    > Инструкция:
    > 1. Скачайте Arduino IDE с официального сайта arduino.cc (версия 2.x).
    > 2. Запустите установщик, выберите компоненты (рекомендуется установить драйверы USB).
    > 3. Подключите Arduino Uno через USB-кабель. В Диспетчере устройств (Windows) убедитесь, что плата определилась как 'Arduino Uno (COM3)'.
    > 4. В Arduino IDE выберите: Инструменты → Плата → Arduino Uno, и Инструменты → Порт → COM3.
    > Типичная ошибка: 'Port not found'. Решение: отключите кабель, перезапустите IDE, подключите заново. Если не помогает — проверьте кабель (не все USB-кабели поддерживают передачу данных).

2. Задача: blink-скетч для ESP32

  • Промт: «Сгенерируй код на C++ для ESP32, который заставляет встроенный светодиод на GPIO2 мигать с частотой 1 Гц (500 мс вкл, 500 мс выкл). Добавь комментарии для каждой строки.»
  • Пример результата:
    ```cpp
    // Задаём пин для встроенного светодиода (обычно GPIO2 на ESP32 DevKit)
    const int ledPin = 2;

    void setup() {
    // Устанавливаем пин как выход
    pinMode(ledPin, OUTPUT);
    }

    void loop() {
    digitalWrite(ledPin, HIGH); // Включаем светодиод
    delay(500); // Ждём 500 мс
    digitalWrite(ledPin, LOW); // Выключаем светодиод
    delay(500); // Ждём 500 мс
    }
    ```

3. Задача: Чтение аналогового сигнала с потенциометра на Arduino

  • Промт: «Напиши скетч для Arduino Uno, который читает значение с аналогового входа A0 (потенциометр) и выводит его в Serial Monitor в диапазоне от 0 до 1023. Добавь калибровку: если значение больше 900, выводи предупреждение.»
  • Пример результата:
    ```cpp
    int sensorPin = A0;
    int sensorValue = 0;

    void setup() {
    Serial.begin(9600);
    }

    void loop() {
    sensorValue = analogRead(sensorPin);
    Serial.print("Значение: ");
    Serial.println(sensorValue);

    if (sensorValue > 900) {
    Serial.println("Внимание: значение слишком высокое!");
    }
    delay(100);
    }
    ```

Категория 2: Продвинутые промты — датчики и протоколы

4. Задача: Подключение датчика температуры DHT22 к ESP32

  • Промт: «Создай код для ESP32, который считывает температуру и влажность с датчика DHT22, подключённого к пину GPIO4. Выводи данные в Serial Monitor каждые 2 секунды. Используй библиотеку DHT sensor library by Adafruit. Добавь обработку ошибок (если датчик не отвечает).»
  • Пример результата:
    ```cpp
    #include

    define DHTPIN 4

    define DHTTYPE DHT22

    DHT dht(DHTPIN, DHTTYPE);

    void setup() {
    Serial.begin(115200);
    dht.begin();
    }

    void loop() {
    delay(2000);

    float h = dht.readHumidity();
    float t = dht.readTemperature();

    if (isnan(h) || isnan(t)) {
    Serial.println("Ошибка чтения с DHT!");
    return;
    }

    Serial.print("Влажность: ");
    Serial.print(h);
    Serial.print(" %\t");
    Serial.print("Температура: ");
    Serial.print(t);
    Serial.println(" *C");
    }
    ```

5. Задача: Отправка данных по MQTT с ESP32

  • Промт: «Напиши код для ESP32, который подключается к Wi-Fi, а затем к MQTT-брокеру (например, test.mosquitto.org). Публикуй в топик 'sensor/temperature' случайное число от 20 до 30 каждые 5 секунд. Используй библиотеку PubSubClient. Добавь обработку переподключения.»
  • Пример результата:
    ```cpp
    #include
    #include

    const char ssid = "YourSSID";
    const char
    password = "YourPassword";
    const char* mqtt_server = "test.mosquitto.org";

    WiFiClient espClient;
    PubSubClient client(espClient);

    void setup_wifi() {
    delay(10);
    Serial.println();
    Serial.print("Connecting to ");
    Serial.println(ssid);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    Serial.println("WiFi connected");
    }

    void reconnect() {
    while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    if (client.connect("ESP32Client")) {
    Serial.println("connected");
    } else {
    Serial.print("failed, rc=");
    Serial.print(client.state());
    delay(5000);
    }
    }
    }

    void setup() {
    Serial.begin(115200);
    setup_wifi();
    client.setServer(mqtt_server, 1883);
    }

    void loop() {
    if (!client.connected()) {
    reconnect();
    }
    client.loop();

    float temperature = random(200, 300) / 10.0;
    char tempString[8];
    dtostrf(temperature, 1, 2, tempString);
    client.publish("sensor/temperature", tempString);
    delay(5000);
    }
    ```

6. Задача: Управление реле через веб-интерфейс на ESP32

  • Промт: «Создай код для ESP32, который запускает веб-сервер на порту 80. На главной странице должны быть две кнопки: 'Включить реле' и 'Выключить реле', которые управляют GPIO16. Используй HTML и CSS встроенно в код.»
  • Пример результата: (сокращённый фрагмент)
    ```cpp
    #include
    #include

    const int relayPin = 16;
    WebServer server(80);

    void handleRoot() {
    String html = "

    Управление реле

    ";
    html += "";
    html += "";
    server.send(200, "text/html", html);
    }

    void setup() {
    pinMode(relayPin, OUTPUT);
    // ... настройка Wi-Fi
    server.on("/", handleRoot);
    server.on("/on", { digitalWrite(relayPin, HIGH); server.send(200, "text/plain", "ON"); });
    server.on("/off", { digitalWrite(relayPin, LOW); server.send(200, "text/plain", "OFF"); });
    server.begin();
    }
    ```

7. Задача: Чтение данных с датчика движения PIR

  • Промт: «Напиши скетч для Arduino Uno с датчиком движения HC-SR501 на пине 7. Когда движение обнаружено, зажигай светодиод на пине 13 на 10 секунд. Выводи в Serial Monitor статус 'Motion detected' или 'No motion'.»
  • Пример результата:
    ```cpp
    int pirPin = 7;
    int ledPin = 13;
    int pirState = LOW;

    void setup() {
    pinMode(pirPin, INPUT);
    pinMode(ledPin, OUTPUT);
    Serial.begin(9600);
    }

    void loop() {
    int val = digitalRead(pirPin);
    if (val == HIGH) {
    digitalWrite(ledPin, HIGH);
    if (pirState == LOW) {
    Serial.println("Motion detected");
    pirState = HIGH;
    }
    delay(10000);
    } else {
    digitalWrite(ledPin, LOW);
    if (pirState == HIGH) {
    Serial.println("No motion");
    pirState = LOW;
    }
    }
    }
    ```

8. Задача: Работа с I2C-дисплеем (LCD 1602) на Raspberry Pi

  • Промт: «Напиши Python-скрипт для Raspberry Pi, который выводит текущее время и дату на I2C-дисплей 1602. Адрес дисплея 0x27. Используй библиотеку RPLCD. Добавь обновление каждую секунду.»
  • Пример результата:
    ```python
    from RPLCD.i2c import CharLCD
    import time

    lcd = CharLCD(i2c_expander='PCF8574', address=0x27, port=1, cols=16, rows=2)

    while True:
    current_time = time.strftime("%H:%M:%S")
    current_date = time.strftime("%d.%m.%Y")
    lcd.clear()
    lcd.write_string("Time: " + current_time)
    lcd.cursor_pos = (1, 0)
    lcd.write_string("Date: " + current_date)
    time.sleep(1)
    ```

Категория 3: Экспертные промты — автоматизация и оптимизация

9. Задача: OTA-обновление прошивки на ESP32

  • Промт: «Создай код для ESP32, который поддерживает обновление прошивки по воздуху (OTA) через веб-интерфейс. Используй библиотеку ArduinoOTA. Добавь защиту паролем и вывод статуса в Serial Monitor.»
  • Пример результата:
    ```cpp
    #include
    #include

    void setup() {
    Serial.begin(115200);
    WiFi.begin("SSID", "PASSWORD");
    while (WiFi.status() != WL_CONNECTED) delay(500);

    ArduinoOTA.setPassword("mysecret");
    ArduinoOTA.onStart( { Serial.println("Start OTA"); });
    ArduinoOTA.onEnd( { Serial.println("End OTA"); });
    ArduinoOTA.onProgress( {
    Serial.printf("Progress: %u%%\r", (progress * 100) / total);
    });
    ArduinoOTA.begin();
    }

    void loop() {
    ArduinoOTA.handle();
    // остальной код
    }
    ```

10. Задача: Система мониторинга с Deep Sleep на ESP32

  • Промт: «Напиши энергоэффективный код для ESP32, который каждые 60 минут просыпается, измеряет температуру с DS18B20, отправляет данные через MQTT на сервер, и снова уходит в Deep Sleep. Используй RTC-память для хранения счётчика.»
  • Пример результата: (фрагмент)
    ```cpp
    #include
    #include
    #include
    #include

    define ONE_WIRE_BUS 4

    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);

    RTC_DATA_ATTR int bootCount = 0;

    void setup() {
    ++bootCount;
    // ... Wi-Fi и MQTT
    sensors.requestTemperatures();
    float temp = sensors.getTempCByIndex(0);
    // публикация
    esp_sleep_enable_timer_wakeup(3600 * 1000000);
    esp_deep_sleep_start();
    }
    ```

11. Задача: Парсинг JSON с датчика BME280

  • Промт: «Напиши код для ESP32, который получает данные с датчика BME280 (температура, давление, влажность) и формирует JSON-строку для отправки на сервер. Используй библиотеку ArduinoJson версии 6.»
  • Пример результата:
    ```cpp
    #include
    #include

    Adafruit_BME280 bme;

    void loop() {
    StaticJsonDocument<200> doc;
    doc["temperature"] = bme.readTemperature();
    doc["pressure"] = bme.readPressure() / 100.0F;
    doc["humidity"] = bme.readHumidity();

    char buffer[256];
    serializeJson(doc, buffer);
    Serial.println(buffer);
    // отправка buffer через MQTT или HTTP
    delay(60000);
    }
    ```

12. Задача: Многопоточность на Raspberry Pi (Python)

  • Промт: «Напиши Python-скрипт для Raspberry Pi, который в отдельном потоке читает данные с датчика расстояния HC-SR04 (GPIO 23 и 24), а в основном потоке выводит их на экран. Используй threading и избегай блокировок.»
  • Пример результата: (упрощённо)
    ```python
    import RPi.GPIO as GPIO
    import threading
    import time

    TRIG = 23
    ECHO = 24
    distance = 0
    lock = threading.Lock()

    def measure_distance():
    global distance
    while True:
    GPIO.output(TRIG, True)
    time.sleep(0.00001)
    GPIO.output(TRIG, False)
    while GPIO.input(ECHO) == 0:
    pulse_start = time.time()
    while GPIO.input(ECHO) == 1:
    pulse_end = time.time()
    pulse_duration = pulse_end - pulse_start
    with lock:
    distance = pulse_duration * 17150
    time.sleep(0.5)

    thread = threading.Thread(target=measure_distance)
    thread.daemon = True
    thread.start()

    while True:
    with lock:
    print(f"Distance: {distance:.2f} cm")
    time.sleep(1)
    ```

13. Задача: Интеграция с Telegram-ботом для управления IoT

  • Промт: «Создай код для ESP32, который работает как Telegram-бот (используя UniversalTelegramBot). Бот должен отвечать на команду /temperature текущим значением с датчика DS18B20, а на команду /led_on включать светодиод на GPIO2.»
  • Пример результата: (требуется токен бота)
    ```cpp
    #include
    #include

    const char* botToken = "YOUR_BOT_TOKEN";
    WiFiClientSecure client;
    UniversalTelegramBot bot(botToken, client);

    void handleNewMessages(int numNewMessages) {
    for (int i=0; i<numNewMessages; i++) {
    String chat_id = String(bot.messages[i].chat_id);
    String text = bot.messages[i].text;
    if (text == "/temperature") {
    float temp = readDS18B20(); // ваша функция
    bot.sendMessage(chat_id, "Temperature: " + String(temp) + " C", "");
    } else if (text == "/led_on") {
    digitalWrite(2, HIGH);
    bot.sendMessage(chat_id, "LED is ON", "");
    }
    }
    }
    ```

14. Задача: Логирование данных на microSD-карту

  • Промт: «Напиши скетч для Arduino Uno с модулем microSD (CS на пине 10), который каждые 10 секунд записывает в файл 'data.txt' текущее время (в миллисекундах) и значение с аналогового пина A0, разделённые запятой.»
  • Пример результата:
    ```cpp
    #include

    const int chipSelect = 10;

    void setup() {
    Serial.begin(9600);
    if (!SD.begin(chipSelect)) {
    Serial.println("SD card failed");
    return;
    }
    }

    void loop() {
    File dataFile = SD.open("data.txt", FILE_WRITE);
    if (dataFile) {
    dataFile.print(millis());
    dataFile.print(",");
    dataFile.println(analogRead(A0));
    dataFile.close();
    }
    delay(10000);
    }
    ```

15. Задача: Использование таймера прерываний на ESP32

  • Промт: «Создай код для ESP32, который использует аппаратный таймер для генерации прерывания каждые 100 мкс. В обработчике прерывания инкрементируй счётчик. Выводи значение счётчика в Serial Monitor каждую секунду. Учти, что в прерываниях нельзя использовать delay().»
  • Пример результата:
    ```cpp
    hw_timer_t *timer = NULL;
    volatile uint32_t counter = 0;

    void IRAM_ATTR onTimer() {
    counter++;
    }

    void setup() {
    Serial.begin(115200);
    timer = timerBegin(0, 80, true); // делитель 80, такт 1 МГц
    timerAttachInterrupt(timer, &onTimer, true);
    timerAlarmWrite(timer, 100, true); // 100 мкс
    timerAlarmEnable(timer);
    }

    void loop() {
    static uint32_t lastCounter = 0;
    if (counter != lastCounter) {
    Serial.println(counter);
    lastCounter = counter;
    }
    delay(1000);
    }
    ```

Таблица сравнения платформ для IoT-проектов

Параметр Arduino Uno ESP32 Raspberry Pi 4
Процессор ATmega328P, 16 МГц Xtensa LX6, 240 МГц dual-core Cortex-A72, 1.8 ГГц quad-core
Память (RAM) 2 КБ 520 КБ 2-8 ГБ
Wi-Fi/Bluetooth Нет Встроенные Опционально
Поддержка RTOS Нет FreeRTOS Linux (Raspbian)
Идеальный проект Простые сенсоры, обучение IoT-устройства, MQTT Сервер, обработка данных, AI

Заключение

Промты — это мощный инструмент для ускорения разработки IoT-проектов. Они позволяют не только генерировать готовый код, но и быстро изучать новые библиотеки, протоколы и архитектурные решения. Однако помните: промт — это лишь отправная точка. Всегда адаптируйте сгенерированный код под свою конкретную схему подключения, проверяйте тайминги и, что самое важное, тестируйте на реальном железе. Начните с простого blink-скетча, а затем постепенно переходите к более сложным задачам, таким как OTA-обновления или интеграция с внешними сервисами через API. Если вы хотите углублённо изучить интеграцию IoT-устройств с облачными платформами и системами автоматизации, обратите внимание на практические курсы — например, ASI Biont поддерживает подключение к популярным сервисам через API — подробнее на asibiont.com/courses. Удачи в ваших проектах!

Рекомендации для дальнейшего изучения

← Все статьи

Комментарии

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

Modbus/TCP и ASI Biont: как подключить PLC или RTU к AI-агенту за 5 минут

15 июля 2026

7 промтов для Django: от моделей до REST API — ускоряем бэкенд-разработку

15 июля 2026

Edge AI на ESP32-CAM: как подключить OV2640 к AI-агенту ASI Biont и автоматизировать безопасность без облаков

15 июля 2026

Как выйти на стабильный доход за 2,5 месяца: личный опыт и разбор курса «Фриланс PRO (воронка, переговоры)» на asibiont.com

15 июля 2026

15 промтов для создания React/Next.js приложений: от компонентов до оптимизации

15 июля 2026

Освоение Vue.js и Nuxt в 2026 году: практическое руководство по реактивным интерфейсам, SSR и обучению с ИИ на asibiont.com

15 июля 2026

CISSP — сертифицированный специалист по информационной безопасности: освойте 8 доменов CBK с помощью AI-подготовки в 2026 году

15 июля 2026

Автоматизация SEO-мониторинга с интеграцией Google Search Console и AI-агентом ASI Biont

15 июля 2026

CRM и Salesforce — Управление взаимоотношениями с клиентами: конкурентное преимущество в карьере в 2026 году

15 июля 2026