10 промтов для IoT и Embedded: полный гайд для Arduino, ESP32 и Raspberry Pi

Промты для IoT и Embedded: как ускорить разработку в 2026 году

Разработка встраиваемых систем — это всегда баланс между аппаратными ограничениями и бесконечными возможностями. Когда я начинал работать с Arduino и ESP32, я тратил часы на чтение даташитов и дебаг кода. Сейчас LLM-инструменты позволяют сократить рутину, но только при правильной постановке задачи. В этой подборке я собрал 10 проверенных промтов, которые покрывают типовые задачи IoT-разработчика: от чтения сенсоров до MQTT-автоматизации. Каждый промт снабжён примером вывода и кодом, который можно адаптировать под свой проект.

Категория 1: Базовые промты для работы с железом

1. Инициализация датчика по документации

Когда вы подключаете новый датчик, промт помогает извлечь ключевые параметры из даташита и сгенерировать код инициализации.

Промт:

Ты — инженер Embedded. Напиши код для Arduino Uno для датчика DHT22. Используй библиотеку DHT sensor library от Adafruit. В комментариях укажи, куда подключать проводку, и добавь вывод температуры и влажности в Serial Monitor с интервалом 2 секунды. Код должен быть совместим с Arduino IDE 2.x.

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

#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

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

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Ошибка чтения DHT22");
    return;
  }
  Serial.print("Влажность: "); Serial.print(h); Serial.print("%\t");
  Serial.print("Температура: "); Serial.print(t); Serial.println("*C");
  delay(2000);
}

Этот промт экономит время на поиске примеров и адаптации пинов под конкретную плату.

2. Написание функции-обёртки для сенсора

Промт для создания модульного кода, который легко переиспользовать в разных проектах.

Промт:

Напиши библиотеку для Arduino для датчика HC-SR04 (ультразвуковой). Создай класс Ultrasonic с методами init() и getDistanceCM(). Используй функцию pulseIn. Покажи, как подключить два пина и измерять расстояние в loop(). Комментарии на русском.

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

class Ultrasonic {
  private:
    int trigPin, echoPin;
  public:
    Ultrasonic(int trig, int echo) {
      trigPin = trig;
      echoPin = echo;
      pinMode(trigPin, OUTPUT);
      pinMode(echoPin, INPUT);
    }
    long getDistanceCM() {
      digitalWrite(trigPin, LOW);
      delayMicroseconds(2);
      digitalWrite(trigPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(trigPin, LOW);
      long duration = pulseIn(echoPin, HIGH);
      return duration * 0.034 / 2;
    }
};

Категория 2: Продвинутые промты для ESP32 и IoT-сетей

3. Настройка WiFi и MQTT на ESP32

ESP32 часто используется как IoT-шлюз. Промт генерирует код подключения к WiFi и MQTT-брокеру с обработкой переподключения.

Промт:

Создай прошивку для ESP32 на PlatformIO (Arduino framework). Подключись к WiFi (SSID и пароль в переменных) и MQTT-брокеру broker.emqx.io (порт 1883). Подпишись на топик "/sensor/data" и выводи входящие сообщения в Serial. Реализуй автоматическое переподключение при потере соединения. Используй библиотеки WiFi.h и PubSubClient.h.

Пример результата (фрагмент):

#include <WiFi.h>
#include <PubSubClient.h>

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
const char* mqtt_server = "broker.emqx.io";

WiFiClient espClient;
PubSubClient client(espClient);

void reconnect() {
  while (!client.connected()) {
    if (client.connect("ESP32Client")) {
      client.subscribe("/sensor/data");
    } else {
      delay(5000);
    }
  }
}

void callback(char* topic, byte* payload, unsigned int length) {
  String msg;
  for (int i = 0; i < length; i++) msg += (char)payload[i];
  Serial.println(msg);
}

4. Публикация данных в MQTT с JSON-форматом

Чтобы данные с датчиков уходили в брокер в структурированном виде, нужен промт для JSON-сериализации.

Промт:

Отправь данные с датчика BME280 на ESP32 в MQTT-топик "/home/sensor" в формате JSON: {"temperature":23.4,"humidity":56.7}. Используй библиотеку ArduinoJson.h. Публикуй раз в 30 секунд, при ошибке чтения отправь сообщение с error поле.

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

#include <ArduinoJson.h>

void publishBME() {
  float t = bme.readTemperature();
  float h = bme.readHumidity();
  DynamicJsonDocument doc(256);
  if (isnan(t) || isnan(h)) {
    doc["error"] = "BME280 read failed";
  } else {
    doc["temperature"] = t;
    doc["humidity"] = h;
  }
  char buffer[128];
  serializeJson(doc, buffer);
  client.publish("/home/sensor", buffer);
}

5. Автоматизация полива по расписанию и влажности почвы

Классический сценарий умного дома. Промт генерирует логику управления реле на основе данных с датчика влажности и времени.

Промт:

Разработай систему автополива на ESP32: датчик влажности почвы (например, Capacitive Soil Moisture Sensor) подключен к ADC (GPIO34), реле — на GPIO26. Полив включается, когда влажность < 30%, выключается при 60% или через 10 секунд работы. Добавь защиту от повторного включения в течение 5 минут. Код на PlatformIO, используй millis() для тайминга.

Пример результата (псевдокод):

const int dryThreshold = 30;
unsigned long lastWatering = 0;
bool pumpActive = false;

void loop() {
  int moisture = analogRead(34); // 0-4095, в процентах
  if (moisture < 30 && millis() - lastWatering > 300000 && !pumpActive) {
    digitalWrite(26, HIGH);
    pumpActive = true;
    lastWatering = millis();
  }
  if (pumpActive && (moisture >= 60 || millis() - lastWatering > 10000)) {
    digitalWrite(26, LOW);
    pumpActive = false;
  }
}

Категория 3: Экспертные промты для Embedded-инженеров

6. Оптимизация потребления энергии для батарейных устройств

Для устройств на батарейках критично использовать deep sleep. Промт помогает интегрировать энергосбережение.

Промт:

Перепиши код ESP32 для инициализации датчика BME280 и отправки данных по MQTT с использованием light sleep. После отправки проверь, что ESP32 переходит в режим sleep на 5 минут. Используй esp_sleep_enable_timer_wakeup(). Добавь комментарии о том, что нужно отключить WiFi перед сном и включить после.

Пример фрагмента:

void goToSleep() {
  WiFi.disconnect();
  esp_sleep_enable_timer_wakeup(5 * 60 * 1000000); // 5 минут
  esp_light_sleep_start();
}

Этот промт выводит из цикла чтения документации по power management.

7. Обработка множества датчиков с прерываниями

Когда нужно реагировать на события мгновенно, прерывания незаменимы. Промт для создания системы с несколькими кнопками и датчиками движения.

Промт:

Напиши код для ESP32 с тремя тактильными кнопками (GPIO 13, 14, 15) и датчиком движения PIR (GPIO 27). Используй Interrupt Service Routine (ISR) для каждого входа, установи флаг и обработай его в loop(). Все входы должны иметь подтяжку к GND через INPUT_PULLUP. Выводи в Serial, какая кнопка нажата и когда сработало движение.

Пример кода:

volatile bool motionDetected = false;
volatile int buttonNumber = 0;

void IRAM_ATTR handleButton() {
  buttonNumber = 1;
}

void IRAM_ATTR handleMotion() {
  motionDetected = true;
}

void setup() {
  Serial.begin(115200);
  pinMode(13, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(13), handleButton, FALLING);
  // аналогично для других
}

void loop() {
  if (motionDetected) { Serial.println("Движение!"); motionDetected = false; }
  if (buttonNumber) { Serial.print("Кнопка "); Serial.println(buttonNumber); buttonNumber = 0; }
}

Обрати внимание: внутри ISR используются volatile-переменные и IRAM_ATTR — это требование для ESP32.

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

Raspberry Pi часто становится сервером для сбора данных. Промт генерирует Flask-приложение для отображения данных из MQTT.

Промт:

Создай веб-сервер на Raspberry Pi 4 (Python) с Flask, который подключается к MQTT-брокеру mosquitto (localhost) и отображает последнее значение температуры из топика /home/sensor в реальном времени. Используй paho-mqtt, обновляй страницу через SSE (Server-Sent Events). Добавь HTML-шаблон с анимацией обновления.

Пример кода (фрагмент):

from flask import Flask, render_template, Response
import paho.mqtt.client as mqtt

app = Flask(__name__)
latest_temp = 0

def on_message(client, userdata, msg):
    global latest_temp
    latest_temp = float(msg.payload)

client = mqtt.Client()
client.on_message = on_message
client.connect("localhost")
client.subscribe("/home/sensor")

@app.route('/')
def index():
    return render_template('index.html', temp=latest_temp)

@app.route('/stream')
def stream():
    def generate():
        while True:
            f"data: {latest_temp}\n\n"
            time.sleep(0.5)
    return Response(generate(), mimetype='text/event-stream')

9. Отладка через Remote Debug или логирование в облако

Промт для настройки централизованного логирования с ESP32 через MQTT в ELK или просто в файл на Raspberry Pi.

Промт:

Добавь в существующий код ESP32 функцию logError(String msg), которая отправляет сообщение с уровнем ERROR на топик "/logs", а также печатает в Serial. Включи в сообщение timestamp и свободную память (ESP.getFreeHeap()). 

Пример реализации:

void logError(String message) {
  String logMsg = "[ERROR] " + String(millis()) + " heap=" + ESP.getFreeHeap() + " " + message;
  client.publish("/logs", logMsg.c_str());
  Serial.println(logMsg);
}

Этот подход помогает отлавливать проблемы на реальном устройстве без подключения к компьютеру.

10. Генерация технической документации по проекту

Последний промт — для автоматизации создания README и инструкций по вашему IoT-проекту.

Промт:

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

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

Компонент Пин ESP32
BME280 SDA GPIO21
BME280 SCL GPIO22
Реле GPIO26

Заключение

Эти 10 промтов — не готовые рецепты, а отправные точки. Хороший промт должен содержать контекст (какая плата, какие библиотеки), желаемый результат и ограничения. Я советую сохранить их в свою библиотеку и адаптировать под текущие проекты. По мере развития LLM-инструментов способы взаимодействия будут улучшаться, но умение грамотно ставить задачу остаётся ключевым навыком инженера.

Хотите больше подобных материалов? Подписывайтесь на наш блог — впереди разборы реальных IoT-проектов и гайды по автоматизации разработки.

← Все статьи

Комментарии