Введение: почему Edge AI на ESP32-CAM — это новый стандарт
Локальная обработка видеопотока с камеры — одна из самых востребованных задач в IoT и умном доме. Модуль ESP32-CAM на базе чипа ESP32 и сенсора OV2640 позволяет захватывать изображение с разрешением до 2 Мп (1600×1200) и — при правильной прошивке — выполнять базовую детекцию лиц прямо на устройстве, без отправки видеопотока в облако. Это снижает задержки, экономит трафик и повышает приватность.
Однако управление такой камерой, настройка сценариев и сбор результатов обычно требуют написания отдельного серверного кода или использования сторонних облачных платформ. AI-агент ASI Biont устраняет этот разрыв: он подключается к ESP32-CAM через MQTT или COM-порт, берёт на себя оркестрацию данных с Edge AI, а вы получаете готовое решение без сервера и облака. В этой статье мы покажем, как интегрировать OV2640 + ESP32 (face detection) с ASI Biont: от схемы подключения и прошивки до автоматизации сценариев (логирование, уведомления, управление доступом) через чат-интерфейс.
Какое устройство используется и почему это важно
ESP32-CAM (ESP32 + OV2640)
ESP32-CAM — это недорогой модуль (около $7–10) на базе двухъядерного микроконтроллера ESP32 с тактовой частотой 240 МГц, 520 КБ SRAM, 4 МБ PSRAM и встроенным Wi-Fi/Bluetooth. Камера OV2640 подключается по параллельному интерфейсу DVP и может передавать JPEG-кадры с разрешением до UXGA (1600×1200) при 15 FPS.
Для детекции лиц на ESP32 используется библиотека ESP-WHO от Espressif (https://github.com/espressif/esp-who). Она включает предобученную CNN-модель (MobileNet SSD), которая выполняется непосредственно на процессоре ESP32, используя PSRAM для хранения весов. По данным Espressif, детекция одного лица занимает около 200–300 мс при разрешении 320×240, что приемлемо для многих сценариев.
Зачем подключать такую камеру к AI-агенту?
Сам по себе ESP32-CAM может детектировать лица и отправлять результат по Wi-Fi, но без центрального AI-агента вы ограничены:
- Логирование: данные (кто, когда, сколько раз) нужно где-то накапливать и анализировать.
- Уведомления: при обнаружении незнакомого лица нужно отправить сообщение в Telegram или по email.
- Автоматизация: на основе детекции можно включать свет, открывать дверь, запускать запись.
- Оркестрация: несколько камер должны работать согласованно.
ASI Biont решает все эти задачи через диалог в чате — вы просто описываете, что хотите, и AI генерирует код интеграции.
Как ASI Biont подключается к ESP32-CAM
ASI Biont поддерживает три основных способа подключения к устройствам. Для ESP32-CAM оптимальны два:
- MQTT — если ESP32-CAM подключён к Wi-Fi и публикует результаты детекции в топик. AI подключается к тому же MQTT-брокеру (например, Mosquitto, HiveMQ Cloud), подписывается на топик, получает JSON с данными о лицах и при необходимости публикует команды (например, «включить реле»).
- COM-порт (Hardware Bridge) — если ESP32-CAM подключён к ПК по UART (через USB-UART преобразователь). Пользователь запускает bridge.py на своём компьютере, который соединяется с ASI Biont через WebSocket. AI отправляет запросы на чтение/запись через COM-порт.
- execute_python — универсальный способ: AI пишет Python-скрипт с использованием paho-mqtt или pyserial (через bridge), который выполняется в sandbox-окружении ASI Biont и взаимодействует с устройством.
В этой статье мы рассмотрим сценарий через MQTT, как наиболее распространённый для Wi-Fi устройств.
Пошаговая интеграция: от прошивки до чата
Шаг 1. Прошивка ESP32-CAM с детекцией лиц
Для начала нужно загрузить на ESP32-CAM прошивку, которая захватывает кадры с OV2640, выполняет детекцию лиц и публикует результат в MQTT-топик.
Необходимые компоненты:
- ESP32-CAM (модуль с OV2640, например, AI-Thinker ESP32-CAM)
- USB-UART преобразователь (FTDI232 или CP2102) с питанием 5V
- Среда Arduino IDE с установленной поддержкой ESP32
- Библиотеки: WiFi, PubSubClient, ESP32Camera, esp_face_detect (из esp-who)
Пример кода для Arduino IDE (MicroPython-подобный синтаксис):
#include <WiFi.h>
#include <PubSubClient.h>
#include "esp_camera.h"
#include "fd_forward.h"
// Конфигурация Wi-Fi и MQTT
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASS";
const char* mqtt_server = "test.mosquitto.org";
const char* topic_result = "esp32cam/face_result";
WiFiClient espClient;
PubSubClient client(espClient);
// Инициализация камеры
static camera_config_t camera_config = {
.pin_pwdn = 32,
.pin_reset = -1,
.pin_xclk = 0,
.pin_sscb_sda = 26,
.pin_sscb_scl = 27,
.pin_d7 = 35,
.pin_d6 = 34,
.pin_d5 = 39,
.pin_d4 = 36,
.pin_d3 = 21,
.pin_d2 = 19,
.pin_d1 = 18,
.pin_d0 = 5,
.pin_vsync = 25,
.pin_href = 23,
.pin_pclk = 22,
.xclk_freq_hz = 20000000,
.ledc_timer = LEDC_TIMER_0,
.ledc_channel = LEDC_CHANNEL_0,
.pixel_format = PIXFORMAT_JPEG,
.frame_size = FRAMESIZE_QVGA, // 320x240
.jpeg_quality = 12,
.fb_count = 1
};
// Загрузка модели детекции лиц
mtmn_config_t mtmn_config = mtmn_init_config();
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) delay(500);
client.setServer(mqtt_server, 1883);
esp_err_t err = esp_camera_init(&camera_config);
if (err != ESP_OK) return;
}
void loop() {
if (!client.connected()) {
client.connect("ESP32CAM_" + String(random(0xffff), HEX));
}
client.loop();
camera_fb_t * fb = esp_camera_fb_get();
if (!fb) return;
// Детекция лиц
box_array_t *boxes = face_detect(fb, &mtmn_config);
int face_count = (boxes != NULL) ? boxes->len : 0;
// Формируем JSON
String json = "{\"faces\":" + String(face_count) + ",\"timestamp\":" + String(millis()) + "}";
client.publish(topic_result, json.c_str());
esp_camera_fb_return(fb);
delay(3000); // пауза 3 секунды между кадрами
}
Прошивка загружается через Arduino IDE (плата: AI Thinker ESP32-CAM). После загрузки ESP32-CAM подключается к вашему Wi-Fi и каждые 3 секунды отправляет в топик esp32cam/face_result JSON вида {"faces":2,"timestamp":12345678}.
Шаг 2. Подключение ASI Biont через MQTT
Теперь нужно, чтобы AI-агент «увидел» этот топик. В чате ASI Biont вы пишете:
«Подключись к MQTT-брокеру test.mosquitto.org, подпишись на топик esp32cam/face_result, анализируй данные о количестве лиц. Если количество лиц больше 0, отправь мне уведомление в Telegram с текстом "Обнаружено лицо" и текущим временем. Также логируй все события в Google Sheets (через API).»
AI-агент генерирует и выполняет следующий код (execute_python):
import paho.mqtt.client as mqtt
import json
import requests
import datetime
# Конфигурация
MQTT_BROKER = "test.mosquitto.org"
TOPIC = "esp32cam/face_result"
TELEGRAM_BOT_TOKEN = "YOUR_BOT_TOKEN"
TELEGRAM_CHAT_ID = "YOUR_CHAT_ID"
GOOGLE_SHEETS_WEBHOOK = "https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec"
def on_message(client, userdata, msg):
payload = json.loads(msg.payload.decode())
face_count = payload.get("faces", 0)
timestamp = payload.get("timestamp", 0)
now = datetime.datetime.now().isoformat()
if face_count > 0:
# Отправка в Telegram
text = f"Обнаружено лицо! Время: {now}, лиц: {face_count}"
requests.post(f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage",
json={"chat_id": TELEGRAM_CHAT_ID, "text": text})
# Логирование в Google Sheets
requests.post(GOOGLE_SHEETS_WEBHOOK, json={"data": payload, "time": now})
client = mqtt.Client()
client.on_message = on_message
client.connect(MQTT_BROKER, 1883, 60)
client.subscribe(TOPIC)
client.loop_start()
# Оставляем выполнение на 30 секунд (ограничение sandbox)
import time
time.sleep(30)
client.loop_stop()
Важно: в sandbox ASI Biont код выполняется с таймаутом 30 секунд, поэтому для постоянного мониторинга AI-агент использует industrial_command с MQTT-протоколом, который работает в фоне. Но для демонстрации и разового запуска execute_python подходит.
Шаг 3. Автоматизация сценариев через чат
После подключения вы можете управлять сценариями через диалог:
- «При обнаружении лица отправляй уведомление в Telegram и включай свет через MQTT-команду на ESP32.»
- «Логируй все детекции в CSV-файл и сохраняй на моём ПК через Hardware Bridge.»
- «Если лицо не обнаружено в течение 10 минут, отправь email-отчёт.»
AI-агент динамически генерирует код для каждого сценария. Например, для включения света через MQTT он опубликует команду в топик esp32cam/cmd:
import paho.mqtt.client as mqtt
client = mqtt.Client()
client.connect("test.mosquitto.org", 1883, 60)
client.publish("esp32cam/cmd", "{\"relay\":1}")
client.disconnect()
На стороне ESP32-CAM в прошивку достаточно добавить подписку на этот топик и управление GPIO (например, пин 4 для реле).
Реальные сценарии использования
1. Умный домофон
ESP32-CAM устанавливается у входной двери. При обнаружении лица AI-агент:
- Отправляет фото (если ESP32-CAM дополнительно публикует base64-кадр) в Telegram.
- Сравнивает с базой известных лиц (через embedding, вычисляемый на Edge AI).
- Если лицо незнакомое — включает запись на локальный ПК через Hardware Bridge.
2. Мониторинг посещаемости офиса
Несколько ESP32-CAM в коридорах. AI-агент собирает данные со всех устройств, агрегирует в Google Sheets и строит отчёт по загруженности в разное время суток.
3. Система анти-сон за рулём (для учебных проектов)
ESP32-CAM направлена на водителя. При детекции закрытых глаз (требует более сложной модели) AI-агент отправляет звуковой сигнал через MQTT-команду на другой ESP32 с динамиком.
Почему это выгодно: AI делает всю интеграцию за секунды
Без ASI Biont вам пришлось бы:
1. Писать серверный код (Node.js, Python Flask) для приёма MQTT-сообщений.
2. Настраивать базу данных для логирования.
3. Интегрировать Telegram Bot API вручную.
4. Писать код для Google Sheets API.
5. Разворачивать всё на VPS или домашнем сервере.
С ASI Biont вы просто описываете задачу в чате, и AI-агент генерирует готовый код, выполняет его и настраивает сценарии. Всё подключение происходит через диалог, никаких панелей управления и кнопок «добавить устройство» не требуется.
Заключение
Интеграция OV2640 + ESP32 (face detection) с AI-агентом ASI Biont — это простой способ превратить недорогой модуль камеры в полноценную Edge AI-систему с автоматизацией, уведомлениями и логированием. Вы получаете готовое решение без сервера и облака, а AI-агент берёт на себя всю оркестрацию.
Попробуйте сами: загрузите прошивку на ESP32-CAM, подключитесь к ASI Biont через MQTT и опишите в чате, какой сценарий хотите реализовать. Начните прямо сейчас на asibiont.com.
Комментарии