Что такое ESP-NOW и почему это важно для умного дома
ESP-NOW — проприетарный протокол связи от Espressif, который работает на частоте 2.4 ГГц и не требует точки доступа Wi-Fi. Устройства ESP32 и ESP8266 общаются напрямую, как по рации: пара «мастер-слейв» или mesh-сеть с ретрансляцией. Задержка — миллисекунды, энергопотребление — минимальное. Это идеальный вариант для автономных датчиков, реле и выключателей, которые не должны зависеть от интернета.
Но главная проблема ESP-NOW — это замкнутость экосистемы. Чтобы получать данные с датчиков и управлять исполнительными устройствами, нужен шлюз, который переводит ESP-NOW в более «цивилизованный» протокол (MQTT, HTTP, COM-порт). И вот здесь появляется AI-агент ASI Biont. Он умеет подключаться к устройствам через 14 разных протоколов, и для ESP-NOW сети достаточно одного шлюза, чтобы AI получил доступ ко всем узлам.
Архитектура интеграции: ESP-NOW → ESP32 шлюз → MQTT → ASI Biont
Самый простой способ подключить ESP-NOW к ASI Biont — использовать MQTT. ESP32-шлюз будет собирать данные от других ESP-NOW устройств (температура, влажность, статус реле) и публиковать их в MQTT-брокер. ASI Biont, в свою очередь, подписывается на эти топики через paho-mqtt в execute_python (или через industrial_command для быстрой проверки). Команды управления отправляются обратно: AI публикует сообщение в топик, шлюз его получает и передаёт по ESP-NOW нужному устройству.
Почему MQTT? Он лёгкий, асинхронный, поддерживает QoS и работает через NAT — не нужно открывать порты. Брокер можно поднять на Raspberry Pi или использовать облачный, например HiveMQ Cloud.
Шаг 1: Настройка ESP-NOW сети
Возьмём два ESP32: один — шлюз с Wi-Fi и MQTT, второй — удалённый датчик температуры (например, DHT22). Датчик отправляет показания по ESP-NOW, шлюз принимает и публикует в MQTT. Код шлюза на Arduino C++:
#include <espnow.h>
#include <WiFi.h>
#include <PubSubClient.h>
// Структура данных от датчика
typedef struct SensorData {
float temperature;
float humidity;
} SensorData;
SensorData incomingData;
// MQTT настройки
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len) {
memcpy(&incomingData, incomingData, sizeof(incomingData));
// Публикуем в MQTT
char topic[50];
char msg[50];
snprintf(topic, sizeof(topic), "espnow/sensor1/temp");
snprintf(msg, sizeof(msg), "%.2f", incomingData.temperature);
client.publish(topic, msg);
snprintf(topic, sizeof(topic), "espnow/sensor1/hum");
snprintf(msg, sizeof(msg), "%.2f", incomingData.humidity);
client.publish(topic, msg);
}
void setup() {
WiFi.mode(WIFI_STA);
WiFi.begin("YOUR_WIFI", "YOUR_PASSWORD");
while (WiFi.status() != WL_CONNECTED) delay(100);
client.setServer(mqtt_server, 1883);
if (esp_now_init() != 0) return;
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
}
Этот шлюз транслирует данные с датчика в MQTT. Для управления реле нужно добавить подписку на топик espnow/relay1/set и отправку ESP-NOW сообщения целевому устройству.
Шаг 2: Подключаем ASI Biont к MQTT
Теперь идём в чат с AI-агентом ASI Biont и пишем примерно так:
«Подключись к MQTT брокеру broker.hivemq.com, подпишись на топики espnow/#, выведи текущую температуру и влажность. Если температура выше 25°C — отправь мне уведомление в Telegram».
AI сам сгенерирует и запустит Python-скрипт в execute_python с библиотекой paho-mqtt. Пример кода, который он создаст:
import paho.mqtt.client as mqtt
import requests
def on_message(client, userdata, msg):
topic = msg.topic
value = msg.payload.decode()
print(f"{topic}: {value}")
if topic == "espnow/sensor1/temp" and float(value) > 25:
requests.post(
"https://api.telegram.org/bot<TOKEN>/sendMessage",
json={"chat_id": "<CHAT_ID>", "text": f"Температура {value}°C!"}
)
client = mqtt.Client()
client.on_message = on_message
client.connect("broker.hivemq.com", 1883, 60)
client.subscribe("espnow/#")
client.loop_forever()
Обратите внимание: loop_forever() в sandbox ASI Biont не сработает из-за таймаута 30 секунд. В реальном сценарии AI использует client.loop_start() и time.sleep или периодические вызовы через industrial_command, чтобы не блокировать выполнение.
Шаг 3: Управление устройствами через чат
Теперь можно отдавать команды голосом или текстом. Например:
«Включи реле 1 на 10 секунд»
AI сформирует MQTT-публикацию в топик espnow/relay1/set со значением ON, затем через 10 секунд отправит OFF. Шлюз получит эти сообщения и отправит ESP-NOW команду нужному узлу. Всё происходит автоматически, без ручного программирования интеграции.
Альтернатива: Hardware Bridge (COM-порт)
Если шлюз ESP32 подключен к компьютеру через USB, можно использовать Hardware Bridge. Вы запускаете bridge.py на своём ПК (скачивается из дашборда ASI Biont), указываете порт COM3 и скорость 115200. ASI Biont через industrial_command с протоколом serial:// сможет читать и писать в порт. Это удобно, когда нет MQTT-брокера или нужно быстро отлаживать устройство.
Почему это выгодно?
Раньше для интеграции ESP-NOW сети с Telegram-ботом или голосовым ассистентом пришлось бы вручную писать код шлюза, настраивать MQTT, парсить JSON, обрабатывать ошибки. С ASI Biont достаточно описать словами, что нужно сделать, — агент сам напишет и запустит код. Это экономит часы разработки и позволяет менять логику в реальном времени: добавил новый датчик — просто написал в чат, и AI адаптировал скрипт.
Заключение
ESP-NOW — отличный выбор для локальной связи, но без шлюза он бесполезен для интеграции с внешним миром. Благодаря ASI Biont вы получаете универсальный мост: AI-агент берёт на себя всю рутинную работу по подключению, анализу данных и управлению. Не нужно писать код вручную, не нужно ждать обновлений — просто опишите задачу в чате, и через минуту ваша ESP-NOW сеть «оживёт».
Попробуйте интеграцию уже сейчас на asibiont.com — запросите подключение к своему ESP32 шлюзу и убедитесь, что автоматизация умного дома без Wi-Fi стала проще.
Комментарии