10 промтов для IoT и Embedded: прошивки, сенсоры, MQTT и автоматизация на Arduino, ESP32 и Raspberry Pi

Введение

Интернет вещей (IoT) и встраиваемые системы (Embedded) — это не просто тренд, а основа современной автоматизации. Миллионы устройств ежедневно обмениваются данными, управляют освещением, собирают метеоданные и контролируют промышленные процессы. Разработчики на Arduino, ESP32 и Raspberry Pi сталкиваются с рутиной: написание однотипного кода для сенсоров, настройка MQTT, отладка прошивок. Как ускорить работу? Ответ — промты. В этой подборке — 10 проверенных промтов, которые я сам использую в проектах. Они экономят часы и помогают избежать типичных ошибок. Никакой воды — только практика.

1. Генерация базовой прошивки для считывания данных с сенсора

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

Промт: «Напиши код на C++ для Arduino, который считывает температуру и влажность с датчика DHT22 и выводит данные в Serial Monitor каждые 5 секунд. Добавь обработку ошибок при подключении датчика.»

Пример вывода (сокращённо):

#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("%, Температура: "); Serial.print(t); Serial.println("°C");
  delay(5000);
}

Совет: Всегда проверяйте пины в даташите. Для DHT22 используйте библиотеку DHT sensor library от Adafruit — она стабильна и обновляется. Подробнее о библиотеках на asibiont.com/courses.

2. Настройка MQTT на ESP32 для облачной передачи данных

MQTT — стандарт для IoT. Промт ниже генерирует готовый код с подключением к брокеру.

Промт: «Создай код для ESP32 на Arduino IDE, который подключается к Wi-Fi (SSID: MyWiFi, пароль: pass123), затем к MQTT-брокеру broker.hivemq.com на порту 1883. Публикуй топик "sensor/temperature" со случайным значением от 20 до 30 каждые 10 секунд. Используй библиотеку PubSubClient.»

Пример вывода:

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

const char* ssid = "MyWiFi";
const char* password = "pass123";
const char* mqtt_server = "broker.hivemq.com";

WiFiClient espClient;
PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  client.setServer(mqtt_server, 1883);
}

void loop() {
  if (!client.connected()) {
    client.connect("ESP32Client");
  }
  client.loop();
  float temp = random(200, 300) / 10.0;
  char msg[8];
  dtostrf(temp, 1, 1, msg);
  client.publish("sensor/temperature", msg);
  delay(10000);
}

Важно: В реальных проектах используйте локальный брокер (например, Mosquitto) для снижения задержек. HiveMQ — отличный выбор для тестов, но для продакшена рассмотрите AWS IoT Core или VerneMQ.

3. Автоматизация управления реле на Raspberry Pi с веб-интерфейсом

Raspberry Pi часто используется как хаб. Промт создаёт Flask-приложение для управления GPIO.

Промт: «Напиши Python-скрипт для Raspberry Pi с использованием Flask, который включает и выключает светодиод на GPIO 17 через веб-интерфейс. Добавь две кнопки: "Вкл" и "Выкл". Используй библиотеку RPi.GPIO.»

Пример вывода:

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

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

HTML = """
<html>
<body>
<h1>Управление светодиодом</h1>
<a href="/on"><button>Вкл</button></a>
<a href="/off"><button>Выкл</button></a>
</body>
</html>
"""

@app.route("/")
def index():
    return render_template_string(HTML)

@app.route("/on")
def turn_on():
    GPIO.output(17, GPIO.HIGH)
    return "Включено"

@app.route("/off")
def turn_off():
    GPIO.output(17, GPIO.LOW)
    return "Выключено"

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

Примечание: Запускайте скрипт с sudo, если используете RPi.GPIO. Для продакшена добавьте аутентификацию — хотя бы базовую HTTP Basic Auth.

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

Автоматизация безопасности — частая задача. Промт генерирует код для ESP8266.

Промт: «Напиши код для ESP8266, который при срабатывании датчика движения HC-SR501 отправляет сообщение в Telegram через Bot API. Токен бота: 123456:ABCdef, chat ID: 987654321. Подключайся к Wi-Fi: SSID HomeNet, пароль qwerty.»

Пример вывода (сокращённо):

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

const char* ssid = "HomeNet";
const char* password = "qwerty";
const char* botToken = "123456:ABCdef";
const char* chatId = "987654321";

const int pirPin = D1;

void setup() {
  Serial.begin(115200);
  pinMode(pirPin, INPUT);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) delay(500);
}

void loop() {
  if (digitalRead(pirPin) == HIGH) {
    sendMessage("Движение обнаружено!");
    delay(30000); // защита от ложных срабатываний
  }
}

void sendMessage(String msg) {
  WiFiClientSecure client;
  client.setInsecure();
  if (client.connect("api.telegram.org", 443)) {
    String url = "/bot" + String(botToken) + "/sendMessage?chat_id=" + String(chatId) + "&text=" + msg;
    client.print(String("GET ") + url + " HTTP/1.1\r\nHost: api.telegram.org\r\nConnection: close\r\n\r\n");
  }
}

Важно: В production используйте HTTPS с сертификатами. Telegram Bot API поддерживает только SSL. ASI Biont поддерживает подключение к Telegram через API — подробнее на asibiont.com/courses.

5. Логирование данных с SD-карты на Arduino

Для офлайн-сбора данных полезно хранить показания на карте памяти.

Промт: «Напиши скетч для Arduino Uno, который считывает аналоговое значение с A0 (потенциометр) каждую минуту и записывает его в файл data.csv на SD-карту. Используй библиотеку SD.h.»

Пример вывода:

#include <SD.h>
#include <SPI.h>

const int chipSelect = 10;

void setup() {
  Serial.begin(9600);
  if (!SD.begin(chipSelect)) {
    Serial.println("SD-карта не найдена");
    return;
  }
  Serial.println("SD готова");
}

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

Совет: Форматируйте SD-карту в FAT32. Для больших объёмов данных используйте циклический буфер.

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

Обновлять прошивку по воздуху — удобно, когда устройство уже смонтировано.

Промт: «Добавь поддержку OTA (Over-the-Air) в существующий код для ESP32. Используй библиотеку ArduinoOTA. Установи пароль "ota123" и хостнейм "esp32-sensor".»

Пример вывода:

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

const char* ssid = "MyWiFi";
const char* password = "pass123";

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

  ArduinoOTA.setHostname("esp32-sensor");
  ArduinoOTA.setPassword("ota123");
  ArduinoOTA.begin();
}

void loop() {
  ArduinoOTA.handle();
  // ваш основной код
}

Важно: Используйте OTA только в доверенной сети. Для промышленных систем добавьте подтверждение обновления.

7. Парсинг JSON с погодного API на Raspberry Pi

Многие IoT-проекты требуют получения данных из интернета.

Промт: «Напиши Python-скрипт для Raspberry Pi, который делает GET-запрос к OpenWeatherMap API (ключ: test_key, город: Moscow) и выводит текущую температуру и описание погоды. Используй библиотеку requests.»

Пример вывода:

import requests

api_key = "test_key"
city = "Moscow"
url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&units=metric"

response = requests.get(url)
if response.status_code == 200:
    data = response.json()
    temp = data["main"]["temp"]
    desc = data["weather"][0]["description"]
    print(f"Температура: {temp}°C, {desc}")
else:
    print("Ошибка API")

Совет: Для продакшена кешируйте ответы, чтобы не превышать лимиты API (обычно 60 запросов в минуту).

8. Энергосбережение с deep sleep на ESP32

Для автономных датчиков на батарейках критично снижать энергопотребление.

Промт: «Модифицируй код для ESP32, чтобы он просыпался из deep sleep каждые 30 минут, считывал температуру с DS18B20 на GPIO 4, отправлял по MQTT и снова засыпал. Используй библиотеку OneWire.»

Пример вывода (сокращённо):

#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 4
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

void setup() {
  Serial.begin(115200);
  sensors.begin();
  sensors.requestTemperatures();
  float temp = sensors.getTempCByIndex(0);
  // отправка MQTT
  esp_sleep_enable_timer_wakeup(30 * 60 * 1000000); // 30 минут
  esp_deep_sleep_start();
}

void loop() {}

Важно: В deep sleep ESP32 потребляет около 10 мкА, что даёт месяцы работы от батареи 18650.

9. Управление сервоприводом через веб-интерфейс на ESP8266

Дистанционное управление механизмами — частая задача умного дома.

Промт: «Создай веб-сервер на ESP8266, который через HTTP-запросы управляет сервоприводом SG90 на GPIO 2. URL: /servo?angle=90. Используй библиотеку Servo.h.»

Пример вывода:

#include <ESP8266WiFi.h>
#include <Servo.h>

Servo myservo;
const char* ssid = "...";
const char* password = "...";
WiFiServer server(80);

void setup() {
  myservo.attach(2);
  WiFi.begin(ssid, password);
  server.begin();
}

void loop() {
  WiFiClient client = server.available();
  if (client) {
    String request = client.readStringUntil('\r');
    if (request.indexOf("/servo?angle=") != -1) {
      int angle = request.substring(request.indexOf("=") + 1).toInt();
      myservo.write(angle);
    }
    client.println("OK");
  }
}

Совет: Добавьте ограничение угла (0–180) для защиты сервопривода.

10. Шифрование данных перед отправкой на сервер

Безопасность в IoT — не опция, а необходимость.

Промт: «Напиши код для ESP32, который шифрует строку "sensor_data" алгоритмом AES-128 в режиме CBC перед отправкой на сервер. Используй библиотеку mbedtls. Ключ: 0123456789abcdef, IV: fedcba9876543210. Выведи зашифрованные данные в hex.»

Пример вывода:

#include <mbedtls/aes.h>

void encrypt() {
  unsigned char key[16] = "0123456789abcdef";
  unsigned char iv[16] = "fedcba9876543210";
  unsigned char input[16] = "sensor_data";
  unsigned char output[16];

  mbedtls_aes_context aes;
  mbedtls_aes_init(&aes);
  mbedtls_aes_setkey_enc(&aes, key, 128);
  mbedtls_aes_crypt_cbc(&aes, MBEDTLS_AES_ENCRYPT, 16, iv, input, output);

  for (int i = 0; i < 16; i++) {
    Serial.print(output[i], HEX);
  }
  mbedtls_aes_free(&aes);
}

Важно: Никогда не храните ключи в коде. Используйте аппаратный secure element или внешний менеджер секретов.

Заключение

Эти 10 промтов покрывают 80% типовых задач в IoT и Embedded: от считывания сенсоров до безопасной передачи данных. Они экономят время и снижают количество ошибок. Адаптируйте их под свои проекты: меняйте пины, SSID, топики MQTT. Главное — понимать, что делает каждый блок кода. Промты — это трамплин, а не финиш. Экспериментируйте, комбинируйте и автоматизируйте. Удачных прошивок!

← Все статьи

Комментарии

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

Интеграция Banana Pi с AI-агентом ASI Biont: автоматизация на одноплатнике без единой строки кода

14 июля 2026

Telegram Bot Development: как автоматизировать бизнес и заработать на ботах в 2026 году

14 июля 2026

AI-агент оживляет завод: интеграция Modbus RTU (RS-485) с ASI Biont для предиктивного обслуживания

14 июля 2026

Uber не хочет быть «всем для всех»: что на самом деле сказал продакт-директор про отели, роботакси и будущее платформы

14 июля 2026

Курс «Промышленный интернет вещей (IIoT) и системы SCADA»: ваш путь к Индустрии 4.0 в 2026 году

14 июля 2026

ИИ незаметно меняет мнения пользователей в соцсетях: как алгоритмы формируют нашу реальность

14 июля 2026

CKA + CKAD — Kubernetes Administrator & Developer: как подготовиться к сертификации в 2026 году с AI-тьютором

14 июля 2026

Как перестать терять сделки из-за языка: обзор курса «Английский для бизнеса» на asibiont.com

14 июля 2026

Трансформационное лидерство и стратегическое мышление CEO: Программа для основателей на уровне Гарварда, желающих овладеть принятием решений

14 июля 2026