10 промтов для IoT и Embedded: Arduino, ESP32, Raspberry Pi — как ускорить разработку

10 промтов для IoT и Embedded: Arduino, ESP32, Raspberry Pi — как ускорить разработку

Встраиваемые системы и Интернет вещей (IoT) — одни из самых быстрорастущих направлений в технологиях. Согласно отчёту IoT Analytics (2025), количество подключённых IoT-устройств в мире превысило 18 миллиардов, и к 2028 году ожидается рост до 25 миллиардов. Разработчики embedded-систем постоянно сталкиваются с задачами по чтению данных с сенсоров, настройке MQTT-брокеров, оптимизации кода для ESP32 и Raspberry Pi. Но как автоматизировать рутинные процессы? Ответ — правильно составленные промты для AI-ассистентов, которые помогают генерировать код, отлаживать скетчи и проектировать архитектуры. В этой подборке — 10 проверенных промтов, которые сэкономят часы работы. Каждый промт сопровождается примером и кодом, чтобы вы могли сразу применить его в своём проекте.

Базовые промты для работы с Arduino и сенсорами

1. Генерация скетча для чтения данных с датчика DHT22

Задача: Создать код для считывания температуры и влажности с сенсора DHT22 на Arduino Uno.
Промт: Напиши скетч для Arduino Uno на C++ с использованием библиотеки DHT.h. Подключи датчик DHT22 к пину 2, считывай температуру и влажность каждую секунду и выводи в Serial Monitor. Добавь обработку ошибок, если датчик не отвечает.
Пример результата:

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

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

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

Этот код использует официальную библиотеку DHT от Adafruit (источник: adafruit.github.io/DHT-sensor-library). Он надёжен и включает проверку состояния сенсора.

2. Настройка MQTT-клиента на ESP32

Задача: Подключить ESP32 к Wi-Fi и отправлять данные по протоколу MQTT.
Промт: Создай скетч для ESP32 на C++ с использованием библиотеки PubSubClient. Подключись к Wi-Fi (SSID: "MyWiFi", пароль: "pass123"), затем к MQTT-брокеру по адресу test.mosquitto.org на порт 1883. Публикуй строку "Hello from ESP32" в топик "test/topic" каждые 5 секунд.
Пример результата:

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

const char* ssid = "MyWiFi";
const char* password = "pass123";
const char* mqtt_server = "test.mosquitto.org";

WiFiClient espClient;
PubSubClient client(espClient);

void setup_wifi() {
  delay(10);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }
}

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

void loop() {
  if (!client.connected()) {
    client.connect("ESP32Client");
  }
  client.loop();
  client.publish("test/topic", "Hello from ESP32");
  delay(5000);
}

MQTT — стандарт для IoT (подробнее в спецификации OASIS MQTT 3.1.1). Этот пример использует публичный брокер, но для продакшена лучше использовать локальный брокер, например, Mosquitto.

3. Чтение аналогового сигнала с потенциометра на Raspberry Pi

Задача: Получить значение напряжения с аналогового входа через MCP3008 на Raspberry Pi.
Промт: Напиши Python-скрипт для Raspberry Pi, который использует библиотеку spidev для чтения данных с АЦП MCP3008 по SPI. Прочитай значение с канала 0, преобразуй его в напряжение (от 0 до 3.3В) и выведи в консоль.
Пример результата:

import spidev
import time

spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 1350000

def read_channel(channel):
    adc = spi.xfer2([1, (8 + channel) << 4, 0])
    data = ((adc[1] & 3) << 8) + adc[2]
    return data

if __name__ == "__main__":
    while True:
        value = read_channel(0)
        voltage = (value / 1023.0) * 3.3
        print(f"Цифровое значение: {value}, Напряжение: {voltage:.2f}В")
        time.sleep(1)

MCP3008 — популярный 8-канальный 10-битный АЦП, описанный в даташите Microchip (mouser.com/datasheet/2/268/21295c-52088). Этот код можно адаптировать под любые аналоговые сенсоры.

4. Управление реле через веб-интерфейс на ESP8266

Задача: Создать веб-сервер для включения/выключения реле по HTTP-запросу.
Промт: Напиши скетч для ESP8266 на C++ с использованием библиотеки ESP8266WebServer. Создай веб-сервер на порту 80 с двумя эндпоинтами: /on (включает реле на пине D1) и /off (выключает). Верни HTTP-ответ 200 с текстом "OK".
Пример результата:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

const char* ssid = "...";
const char* password = "...";
ESP8266WebServer server(80);
const int relayPin = D1;

void handleOn() {
  digitalWrite(relayPin, HIGH);
  server.send(200, "text/plain", "OK");
}

void handleOff() {
  digitalWrite(relayPin, LOW);
  server.send(200, "text/plain", "OK");
}

void setup() {
  pinMode(relayPin, OUTPUT);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
  server.on("/on", handleOn);
  server.on("/off", handleOff);
  server.begin();
}

void loop() {
  server.handleClient();
}

Это основа для умного дома, которую можно дополнить аутентификацией и JSON-ответами.

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

5. Интеграция датчика движения PIR с отправкой уведомления через Telegram

Задача: При обнаружении движения отправлять сообщение в Telegram-бот.
Промт: Создай скетч для ESP32, который подключается к Wi-Fi и использует библиотеку UniversalTelegramBot. При срабатывании датчика PIR (пин 4) отправляет сообщение "Движение обнаружено!" в Telegram-чат. Используй токен бота "123:abc" и ID чата "456".
Пример результата:

#include <WiFi.h>
#include <UniversalTelegramBot.h>

const char* ssid = "...";
const char* password = "...";
const String BOTtoken = "123:abc";
const String CHAT_ID = "456";

WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

const int pirPin = 4;

void setup() {
  pinMode(pirPin, INPUT);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(1000);
  client.setInsecure();
}

void loop() {
  if (digitalRead(pirPin) == HIGH) {
    bot.sendMessage(CHAT_ID, "Движение обнаружено!", "");
    delay(10000);
  }
}

Telegram Bot API — простой способ мониторинга. Однако помните: для продакшена используйте шифрование и ограничьте частоту сообщений.

6. Логирование данных с датчика на SD-карту через Arduino

Задача: Записывать показания сенсора на SD-карту с меткой времени.
Промт: Напиши скетч для Arduino Mega с библиотекой SD. Считывай данные с аналогового датчика (пин A0) каждые 10 секунд и записывай их в файл "log.csv" в формате: миллисекунды,значение. Используй пин CS для SD-модуля на 10.
Пример результата:

#include <SD.h>

const int chipSelect = 10;
const int sensorPin = A0;

void setup() {
  Serial.begin(9600);
  if (!SD.begin(chipSelect)) {
    Serial.println("Ошибка SD-карты");
    return;
  }
  File dataFile = SD.open("log.csv", FILE_WRITE);
  if (dataFile) {
    dataFile.println("Time,Value");
    dataFile.close();
  }
}

void loop() {
  int value = analogRead(sensorPin);
  File dataFile = SD.open("log.csv", FILE_WRITE);
  if (dataFile) {
    dataFile.print(millis());
    dataFile.print(",");
    dataFile.println(value);
    dataFile.close();
  }
  delay(10000);
}

Это пригодится для портативных метеостанций. Используйте файловую систему FAT32 (спецификация SD Association).

7. OTA-обновление прошивки на ESP32

Задача: Настроить беспроводное обновление скетча по Wi-Fi.
Промт: Добавь в скетч для ESP32 поддержку OTA с помощью библиотеки ArduinoOTA. Установи имя хоста "ESP32-OTA" и пароль "admin".
Пример результата:

#include <WiFi.h>
#include <ArduinoOTA.h>

const char* ssid = "...";
const char* password = "...";

void setup() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);

  ArduinoOTA.setHostname("ESP32-OTA");
  ArduinoOTA.setPassword("admin");
  ArduinoOTA.begin();
}

void loop() {
  ArduinoOTA.handle();
}

OTA — важная функция для устройств, к которым сложно получить физический доступ. Официальная документация ArduinoOTA описана на arduino.cc.

8. Управление светодиодной лентой через Bluetooth на Raspberry Pi

Задача: Включать/выключать светодиод через Bluetooth-терминал.
Промт: Напиши Python-скрипт для Raspberry Pi, который использует библиотеку PyBluez. Создай Bluetooth-сервер RFCOMM на канале 1. При получении символа "1" включай светодиод на GPIO 17, при "0" — выключай.
Пример результата:

import bluetooth
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)

server_sock = bluetooth.BluetoothSocket(bluetooth.RFCOMM)
server_sock.bind(("", bluetooth.PORT_ANY))
server_sock.listen(1)

client_sock, address = server_sock.accept()
while True:
    data = client_sock.recv(1024)
    if data == b"1":
        GPIO.output(17, True)
    elif data == b"0":
        GPIO.output(17, False)

PyBluez — стандартная библиотека для Bluetooth в Linux (источник: pybluez.readthedocs.io).

9. Анализ данных с датчика с помощью фильтра Калмана

Задача: Сгладить показания дальномера HC-SR04 с помощью фильтра Калмана.
Промт: Реализуй на Arduino простой фильтр Калмана для измерения расстояния с ультразвукового датчика HC-SR04. Используй Q=0.01, R=0.1. Выводи отфильтрованное значение в сантиметрах.
Пример результата:

#include <NewPing.h>
#define TRIG_PIN 9
#define ECHO_PIN 10
#define MAX_DISTANCE 200
NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);

float kalman_filter(float z) {
  static float x = 0, P = 1, Q = 0.01, R = 0.1, K;
  P = P + Q;
  K = P / (P + R);
  x = x + K * (z - x);
  P = (1 - K) * P;
  return x;
}

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

void loop() {
  delay(50);
  int dist = sonar.ping_cm();
  float filtered = kalman_filter(dist);
  Serial.print("Сырое: "); Serial.print(dist);
  Serial.print(" Фильтр: "); Serial.println(filtered);
}

Фильтр Калмана широко применяется в робототехнике (см. работу R. E. Kalman, 1960). Этот пример — упрощённая версия для одного измерения.

10. Архитектура системы мониторинга с несколькими ESP32 и MQTT

Задача: Спроектировать систему с несколькими датчиками, отправляющими данные на центральный сервер.
Промт: Опиши архитектуру для системы мониторинга температуры в трёх комнатах. Каждая комната имеет ESP32 с датчиком DHT22. Данные отправляются по MQTT на Raspberry Pi, который запускает Node-RED для визуализации. При превышении порога (35°C) отправляется e-mail. Предложи топики MQTT и схему подключения.
Пример результата:
- Топики: home/room1/temperature, home/room1/humidity, аналогично для комнат 2 и 3.
- Архитектура: ESP32 → Wi-Fi → MQTT-брокер (Mosquitto на Pi) → Node-RED → Dashboard + SMTP-узел.
- Код ESP32: использует PubSubClient с разными client_id и топиками (см. промт 2).
- Node-RED: подписывается на home/+/temperature, фильтрует по значению.
Такая система легко масштабируется: добавление новых комнат требует лишь нового ESP32 с уникальным client_id.

Заключение

IoT и embedded-разработка — это постоянная работа с сенсорами, протоколами и ресурсными ограничениями. Правильные промты помогают не только ускорить написание кода, но и избежать типичных ошибок, таких как неправильная инициализация периферии или утечка памяти. Используйте приведённые шаблоны как отправную точку: адаптируйте их под свои датчики, брокеры и платы. Например, замените DHT22 на BME280, или MQTT на CoAP — промты легко модифицируются. Начните с малого: выберите один из базовых промтов, соберите схему на макетной плате и проверьте работоспособность. Это даст вам уверенность для перехода к продвинутым сценариям, таким как OTA-обновления или интеграция с облачными платформами. Удачи в ваших проектах!

← Все статьи

Комментарии

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

Как защитить железку от китайцев: опыт передачи документации и контрактные ловушки

17 июля 2026

Как автоматизировать управление Twitter/X с помощью ИИ-агента: практическое руководство по интеграции ASI Biont

17 июля 2026

Как пройти CE-маркировку без головной боли: обзор курса «CE-маркировка и технические регламенты ЕС — Product Compliance» от Asibiont

17 июля 2026

15 промтов для React Native: компоненты, навигация и работа с API

17 июля 2026

От кода к карьере: почему курс «Блокчейн и Web3» на Asibiont.com — ваш быстрый путь к мастерству

17 июля 2026

Интеграция LoRa/LoRaWAN-устройств с AI-агентом ASI Biont: удалённый мониторинг IoT без кода

17 июля 2026

Patreon прекращает просить AI-ботов не скрепить данные — и начинает их блокировать: урок для всех, кто использует vibe coding

17 июля 2026

Операционная Система на C без знаний C: как разработчики создают ОС с помощью AI в 2026 году

17 июля 2026

Три способа реагировать на проблему (кроме её решения): что говорит новое исследование

17 июля 2026