ESP32 и ASI Biont: как подключить микроконтроллер к AI-агенту через MQTT и автоматизировать умный дом за минуты
Введение
ESP32 — это, пожалуй, самый популярный микроконтроллер с Wi-Fi и Bluetooth в IoT-сфере. Он стоит около $5, потребляет единицы миллиампер, но при этом способен работать с датчиками, реле, камерами и даже выполнять простые модели машинного обучения на борту (TinyML). Но настоящая сила ESP32 раскрывается, когда его данные начинают анализироваться не в локальном скетче, а передаваться в AI-агента — например, в ASI Biont.
ASI Biont — это AI-агент, который подключается к любому устройству через чат. Вы просто описываете задачу: «Подключись к моему ESP32 по MQTT, читай температуру с DHT22 и включай реле, если температура выше 30°C». AI сам пишет код, выполняет его и начинает управлять оборудованием. В этой статье мы разберём, как именно работает такая интеграция, и покажем конкретный сценарий с кодом.
Почему MQTT — лучший протокол для ESP32 + ASI Biont
ESP32 поддерживает несколько способов связи: HTTP, WebSocket, MQTT, CoAP, а также прямое подключение через COM-порт. Для удалённого управления с AI-агентом, который работает в облаке, MQTT — оптимальный вариант. Вот почему:
| Протокол | Плюсы | Минусы | Применимость для ESP32 + AI |
|---|---|---|---|
| MQTT | Легковесный (2 байта заголовка), асинхронный, pub/sub, QoS, TLS | Требуется брокер (Mosquitto, HiveMQ) | Идеален: AI подписывается на топики ESP32 и публикует команды |
| HTTP/REST | Простой, не требует постоянного соединения | Оверхед, pull-запросы, задержки | Подходит для редких команд, но не для real-time |
| CoAP | UDP-based, ещё легче MQTT | Меньше библиотек, не везде поддерживается | Хорош для сверхнизкого энергопотребления |
| COM-порт (USB/UART) | Прямое соединение, низкая задержка | Физический кабель, не удалённо | Через Hardware Bridge, если ESP32 подключён к ПК |
| WebSocket | Двусторонняя связь, real-time | Держит соединение открытым, больше трафика | Для камер и потоковых данных |
В нашем сценарии используем MQTT. ASI Biont подключается к MQTT-брокеру (например, Mosquitto, запущенному на Raspberry Pi или в облаке) через библиотеку paho-mqtt. AI пишет Python-скрипт, который работает в sandbox-окружении ASI Biont (на сервере Railway). Этот скрипт подписывается на топик, куда ESP32 публикует данные (например, esp32/temperature), и публикует команды в топик esp32/relay.
Сценарий: умный термостат с ESP32 и DHT22
Проблема
У вас есть ESP32 с датчиком DHT22 (температура + влажность) и реле, управляющее обогревателем. Вы хотите, чтобы система автоматически включала обогреватель, когда температура падает ниже 18°C, и выключала при достижении 22°C. Дополнительно — получать уведомления в Telegram при аномалиях (например, влажность > 80% — признак протечки).
Решение с ASI Biont
Вам не нужно писать ни строчки кода для серверной части. Достаточно:
- Настроить ESP32 на отправку данных по MQTT.
- В чате ASI Biont дать команду: «Подключись к MQTT-брокеру mqtt://192.168.1.100:1883, подпишись на esp32/temperature, читай JSON с полями temp, humidity, управляй реле через esp32/relay, отправляй уведомления в Telegram через бота @my_bot с токеном 123:ABC». AI сам сгенерирует и выполнит Python-скрипт.
Код для ESP32 (MicroPython)
Сначала прошивка на ESP32. Используем MicroPython с библиотекой umqtt.simple:
import network
import time
import dht
from machine import Pin
import ujson
from umqtt.simple import MQTTClient
# Настройки Wi-Fi
WIFI_SSID = "MyWiFi"
WIFI_PASS = "password"
# Настройки MQTT
MQTT_BROKER = "192.168.1.100"
MQTT_PORT = 1883
CLIENT_ID = "esp32_01"
TOPIC_PUB = "esp32/temperature"
TOPIC_SUB = "esp32/relay"
# Датчик и реле
dht22 = dht.DHT22(Pin(4))
relay = Pin(5, Pin.OUT)
# Подключение к Wi-Fi
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect(WIFI_SSID, WIFI_PASS)
while not wifi.isconnected():
time.sleep(1)
# MQTT callback для получения команд
def mqtt_callback(topic, msg):
data = ujson.loads(msg)
if "relay" in data:
relay.value(data["relay"])
print("Реле установлено:", data["relay"])
client = MQTTClient(CLIENT_ID, MQTT_BROKER, port=MQTT_PORT)
client.set_callback(mqtt_callback)
client.connect()
client.subscribe(TOPIC_SUB)
# Основной цикл
while True:
try:
dht22.measure()
temp = dht22.temperature()
hum = dht22.humidity()
payload = ujson.dumps({"temp": temp, "hum": hum, "id": CLIENT_ID})
client.publish(TOPIC_PUB, payload)
print("Отправлено:", payload)
client.check_msg() # проверка входящих команд
time.sleep(10)
except OSError as e:
print("Ошибка датчика:", e)
time.sleep(2)
Этот код публикует JSON с температурой и влажностью каждые 10 секунд и слушает команды на включение/выключение реле.
Код для ASI Biont (Python-скрипт, который AI генерирует и выполняет)
Теперь ASI Biont создаёт и запускает скрипт в sandbox-окружении:
import paho.mqtt.client as mqtt
import requests
import json
# Параметры
BROKER = "192.168.1.100"
PORT = 1883
TOPIC_TEMP = "esp32/temperature"
TOPIC_RELAY = "esp32/relay"
TELEGRAM_BOT_TOKEN = "123:ABC"
TELEGRAM_CHAT_ID = "123456"
# Пороги
TEMP_MIN = 18.0
TEMP_MAX = 22.0
HUM_MAX = 80.0
relay_state = 0 # 0 - выкл, 1 - вкл
def on_connect(client, userdata, flags, rc):
print("Подключен к MQTT брокеру")
client.subscribe(TOPIC_TEMP)
def on_message(client, userdata, msg):
global relay_state
try:
data = json.loads(msg.payload)
temp = data["temp"]
hum = data["hum"]
print(f"Получено: temp={temp}, hum={hum}")
# Логика термостата
if temp < TEMP_MIN and relay_state == 0:
client.publish(TOPIC_RELAY, json.dumps({"relay": 1}))
relay_state = 1
print("Включаю реле")
elif temp >= TEMP_MAX and relay_state == 1:
client.publish(TOPIC_RELAY, json.dumps({"relay": 0}))
relay_state = 0
print("Выключаю реле")
# Уведомление о высокой влажности
if hum > HUM_MAX:
msg_text = f"Тревога: влажность {hum}% превышает порог {HUM_MAX}%"
requests.post(
f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage",
json={"chat_id": TELEGRAM_CHAT_ID, "text": msg_text}
)
print("Уведомление отправлено в Telegram")
except Exception as e:
print("Ошибка обработки:", e)
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER, PORT, 60)
# Бесконечный цикл не запускаем - sandbox может иметь таймаут.
# Вместо этого используем loop_start() для асинхронной работы.
client.loop_start()
# Держим скрипт активным 30 секунд (максимум для sandbox)
import time
time.sleep(30)
client.loop_stop()
print("Скрипт завершён")
Этот скрипт:
- Подключается к MQTT-брокеру.
- Получает данные с ESP32.
- Принимает решение включить/выключить реле на основе температуры.
- Отправляет уведомление в Telegram при превышении влажности.
Как это работает в чате ASI Biont
Пользователь пишет в чат:
«Подключись к MQTT-брокеру по адресу 192.168.1.100:1883. Подпишись на топик esp32/temperature, где ESP32 публикует JSON с полями temp и humidity. Если температура ниже 18°C — публикуй в топик esp32/relay команду включения реле: {"relay": 1}. Если выше 22°C — выключай: {"relay": 0}. Если влажность > 80% — отправь мне сообщение в Telegram через бота с токеном 123:ABC в чат 123456.»
AI-агент ASI Biont:
1. Распознаёт намерение (подключиться к MQTT, анализировать данные, управлять реле, уведомлять).
2. Генерирует Python-скрипт с paho-mqtt и requests (как показано выше).
3. Выполняет его в sandbox-окружении.
4. Сообщает пользователю: «Скрипт запущен. В течение 30 секунд он будет обрабатывать данные. Если нужно продлить — скажите „продолжить“ или настройте постоянное выполнение через планировщик.»
Всё это занимает меньше минуты. Никакого ручного кодирования бэкенда, настройки демонов или написания API.
Другие способы подключения ESP32 к ASI Biont
Помимо MQTT, ESP32 можно подключить и другими способами из арсенала ASI Biont:
1. Через Hardware Bridge (COM-порт)
Если ESP32 подключён к компьютеру по USB (например, для отладки), пользователь запускает bridge.py на своём ПК. Bridge подключается к ASI Biont через WebSocket (единственный канал связи). AI отправляет команды через industrial_command(protocol='serial', command='serial_write_and_read', data='...'). Bridge записывает данные в COM-порт (например, COM3, 115200 бод) и читает ответ. Это удобно для прототипирования, когда ESP32 ещё не имеет Wi-Fi.
Пример команды в чате:
«Подключись к моему ESP32 через Hardware Bridge, порт COM3, скорость 115200. Отправь команду LED_ON и прочитай ответ.»
AI выполнит industrial_command(protocol='serial', command='serial_write_and_read', data='4c45445f4f4e0a') (HEX для "LED_ON\n").
2. Через HTTP API (если ESP32 запустил веб-сервер)
ESP32 может выступать как HTTP-сервер. ASI Biont подключается через execute_python с использованием requests или aiohttp. Скрипт отправляет GET/POST на IP ESP32 (например, http://192.168.1.101/relay?state=1).
3. Через WebSocket (для real-time данных)
Если ESP32 использует WebSocket-сервер (библиотека websockets в MicroPython), ASI Biont подключается через websockets библиотеку в sandbox и может получать потоковые данные (например, показания с акселерометра).
Сравнение способов
| Способ | Задержка | Удалённость | Сложность настройки | Лучший сценарий |
|---|---|---|---|---|
| MQTT | Низкая | Да | Средняя (нужен брокер) | Умный дом, датчики, реле |
| Hardware Bridge | Минимальная | Нет (локальный ПК) | Низкая (скачать bridge.py) | Отладка, прототипирование |
| HTTP API | Средняя | Да | Низкая (ESP32 как сервер) | Одиночные команды |
| WebSocket | Низкая | Да | Средняя | Потоковые данные, камера |
Почему это выгодно?
Традиционный подход к интеграции ESP32 с AI требует:
- Написать серверное приложение (Node.js, Python, Go) для приёма данных.
- Настроить базу данных для хранения показаний.
- Реализовать логику управления (пороги, таймеры).
- Подключить Telegram-бота или другой канал уведомлений.
- Развернуть всё это на VPS или Raspberry Pi.
Это дни или недели работы. С ASI Biont — минуты. AI-агент сам пишет код, выполняет его в облаке и управляет устройством. Всё, что нужно от пользователя — описать задачу на естественном языке и указать параметры подключения (IP, порт, токен).
Кроме того, ASI Biont подключается к ЛЮБОМУ устройству через execute_python — AI сам пишет код интеграции под каждое устройство. Не нужно ждать, пока разработчики добавят поддержку — подключай что угодно прямо сейчас. Пользователь просто описывает в чате, к какому устройству подключиться и какие параметры (порт, IP, baud rate, API-ключ), и AI сам пишет код на Python с использованием pyserial, paramiko, paho-mqtt, pymodbus, aiohttp или opcua-asyncio. Всё подключение происходит через диалог в чате, никаких панелей управления и кнопок «добавить устройство» не требуется.
Заключение
ESP32 — идеальный кандидат для интеграции с AI-агентом ASI Biont. Благодаря поддержке MQTT, HTTP и прямого COM-порта, вы можете в считанные минуты настроить автоматизацию умного дома, мониторинг температуры или управление реле. Всё, что нужно — описать задачу в чате. AI сам напишет код, подключится к устройству и начнёт работу.
Попробуйте прямо сейчас: подключите ваш ESP32 к ASI Biont на asibiont.com и управляйте железом силой мысли (ну, почти).
Комментарии