Introduction
Face detection on microcontrollers is no longer science fiction. The ESP32-CAM module, equipped with the OV2640 camera (2 MP, 1600×1200 resolution), can capture and process images locally — no cloud required. But what happens when you pair this edge AI device with a conversational AI agent like ASI Biont? You get a system that not only detects faces but also triggers actions — unlocking doors, sending alerts, logging events — all through natural language commands.
In this guide, you'll learn how to integrate an ESP32-CAM with OV2640 into ASI Biont using MQTT, run face detection on the microcontroller, and automate responses. No cloud servers, no complex dashboards — just your ESP32, an MQTT broker, and the AI agent.
Why Connect ESP32-CAM to an AI Agent?
Standalone face detection on ESP32-CAM is impressive for a $10 board, but it's limited. The microcontroller can detect a face and blink an LED, but it can't easily send notifications, log to a database, or coordinate with other smart devices. ASI Biont fills this gap. The AI agent acts as a central brain: it receives face detection events via MQTT, analyzes patterns (e.g., repeated detection at odd hours), and executes actions like:
- Sending Telegram alerts with a photo
- Triggering a door lock via GPIO on another ESP32
- Logging events to a Google Sheet or PostgreSQL database
- Adjusting lighting or HVAC based on occupancy
Connection Method: MQTT
For this integration, we use MQTT — the standard protocol for IoT devices. The ESP32 runs a MicroPython script that publishes face detection events to an MQTT broker (like Mosquitto). ASI Biont connects to the same broker using the paho-mqtt library inside the execute_python sandbox, subscribes to the topic, and reacts.
Why MQTT? It's lightweight, supports pub-sub messaging, and is ideal for low-power microcontrollers. The ESP32 can sleep between detections and wake only to publish a few bytes of data.
Hardware Setup
| Component | Description |
|---|---|
| ESP32-CAM (AI-Thinker) | Microcontroller with integrated OV2640 camera, PSRAM, and Wi-Fi |
| FTDI programmer | To flash firmware and provide serial console (3.3V logic) |
| Power supply | 5V/2A USB adapter (ESP32-CAM draws up to 500 mA during Wi-Fi) |
| MQTT broker | Mosquitto (local or cloud, e.g., test.mosquitto.org) |
Wiring Diagram
Connect the ESP32-CAM to the FTDI programmer:
| FTDI Pin | ESP32-CAM Pin |
|---|---|
| 3.3V | VCC (3.3V) |
| GND | GND |
| TX | U0R |
| RX | U0T |
| GPIO 0 | GND (flash mode) |
Note: The ESP32-CAM draws significant current during Wi-Fi. Use a dedicated 5V supply with a 3.3V regulator if powering from the FTDI alone.
MicroPython Code for ESP32-CAM
Below is a complete MicroPython script for face detection using the esp32cam library and publishing events to MQTT.
import network
import time
import json
from machine import Pin
from esp32cam import Camera
from umqtt.simple import MQTTClient
# Wi-Fi credentials
WIFI_SSID = "your_ssid"
WIFI_PASS = "your_password"
# MQTT broker settings
MQTT_BROKER = "test.mosquitto.org"
MQTT_TOPIC = b"esp32/face_detection"
CLIENT_ID = "esp32_cam_01"
# Initialize camera
cam = Camera()
cam.init(0, format=Camera.JPEG, fb_location=Camera.PSRAM)
cam.set_quality(12) # 0-63, lower is better quality
# Connect to Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASS)
while not wlan.isconnected():
time.sleep(1)
# Connect to MQTT
mqtt = MQTTClient(CLIENT_ID, MQTT_BROKER)
mqtt.connect()
# Face detection loop
def detect_face():
buf = cam.capture()
if buf is not None:
# Simple motion/face detection heuristic
# For real face detection, use esp32-camera library with Haar cascades
# Here we assume any captured frame with high contrast = detection
# Replace with actual ML model for production
return len(buf) > 10000 # rough proxy
return False
while True:
if detect_face():
payload = json.dumps({
"event": "face_detected",
"timestamp": time.time(),
"device_id": CLIENT_ID
})
mqtt.publish(MQTT_TOPIC, payload.encode())
print("Face detected, published to MQTT")
time.sleep(5) # Avoid spamming
Note: For true edge face detection on ESP32, you'll need to flash the
esp32-cameralibrary with Haar cascade support (C++). The MicroPython example above uses a placeholder. For production, use Espressif's ESP-DL framework.
ASI Biont Integration: AI Agent Subscribes to MQTT
Now, tell ASI Biont to connect. In the chat, describe:
"Connect to MQTT broker test.mosquitto.org, subscribe to topic esp32/face_detection, and when a face is detected, send me a Telegram message with the timestamp and device ID."
The AI agent writes and executes the following Python code in the sandbox (no while True — it runs once and returns):
import paho.mqtt.client as mqtt
import json
def on_message(client, userdata, msg):
payload = json.loads(msg.payload.decode())
if payload.get("event") == "face_detected":
timestamp = payload.get("timestamp")
device = payload.get("device_id")
# Send Telegram notification
import requests
TELEGRAM_TOKEN = "your_token"
CHAT_ID = "your_chat_id"
message = f"🚨 Face detected on {device} at {timestamp}"
url = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage"
requests.post(url, json={"chat_id": CHAT_ID, "text": message})
print(f"Alert sent for {device}")
client = mqtt.Client()
client.on_message = on_message
client.connect("test.mosquitto.org", 1883, 60)
client.subscribe("esp32/face_detection")
client.loop_start()
# Run for 10 seconds to collect messages
import time
time.sleep(10)
client.loop_stop()
print("Done")
The AI runs this immediately. No manual coding, no setting up webhooks — just describe what you want.
Real-World Scenario: Access Control for a Home Office
Imagine a home office where only you are allowed entry. The ESP32-CAM is mounted at the door. When it detects a face, it publishes to MQTT. ASI Biont receives the event and:
- Checks the current time (if after 10 PM, trigger an additional alert)
- Sends a photo (captured from ESP32's buffer) to your Telegram
- Publishes an unlock command to a second MQTT topic (
door/unlock) - Logs the event to a local PostgreSQL database for auditing
You can add all this logic by simply telling the AI: "When a face is detected after 10 PM, send me the photo and unlock the door via MQTT." The AI generates the code.
Why ASI Biont Beats Traditional Dashboards
Most IoT platforms require you to:
- Define device schemas in a web UI
- Create triggers and actions in a drag-and-drop editor
- Write custom connectors for each protocol
With ASI Biont, you describe the integration in natural language. The AI writes the Python code on the fly using paho-mqtt, requests, psycopg2, or any of the 80+ sandbox libraries. No waiting for feature updates — connect anything, right now.
Conclusion
Integrating an ESP32-CAM with OV2640 into ASI Biont unlocks the full potential of edge AI face detection. The ESP32 handles the heavy lifting of image capture and detection, while the AI agent orchestrates complex workflows — all through a chat interface. No cloud lock-in, no dashboards, just pure automation.
Start your own integration today at asibiont.com. Describe your device, your broker, and your desired actions — the AI will connect everything in seconds.
Comments