Edge AI на ESP32-CAM: интеграция распознавания лиц с ASI Biont через MQTT
Представьте: ваш дверной звонок не просто транслирует видео, а сам распознаёт лица, отличает жильцов от посторонних и отправляет уведомление в Telegram. Все вычисления происходят локально на ESP32-CAM с камерой OV2640 — никаких облачных подписок и задержек. А управляет всей системой AI-агент ASI Biont, который подключается к устройству через простой диалог в чате. Никаких панелей управления — просто опишите задачу, и AI сам напишет код интеграции.
В этой статье разберём реальный сценарий: ESP32-CAM с детекцией лиц на борту, MQTT-канал связи и автоматическое оповещение в Telegram. Вы узнаете, как ASI Biont подключается к ESP32, какие библиотеки использует и как заставить всё работать за считанные минуты.
Зачем подключать ESP32-CAM к AI-агенту?
ESP32-CAM (ESP32 + OV2640) — недорогая плата со встроенной камерой 2 МП и Wi-Fi. Она способна выполнять простую детекцию лиц прямо на микроконтроллере благодаря аппаратному ускорителю. Но чтобы превратить её в элемент умного дома или системы безопасности, нужен управляющий центр. ASI Biont выступает таким центром:
- анализирует события от камеры (кто пришёл, сколько лиц, в какое время);
- принимает решения (открыть дверь, вызвать охрану, отправить фото);
- управляет другими устройствами (замками, сиреной, светом).
Всё это без облачных сервисов — данные остаются локальными.
Как ASI Biont подключается к ESP32-CAM?
Для ESP32-CAM с Wi-Fi лучший выбор — MQTT. ESP32 публикует данные о детекции в MQTT-топик, а ASI Biont подписывается через execute_python с библиотекой paho-mqtt. Альтернативы:
| Способ | Плюсы | Минусы |
|---|---|---|
| MQTT | Двусторонняя связь, низкая задержка, стандарт IoT | Требуется MQTT-брокер |
| HTTP API | Не нужен брокер, простота | Только опрос (pull), сложнее для событий |
| Hardware Bridge (UART) | Не зависит от Wi-Fi, надёжность | Требуется компьютер рядом с bridge.py |
В нашем примере используем MQTT — самый распространённый протокол для Edge AI.
Сценарий: умный дверной звонок с Telegram-уведомлением
Шаг 1. Прошивка ESP32-CAM
Устанавливаем Arduino IDE или PlatformIO. Библиотеки: WiFi, PubSubClient, ESP32-Camera, esp-face (в составе ESP32 Arduino).
Код ESP32 захватывает кадр, детектирует лица и при обнаружении публикует JSON с полем count и image (base64 JPEG).
#include <WiFi.h>
#include <PubSubClient.h>
#include "esp_camera.h"
#include "face_detection.h"
const char* ssid = "...";
const char* password = "...";
const char* mqtt_server = "test.mosquitto.org";
const char* outTopic = "esp32cam/face_detected";
WiFiClient espClient;
PubSubClient client(espClient);
dl_image_metadata_t metadata;
void setup() {
// Конфиг камеры (camera_config_t)
// Подключение к WiFi, MQTT
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
camera_fb_t * fb = esp_camera_fb_get();
if (fb) {
metadata = dl_image_metadata_init();
dl_image_metadata_set_image(&metadata, fb->buf, fb->len, fb->width, fb->height, fb->format);
dl_detect_face(&metadata); // аппаратная детекция
if (metadata.num_faces > 0) {
String imageBase64 = base64::encode(fb->buf, fb->len);
String payload = "{\"count\":" + String(metadata.num_faces) + ",\"image\":\"" + imageBase64 + "\"}";
client.publish(outTopic, payload.c_str());
}
esp_camera_fb_return(fb);
}
delay(2000);
}
Важно: ESP32-CAM может отправлять большие сообщения. Убедитесь, что MQTT-брокер допускает payload до 50 КБ (например, Mosquitto по умолчанию ограничен 256 КБ).
Шаг 2. Настройка ASI Biont через диалог
Пользователь пишет в чате:
«Подключись к MQTT-брокеру test.mosquitto.org, порт 1883. Подпишись на топик esp32cam/face_detected. При получении сообщения с count > 0 отправь мне в Telegram текст “Обнаружено лицо” и само изображение. Мой токен бота: 123456:ABC, chat_id: 789»
AI-агент генерирует Python-скрипт для execute_python:
import paho.mqtt.client as mqtt
import requests
import json
import base64
from io import BytesIO
from PIL import Image
TOKEN = "123456:ABC"
CHAT_ID = "789"
def on_message(client, userdata, msg):
payload = json.loads(msg.payload)
count = payload.get("count", 0)
if count > 0:
# Отправка текста
requests.post(f"https://api.telegram.org/bot{TOKEN}/sendMessage",
data={"chat_id": CHAT_ID, "text": f"🔔 Обнаружено лиц! {count}"})
# Если есть изображение, отправляем как фото
if "image" in payload:
img_bytes = base64.b64decode(payload["image"])
image = Image.open(BytesIO(img_bytes))
image.save("/tmp/face.jpg")
with open("/tmp/face.jpg", "rb") as f:
requests.post(f"https://api.telegram.org/bot{TOKEN}/sendPhoto",
data={"chat_id": CHAT_ID, "caption": "Фото с камеры"},
files={"photo": f})
client = mqtt.Client()
client.on_message = on_message
client.connect("test.mosquitto.org", 1883, 60)
client.subscribe("esp32cam/face_detected")
client.loop_forever(timeout=1.0)
Как это работает: sandbox ASI Biont (Railway) выполняет скрипт до 30 секунд, затем завершает. Для постоянной работы вы можете запустить bridge.py на своём ПК, который имеет постоянное соединение, или использовать
industrial_commandдля подписки (но черезindustrial_commandнельзя длительно слушать MQTT — только разовые операции). Поэтому для мониторинга событий используйтеexecute_pythonс таймаутом, достаточным для обработки одного события, или настройте внешний сервис.
Шаг 3. Управление замком (команда из чата)
Чтобы AI мог открыть дверь по запросу, ESP32 должен подписаться на топик esp32cam/command. При получении команды unlock микроконтроллер дёргает реле.
Пользователь пишет в чат:
«Отправь команду unlock на MQTT-брокер test.mosquitto.org, топик esp32cam/command»
AI выполняет industrial_command:
industrial_command(protocol='mqtt', command='publish',
params={"host":"test.mosquitto.org","port":1883,
"topic":"esp32cam/command","payload":"unlock"})
На ESP32 в loop() добавим:
client.setCallback(callback);
void callback(char* topic, byte* payload, unsigned int length) {
String msg = String((char*)payload).substring(0, length);
if (msg == "unlock") {
digitalWrite(RELAY_PIN, HIGH);
delay(5000);
digitalWrite(RELAY_PIN, LOW);
}
}
Почему это выгодно?
- Не нужно писать интеграционный код вручную — AI генерирует его за секунды под ваш конкретный сценарий. Пользователь просто описывает задачу.
- Любой способ подключения: MQTT, HTTP, Modbus, SSH, COM-порт — AI выберет нужные библиотеки и протокол.
- Безопасность: данные остаются локальными, облако ASI Biont участвует только в управлении через текст, а сам видеопоток не покидает сеть.
- Гибкость: можно быстро менять логику — добавить интеграцию с умной лампочкой, сиреной или базой данных посетителей.
Продвинутые сценарии
- Несколько камер: подпишитесь на разные топики
cam1/face,cam2/face. AI может агрегировать данные и открывать калитку только при совпадении с расписанием. - Распознавание конкретных лиц: ESP32 может отправлять ID обнаруженного лица (через библиотеку esp-face, которая сравнивает с сохранёнными эмбеддингами). AI проверяет ID в локальной базе (SQLite) и решает, пускать или нет.
- Безоблачное видеонаблюдение для малого бизнеса: ESP32-CAM детектирует движение, отправляет кадры в Telegram. ASI Biont логирует события и уведомляет охрану.
Заключение
ESP32-CAM OV2640 + ASI Biont — это готовое Edge AI-решение для умного дома и бизнеса. Вы получаете локальное распознавание лиц, управление через Telegram и полный контроль над данными. Всё это настраивается за 10 минут через диалог с AI-агентом. Попробуйте сами на asibiont.com — создайте свою систему видеонаблюдения, которая понимает, кто перед дверью.
Комментарии