Промты для 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-проектов и гайды по автоматизации разработки.
Комментарии