Введение
Камеры на базе ESP32-CAM с модулями OV2640 или OV7670 — это одни из самых доступных и популярных решений для встраиваемого компьютерного зрения. Стоимость модуля начинается от $10, а возможности включают передачу JPEG-кадров по Wi-Fi, работу с MicroPython и совместимость с OpenCV. Однако главная проблема — рутинная интеграция: нужно написать код для захвата изображения, настроить передачу на сервер, реализовать логику распознавания. AI-агент ASI Biont решает эту задачу за секунды: вы просто описываете в чате, к какому устройству подключиться и что с ним делать, а агент сам генерирует и выполняет код. В этой статье мы разберём, как подключить ESP32-CAM к ASI Biont по MQTT и через HTTP API, настроить распознавание объектов, лиц и QR-кодов, а также автоматизировать сценарии умного дома и безопасности.
Как AI-агент подключается к ESP32-CAM
ESP32-CAM — это не просто камера, а полноценный микроконтроллер с Wi-Fi. Он может выступать в роли MQTT-клиента, HTTP-сервера или клиента. ASI Biont поддерживает несколько способов интеграции:
- MQTT — ESP32-CAM публикует изображения в топик (например,
camera/esp32cam/image), а AI-агент подписывается на этот топик черезpaho-mqtt. Это самый надёжный и асинхронный способ для IoT. - HTTP API — ESP32-CAM запускает встроенный веб-сервер, отдающий JPEG по запросу. AI-агент использует
aiohttpилиrequestsдля получения кадра. - SSH — если ESP32-CAM работает под управлением MicroPython или CircuitPython с включённым FTP/WebREPL, AI может подключиться по SSH (через
paramiko) и выполнить скрипт захвата. - Hardware Bridge (COM-порт) — для отладочных плат, где ESP32-CAM подключена к ПК через USB-UART мост (например, CP2102).
В этой статье мы сосредоточимся на двух основных сценариях: MQTT (для постоянной отправки кадров) и HTTP API (для запроса по требованию).
Сценарий 1: Умный дом — детекция движения и уведомление в Telegram
Идея
ESP32-CAM висит в прихожей, делает фото каждые 5 секунд и публикует его в MQTT-топик. AI-агент ASI Biont получает изображение, запускает модель компьютерного зрения (например, YOLOv8 через torch или onnxruntime) и, если обнаруживает человека, отправляет уведомление в Telegram с вложенным фото.
Что делает пользователь
Пользователь пишет в чате ASI Biont:
«Подключись к моему ESP32-CAM по MQTT. Камера публикует JPEG в топик camera/image. При обнаружении человека пришли фото в Telegram. Мой токен бота: 123456:ABC, chat_id: 987654. MQTT брокер: mqtt://192.168.1.100:1883.»
Что делает AI-агент
AI генерирует Python-скрипт, который выполняется в sandbox-окружении ASI Biont (через execute_python). Скрипт подключается к MQTT-брокеру, подписывается на топик camera/image, получает бинарные данные JPEG, декодирует их через PIL.Image, прогоняет через ONNX-модель YOLOv8 (загруженную из Hugging Face Hub), и при обнаружении класса "person" отправляет фото в Telegram через requests.post.
Пример кода, который генерирует AI (для sandbox):
import paho.mqtt.client as mqtt
import numpy as np
import onnxruntime as ort
from PIL import Image
import requests
import io
import json
TELEGRAM_TOKEN = "123456:ABC"
CHAT_ID = "987654"
MQTT_BROKER = "192.168.1.100"
MQTT_PORT = 1883
TOPIC = "camera/image"
# Загружаем модель YOLOv8 (предварительно скачанную в sandbox)
session = ort.InferenceSession("yolov8n.onnx")
input_name = session.get_inputs()[0].name
def send_telegram_photo(photo_bytes, caption="Обнаружен человек!"):
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendPhoto"
files = {'photo': ('photo.jpg', photo_bytes, 'image/jpeg')}
data = {'chat_id': CHAT_ID, 'caption': caption}
requests.post(url, files=files, data=data)
def on_message(client, userdata, msg):
image_bytes = msg.payload
img = Image.open(io.BytesIO(image_bytes))
img_resized = img.resize((640, 640))
input_tensor = np.array(img_resized).astype(np.float32) / 255.0
input_tensor = np.transpose(input_tensor, (2, 0, 1))[np.newaxis, ...]
outputs = session.run(None, {input_name: input_tensor})
detections = outputs[0][0]
for det in detections:
if det[4] > 0.5 and int(det[5]) == 0: # класс 0 = person
send_telegram_photo(image_bytes)
break
client = mqtt.Client()
client.on_message = on_message
client.connect(MQTT_BROKER, MQTT_PORT, 60)
client.subscribe(TOPIC)
client.loop_start()
# Важно: не while True, а loop_start() — таймаут 30 секунд
import time
time.sleep(25)
client.loop_stop()
Результат: В Telegram приходит фото с подписью «Обнаружен человек!».
Почему это выгодно
- Не нужно писать код вручную — AI генерирует его за секунду.
- Можно менять модель распознавания одной фразой: «Используй MobileNet SSD вместо YOLO».
- Легко масштабировать: добавить ещё 5 камер — AI адаптирует скрипт.
Сценарий 2: Промышленная безопасность — распознавание QR-кодов и лиц
Идея
На проходной завода установлен ESP32-CAM, который сканирует QR-коды с пропусков и делает фото лица. AI-агент ASI Biont по HTTP запрашивает кадр, распознаёт QR-код через pyzbar (доступен в sandbox как часть PIL + numpy), сверяет с базой данных сотрудников (PostgreSQL) и открывает шлагбаум по Modbus TCP.
Что делает пользователь
«Камера на проходной отдаёт JPEG по http://192.168.1.200/capture. При распознавании QR-кода проверь код в таблице employees (поле qr_code) в PostgreSQL на 10.0.0.1:5432, база factory, пользователь admin, пароль pass. Если сотрудник найден, отправь команду write_coil 0x0001 True на PLC по Modbus TCP 10.0.0.2:502.»
Что делает AI-агент
AI генерирует скрипт, который:
1. По HTTP запрашивает JPEG с ESP32-CAM.
2. Декодирует QR-код через pyzbar.
3. Подключается к PostgreSQL через psycopg2 и ищет запись.
4. Если найден — через industrial_command с протоколом modbus отправляет команду write_coil.
Пример кода:
import requests
from PIL import Image
from pyzbar.pyzbar import decode
import psycopg2
import io
# Шаг 1: захват изображения
resp = requests.get("http://192.168.1.200/capture", timeout=5)
img = Image.open(io.BytesIO(resp.content))
# Шаг 2: распознавание QR-кода
qr_codes = decode(img)
if not qr_codes:
print("QR-код не найден")
exit()
qr_data = qr_codes[0].data.decode()
print(f"Распознан QR: {qr_data}")
# Шаг 3: проверка в БД
conn = psycopg2.connect(
host="10.0.0.1",
port=5432,
dbname="factory",
user="admin",
password="pass"
)
cur = conn.cursor()
cur.execute("SELECT name FROM employees WHERE qr_code = %s", (qr_data,))
row = cur.fetchone()
if row:
print(f"Сотрудник {row[0]} найден, открываем шлагбаум")
# Команда через industrial_command (tool call, не Python-функция)
# В sandbox это будет выглядеть как вызов tools
# industrial_command(protocol='modbus', command='write_coil', args={'unit_id': 1, 'address': 1, 'value': True})
else:
print("Доступ запрещён")
Результат: Шлагбаум открывается автоматически после сканирования пропуска.
Сценарий 3: Автоматизация умного дома — управление светом по жестам
Идея
ESP32-CAM с OV7670 (низкое разрешение, но высокая скорость) снимает видео 30 кадров/с. AI-агент через MQTT получает кадры и определяет жест руки (например, поднятая ладонь — включить свет, кулак — выключить). Команда отправляется на ESP32 с реле через MQTT publish.
Что делает пользователь
«Подключись к ESP32-CAM по MQTT (топик camera/frame). При обнаружении жеста "открытая ладонь" отправь команду relay/control = ON, при жесте "кулак" — OFF. MQTT брокер тот же.»
Что делает AI-агент
AI использует предобученную модель MediaPipe Hands (доступна через opencv-python и mediapipe в sandbox). Скрипт подписывается на топик, декодирует кадр, определяет landmarks, классифицирует жест и публикует команду.
Пример кода:
import paho.mqtt.client as mqtt
import cv2
import mediapipe as mp
import numpy as np
import io
mp_hands = mp.solutions.hands
hands = mp_hands.Hands()
def classify_gesture(landmarks):
# Простая логика: если все пальцы разжаты — ладонь, если сжаты — кулак
tips = [4, 8, 12, 16, 20]
extended = 0
for tip in tips:
if landmarks[tip].y < landmarks[tip - 2].y:
extended += 1
if extended >= 4:
return "PALM"
elif extended <= 1:
return "FIST"
return "UNKNOWN"
def on_message(client, userdata, msg):
img = cv2.imdecode(np.frombuffer(msg.payload, np.uint8), cv2.IMREAD_COLOR)
rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
result = hands.process(rgb)
if result.multi_hand_landmarks:
gesture = classify_gesture(result.multi_hand_landmarks[0].landmark)
if gesture == "PALM":
client.publish("relay/control", "ON")
elif gesture == "FIST":
client.publish("relay/control", "OFF")
mqtt_client = mqtt.Client()
mqtt_client.on_message = on_message
mqtt_client.connect("192.168.1.100", 1883, 60)
mqtt_client.subscribe("camera/frame")
mqtt_client.loop_start()
import time
time.sleep(20)
mqtt_client.loop_stop()
Как подключить ESP32-CAM к ASI Biont: пошаговая инструкция
- Установите библиотеки на ESP32-CAM. Если используете MicroPython, загрузите прошивку с поддержкой Wi-Fi и MQTT (например,
umqtt.simple). Пример прошивки и скетча для Arduino IDE можно найти в официальной документации Espressif. - Настройте камеру. В скетче укажите SSID и пароль Wi-Fi, а также топик MQTT или URL для HTTP.
- Запустите bridge.py. Скачайте bridge.py из дашборда ASI Biont (Devices → Create API Key → Скачать bridge). Запустите с параметрами:
python bridge.py --token=ВАШ_ТОКЕН --ports=COM3 --baud 115200
Bridge обеспечит связь между ASI Biont и вашим ПК, если вы используете COM-порт для отладки. - Опишите задачу в чате ASI Biont. Например:
«Подключись к моему ESP32-CAM по HTTP: http://192.168.1.200/capture. Получай изображение каждые 10 секунд и проверяй, есть ли в кадре кошка. Если есть — отправь мне в Telegram.»
- AI сгенерирует и выполнит код. Всё происходит автоматически.
Почему ASI Biont — это удобно
- Без кода. Вы не пишете интеграцию — AI пишет её за вас.
- Гибкость. Подключайте любые камеры: USB-вебкамеры через OpenCV, IP-камеры через RTSP, ESP32-CAM через MQTT.
- Безопасность. Код выполняется в изолированном sandbox, а bridge работает только на вашем ПК.
- Мгновенная автоматизация. Один запрос в чате — и система готова.
Заключение
ESP32-CAM с OV2640 или OV7670 — это мощный и дешёвый инструмент для компьютерного зрения. В паре с AI-агентом ASI Biont он превращается в интеллектуальную систему безопасности, умного дома или промышленного контроля. Вам не нужно писать десятки строк кода — достаточно описать задачу на естественном языке. Попробуйте интеграцию на asibiont.com и автоматизируйте свои устройства уже сегодня.
Комментарии