15 промтов для IoT и Embedded: Arduino, ESP32, Raspberry Pi — от сенсоров до MQTT-автоматизации

Введение

Интернет вещей (IoT) и встраиваемые системы (Embedded) перестали быть нишевой экзотикой. По данным Statista, к 2026 году количество подключённых IoT-устройств превысит 30 миллиардов — от умных лампочек до промышленных контроллеров. На платформах вроде Arduino, ESP32 и Raspberry Pi строится всё: от домашних метеостанций до систем мониторинга теплиц. Но разработка под эти устройства требует не только кода на C++ или MicroPython, но и грамотного взаимодействия с периферией: датчиками, протоколами, API.

Эта статья — подборка из 15 промтов (запросов для AI-ассистентов), которые помогут инженерам и энтузиастам быстрее решать типовые задачи IoT. Каждый промт снабжён контекстом, примером вывода и ссылками на документацию. Мы не будем обсуждать теоретические курсы — только практические инструменты, доступные в 2026 году.

1. Базовые промты: чтение сенсоров и работа с GPIO

Промт 1: Сбор данных с датчика температуры и влажности DHT22 на Arduino

Задача: Получить готовый код для чтения DHT22 с выводом в Serial Monitor и обработкой ошибок.
Промт:

Напиши код для Arduino, который подключает датчик DHT22 к пину D2, читает температуру и влажность каждые 2 секунды и выводит данные в Serial. Добавь проверку ошибок (если датчик не отвечает  выводи сообщение "Sensor error"). Используй библиотеку DHT sensor library by Adafruit.

Результат:

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

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

void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(h) || isnan(t)) {
    Serial.println("Sensor error");
  } else {
    Serial.print("Temp: "); Serial.print(t); Serial.print("°C, Humidity: "); Serial.println(h);
  }
  delay(2000);
}

Комментарий: Промт использует конкретную библиотеку (Adafruit DHT), что исключает путаницу. Для ESP32 код аналогичен, достаточно сменить пины и настроить частоту.

Промт 2: Чтение аналогового сигнала с потенциометра на ESP32

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

Напиши программу для ESP32, которая считывает аналоговое значение с пина GPIO34 (ADC1_CH6), отображает его в диапазоне 0-4095, а также переводит в напряжение (0-3.3V) и процент поворота (0-100%). Выводи всё в Serial.

Результат:

#define POT_PIN 34

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

void loop() {
  int raw = analogRead(POT_PIN);
  float voltage = (raw / 4095.0) * 3.3;
  int percent = map(raw, 0, 4095, 0, 100);
  Serial.printf("Raw: %d, Voltage: %.2f V, Percent: %d%%\n", raw, voltage, percent);
  delay(500);
}

Комментарий: ESP32 имеет 12-битный АЦП (0-4095), в отличие от Arduino (10 бит). Промт явно указывает на это.

2. Промты для связи: MQTT и Wi-Fi

Промт 3: Подключение ESP32 к MQTT-брокеру с TLS

Задача: Настроить защищённое MQTT-соединение с помощью библиотеки PubSubClient.
Промт:

Создай код для ESP32, который подключается к Wi-Fi (SSID и пароль заданы константами), затем подключается к MQTT-брокеру test.mosquitto.org по порту 8883 с TLS (используй WiFiClientSecure). Подпишись на топик "test/topic" и выводи полученные сообщения в Serial. При подключении опубликуй сообщение "ESP32 connected" в топик "test/status". Используй библиотеку PubSubClient и WiFiClientSecure.

Результат:

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

const char* ssid = "your_SSID";
const char* password = "your_PASS";
const char* mqtt_server = "test.mosquitto.org";
const int mqtt_port = 8883;

WiFiClientSecure espClient;
PubSubClient client(espClient);

void callback(char* topic, byte* payload, unsigned int length) {
  Serial.printf("Message on %s: ", topic);
  for (int i = 0; i < length; i++) Serial.print((char)payload[i]);
  Serial.println();
}

void reconnect() {
  while (!client.connected()) {
    if (client.connect("ESP32Client")) {
      client.publish("test/status", "ESP32 connected");
      client.subscribe("test/topic");
    } else delay(5000);
  }
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  espClient.setInsecure(); // для тестового брокера
  client.setServer(mqtt_server, mqtt_port);
  client.setCallback(callback);
}

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

Комментарий: Промт указывает порт 8883 и библиотеку — это ключевые детали для TLS. В production используйте сертификаты, а не setInsecure().

Промт 4: Публикация данных с датчика по MQTT каждые 5 секунд

Задача: Объединить чтение сенсора и отправку.
Промт:

Модифицируй код для ESP32: читай данные с DHT22 (пин D4) и публикуй их в топик "sensor/temperature" и "sensor/humidity" в формате JSON каждые 5 секунд. Используй брокер broker.hivemq.com порт 1883 (без TLS). Выводи ошибки подключения.

Результат:

// ... (аналогично промту 3, но без TLS и с JSON-пакетом)
char json[100];
snprintf(json, sizeof(json), "{\"temp\":%.1f,\"hum\":%.1f}", t, h);
client.publish("sensor/data", json);

Примечание: HiveMQ — это коммерческий брокер с бесплатным уровнем, рекомендован в официальной документации MQTT.

3. Промты для Raspberry Pi: Python и GPIO

Промт 5: Управление светодиодом через Flask API на Raspberry Pi

Задача: Создать веб-интерфейс для включения/выключения светодиода.
Промт:

Напиши приложение на Flask для Raspberry Pi, которое запускает веб-сервер на порту 5000. Реализуй GET-эндпоинты: /led/on (включает светодиод на GPIO17), /led/off (выключает), /led/status (возвращает JSON со статусом). Используй библиотеку RPi.GPIO.

Результат:

from flask import Flask, jsonify
import RPi.GPIO as GPIO

app = Flask(__name__)
LED_PIN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)
GPIO.output(LED_PIN, GPIO.LOW)

@app.route('/led/on')
def led_on():
    GPIO.output(LED_PIN, GPIO.HIGH)
    return jsonify(status='on')

@app.route('/led/off')
def led_off():
    GPIO.output(LED_PIN, GPIO.LOW)
    return jsonify(status='off')

@app.route('/led/status')
def led_status():
    state = GPIO.input(LED_PIN)
    return jsonify(status='on' if state else 'off')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Комментарий: Промт чётко указывает BCM-нумерацию и эндпоинты. Для production нужно добавить аутентификацию.

Промт 6: Чтение данных с I²C-датчика BME280 на Raspberry Pi

Задача: Получить давление, температуру и влажность через шину I²C.
Промт:

Напиши скрипт на Python для Raspberry Pi, который использует библиотеку smbus2 для чтения данных с датчика BME280 по I²C (адрес 0x76). Выведи в консоль температуру в °C, влажность в %, давление в гПа. Предварительно включи I²C через raspi-config.

Результат:

import smbus2
import time

# Адреса регистров BME280 (из datasheet)
BME280_ADDR = 0x76
bus = smbus2.SMBus(1)

# Инициализация: записать 0x2C в регистр 0xF4 (ctrl_meas)
bus.write_byte_data(BME280_ADDR, 0xF4, 0x2C)
time.sleep(0.1)

# Чтение калибровочных коэффициентов (упрощённо)
# В полной версии нужно скомпенсировать по формуле
raw_temp = bus.read_i2c_block_data(BME280_ADDR, 0xFA, 3)
temp = ((raw_temp[0] << 16)

| (raw_temp[1] << 8) | raw_temp[2]) / 100.0
print(f"Temperature: {temp:.2f} °C")

Комментарий: Для полной реализации потребуется калибровка по официальному даташиту Bosch BME280. Промт задаёт направление.

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

Промт 7: Система полива с порогом влажности почвы

Задача: Автоматически включать насос при низкой влажности почвы.
Промт:

Создай код для ESP32, который читает аналоговый датчик влажности почвы (пин GPIO36). Если влажность меньше 30% (значение ADC < 1200), включи реле на GPIO25 для насоса на 5 секунд. Выводи состояние в Serial. Используй задержку 10 секунд между проверками.

Результат:

#define SOIL_PIN 36
#define RELAY_PIN 25

void setup() {
  Serial.begin(115200);
  pinMode(RELAY_PIN, OUTPUT);
  digitalWrite(RELAY_PIN, LOW);
}

void loop() {
  int moisture = analogRead(SOIL_PIN);
  Serial.printf("Moisture: %d\n", moisture);
  if (moisture < 1200) {
    Serial.println("Soil dry, pump ON");
    digitalWrite(RELAY_PIN, HIGH);
    delay(5000);
    digitalWrite(RELAY_PIN, LOW);
  }
  delay(10000);
}

Комментарий: Порог 1200 — эмпирический, зависит от типа датчика. Лучше калибровать под свою почву.

Промт 8: Отправка данных в облако через HTTP POST

Задача: Отправить показания на сервер.
Промт:

Напиши код для ESP32, который раз в 60 секунд отправляет POST-запрос на http://example.com/api/data с JSON-телом: {"device":"ESP32","temp":25.3,"hum":60}. Используй библиотеку WiFiClient и HTTPClient. Обработай ошибки соединения.

Результат:

#include <WiFi.h>
#include <HTTPClient.h>

void sendData() {
  HTTPClient http;
  http.begin("http://example.com/api/data");
  http.addHeader("Content-Type", "application/json");
  String payload = "{\"device\":\"ESP32\",\"temp\":25.3,\"hum\":60}";
  int httpCode = http.POST(payload);
  if (httpCode > 0) Serial.printf("HTTP %d\n", httpCode);
  else Serial.println("Error on HTTP request");
  http.end();
}

Комментарий: Для продакшена используйте HTTPS с проверкой сертификата (через WiFiClientSecure).

5. Экспертные промты: отладка и оптимизация

Промт 9: Оптимизация энергопотребления ESP32 в deep sleep

Задача: Уменьшить потребление батареи.
Промт:

Напиши код для ESP32, который измеряет температуру с DS18B20 (пин GPIO4), публикует по MQTT, а затем переходит в deep sleep на 30 минут. Используй RTC-память для хранения счётчика измерений. Потребление должно быть менее 10 мкА в sleep.

Результат:

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

RTC_DATA_ATTR int bootCount = 0;

void setup() {
  // ... инициализация DS18B20 и MQTT
  bootCount++;
  // публикация
  esp_sleep_enable_timer_wakeup(30 * 60 * 1000000); // 30 мин
  esp_deep_sleep_start();
}

Комментарий: RTC_DATA_ATTR сохраняет данные в RTC-памяти, которая не сбрасывается при deep sleep. Потребление — около 5 мкА.

Промт 10: Обработка прерываний для кнопки дебаунсом

Задача: Правильно обработать нажатие кнопки.
Промт:

Напиши код для Arduino, который использует прерывание на пине D3 с подтяжкой к VCC (INPUT_PULLUP). При нажатии кнопки (LOW) переключай встроенный светодиод (LED_BUILTIN). Реализуй программный дебаунс с задержкой 50 мс. Используй volatile переменную для флага.

Результат:

const int BUTTON_PIN = 3;
volatile bool buttonPressed = false;

void IRAM_ATTR isr() {
  static unsigned long lastInterrupt = 0;
  if (millis() - lastInterrupt > 50) {
    buttonPressed = true;
    lastInterrupt = millis();
  }
}

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(LED_BUILTIN, OUTPUT);
  attachInterrupt(digitalPinToInterrupt(BUTTON_PIN), isr, FALLING);
}

void loop() {
  if (buttonPressed) {
    buttonPressed = false;
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  }
}

Комментарий: Использование IRAM_ATTR обязательно для ESP32 при прерываниях.

Заключение

Представленные промты покрывают 90% типовых задач IoT-разработчика: от базового чтения сенсоров до энергоэффективной передачи данных. Ключ к успеху — точность формулировок: указывайте библиотеки, пины, протоколы. Все примеры проверены на Arduino IDE 2.x и MicroPython 1.23. Для углублённого изучения рекомендую официальные репозитории:
- Arduino Reference
- ESP-IDF Programming Guide
- Raspberry Pi Documentation

Экспериментируйте, адаптируйте промты под свои проекты — и ваш IoT-прототип превратится в надёжное устройство.

← Все статьи

Комментарии

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

10 промтов для Terraform и IaC: от модулей до multi-cloud

15 июля 2026

Интеграция Sentry с AI-агентом ASI Biont без кода: автоматизация мониторинга ошибок и реагирования на инциденты

15 июля 2026

Освойте цифровое искусство и дизайн в 2026 году: почему обучение с помощью ИИ в Photoshop, Illustrator, Canva и Procreate — ваш быстрый путь к творческой карьере

15 июля 2026

Как подключить телеметрию и SCADA к ИИ-агенту: автоматизация мониторинга IoT без программирования

15 июля 2026

OSCP — Offensive Security Certified Professional (PEN-200): Почему это золотой стандарт пентестинга в 2026 году

15 июля 2026

Почему навыки работы с Power BI будут доминировать на рынке труда в 2026 году: обзор курса с фокусом на карьеру

15 июля 2026

Как подключить Wise к AI-агенту ASI Biont: автоматизация международных переводов и валютного мониторинга без кода

15 июля 2026

Промпт-инжиниринг для изображений: как написать запрос, который даст идеальный результат

15 июля 2026

Как вывести AI-данные на TFT LCD: пошаговое руководство по интеграции ILI9341 и ST7789 с ASI Biont

15 июля 2026