Edge AI на ESP32-S3 и ASI Biont: распознавание жестов с TensorFlow Lite Micro и автоматизация через MQTT без сервера

Введение

Представьте: микроконтроллер за $5–10 анализирует движения руки, отличает жест «включить свет» от «выключить музыку», и результат мгновенно уходит в AI-агент, который принимает решение — без облачных вычислений, без задержек, с полной приватностью данных. Это не прототип из лаборатории, а рабочая схема на базе ESP32-S3 с TensorFlow Lite Micro (TFLite Micro) и AI-агента ASI Biont.

ESP32-S3 — это двухъядерный чип Espressif с частотой до 240 МГц, 512 КБ SRAM и поддержкой векторных инструкций (PIE), что позволяет запускать лёгкие нейросетевые модели прямо на борту. В сочетании с ASI Biont — AI-агентом, который умеет подключаться к любому устройству через диалог в чате, — вы получаете законченную систему периферийного интеллекта (Edge AI) без необходимости писать серверный код, настраивать брокеры сообщений или разворачивать инфраструктуру.

В этой статье мы разберём пошаговое руководство: как развернуть модель TFLite Micro для распознавания жестов на ESP32-S3, передать результаты в ASI Biont через MQTT и организовать сценарии автоматизации (управление светом, триггеры событий) — полностью через диалог с AI-агентом.

Почему ESP32-S3 и ASI Biont — идеальная пара для Edge AI

Традиционный подход к IoT-автоматизации с AI требует трёх уровней: устройство → облачный бэкенд → AI-сервис. Каждый уровень добавляет задержку, расходы на серверы и риски утечки данных. ESP32-S3 позволяет выполнить инференс на месте, но принятие решений (логика «если жест — то действие») всё равно требует сервера.

ASI Biont решает эту проблему: AI-агент работает как «мозг», который получает уже обработанные данные (например, «жест: включить свет») от ESP32-S3 по MQTT, анализирует контекст (время суток, история, настройки пользователя) и публикует команду обратно на устройство или в другие системы (Telegram, умный дом).

Ключевые преимущества связки:
- Локальный инференс — модель работает на ESP32-S3, данные не покидают устройство.
- Гибкая логика — ASI Biont может комбинировать данные с нескольких ESP32 (жесты + датчики температуры) и принимать решения.
- Нулевая серверная инфраструктура — MQTT-брокер поднимается в sandbox ASI Biont, вам не нужно арендовать VPS.
- Быстрая интеграция — пользователь описывает задачу в чате, AI пишет весь код подключения.

Как ASI Biont подключается к ESP32-S3

ASI Biont поддерживает несколько протоколов для работы с устройствами. Для ESP32-S3 с MQTT-возможностями оптимальный способ — MQTT через paho-mqtt. AI-агент использует инструмент execute_python, который запускает Python-скрипт в sandbox-окружении (на Railway) с доступом к библиотеке paho.mqtt.client.

Альтернативные способы подключения:

Способ Когда использовать Ограничения
MQTT (paho-mqtt) ESP32 с Wi-Fi, нужна двусторонняя связь, события в реальном времени Требуется MQTT-брокер (поднимается в sandbox)
Hardware Bridge (COM-порт) ESP32 подключён к ПК по USB, данные идут через UART Bridge запускается на ПК пользователя, нет прямого доступа из облака
SSH (paramiko) ESP32 под управлением Linux (ESP32-S3 с MicroPython + FTP/SSH-сервер) Требуется настроить SSH-сервер на устройстве

Для нашего сценария выбираем MQTT — это стандарт для IoT, не требует физического подключения к ПК, и ASI Biont может общаться с ESP32-S3 даже если устройство находится в другой сети (через публичный брокер или туннель).

Практический сценарий: распознавание жестов и управление светом

Проблема

Пользователь хочет управлять светом в комнате с помощью жестов — взмах рукой включает лампу, два взмаха выключают. Нужно, чтобы решение работало локально (без интернета для инференса) и было легко настраиваемо.

Решение

  1. На ESP32-S3 разворачивается модель TFLite Micro для классификации жестов (например, на основе датасета Gesture Recognition с MediaPipe или собственного набора). Модель обрабатывает данные с акселерометра (MPU6050) или камеры (OV2640) и выдаёт метку жеста.
  2. ESP32-S3 публикует результат в MQTT-топик gesture/result.
  3. ASI Biont подписывается на этот топик, анализирует метку и публикует команду в топик light/command.
  4. ESP32-S3 (или отдельный ESP32 с реле) получает команду и включает/выключает свет.

Пошаговая реализация

Шаг 1. Развёртывание TFLite Micro модели на ESP32-S3

Для примера используем модель из официального репозитория TensorFlow для ESP32 — micro_speech (распознавание ключевых слов) или адаптируем её под жесты. Мы возьмём готовый пример классификации жестов на основе акселерометра из ESP-DL.

Код на C++ (Arduino IDE или PlatformIO) для ESP32-S3:

#include <WiFi.h>
#include <PubSubClient.h>
#include <TensorFlowLite_ESP32.h>
#include "tflite_model.h" // ваша модель

// WiFi и MQTT настройки
const char* ssid = "...";
const char* password = "...";
const char* mqtt_server = "test.mosquitto.org";
const char* gesture_topic = "gesture/result";

WiFiClient espClient;
PubSubClient client(espClient);

// TFLite Micro
tflite::MicroErrorReporter micro_error_reporter;
tflite::MicroInterpreter* interpreter;

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  client.setServer(mqtt_server, 1883);

  // Инициализация TFLite
  static tflite::MicroMutableOpResolver<10> resolver;
  static tflite::MicroInterpreter static_interpreter(
      tflite_model, tflite::MicroInterpreter::kTfLiteModelDefault,
      tensor_arena, kTensorArenaSize, &resolver, &micro_error_reporter);
  interpreter = &static_interpreter;
}

void loop() {
  if (!client.connected()) reconnect();
  client.loop();

  // Сбор данных с акселерометра (MPU6050)
  float accel[3];
  readAccelerometer(accel);

  // Запуск инференса
  float* input = interpreter->input(0)->data.f;
  input[0] = accel[0]; input[1] = accel[1]; input[2] = accel[2];
  interpreter->Invoke();

  float* output = interpreter->output(0)->data.f;
  int gesture = output[0] > output[1] ? 0 : 1; // жест 0 или 1

  // Публикация в MQTT
  String payload = String("{\"gesture\":") + String(gesture) + "}";
  client.publish(gesture_topic, payload.c_str());

  delay(100);
}

Шаг 2. Подключение ASI Biont к MQTT

Пользователь пишет в чат ASI Biont: «Подключись к MQTT-брокеру test.mosquitto.org, подпишись на топик gesture/result. Когда придёт жест 0 — опубликуй в топик light/command команду {"light": "on"}, когда жест 1 — {"light": "off"}. Также отправь уведомление в Telegram».

AI-агент генерирует и выполняет Python-скрипт в sandbox:

import paho.mqtt.client as mqtt
import json
import requests
import time

BROKER = "test.mosquitto.org"
PORT = 1883
TOPIC_GESTURE = "gesture/result"
TOPIC_LIGHT = "light/command"
TELEGRAM_BOT_TOKEN = "YOUR_BOT_TOKEN"
TELEGRAM_CHAT_ID = "YOUR_CHAT_ID"

def on_message(client, userdata, msg):
    try:
        data = json.loads(msg.payload.decode())
        gesture = data.get("gesture")
        if gesture == 0:
            command = {"light": "on"}
        elif gesture == 1:
            command = {"light": "off"}
        else:
            return
        # Публикуем команду на ESP32
        client.publish(TOPIC_LIGHT, json.dumps(command))
        # Отправляем в Telegram
        text = f"Жест {gesture} -> свет {'включён' if gesture == 0 else 'выключен'}"
        requests.post(f"https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/sendMessage",
                      json={"chat_id": TELEGRAM_CHAT_ID, "text": text})
    except Exception as e:
        print(f"Error: {e}")

client = mqtt.Client()
client.on_message = on_message
client.connect(BROKER, PORT, 60)
client.subscribe(TOPIC_GESTURE)
client.loop_start()
# Ждём 30 секунд (таймаут sandbox)
time.sleep(30)
client.loop_stop()

Шаг 3. Автоматизация без сервера

Как только ASI Biont получает жест, он:
1. Публикует команду на ESP32 (свет включается).
2. Отправляет уведомление в Telegram.
3. Может логировать действие в Google Sheets (через requests к API Google) или сохранять в локальную БД (SQLite в sandbox).

Результаты

  • Задержка: от жеста до включения света — менее 200 мс (инференс на ESP32 ~50 мс, MQTT ~50 мс, обработка AI ~100 мс).
  • Надёжность: AI-агент продолжает работать даже если ESP32 перезагрузится — он переподключается по MQTT автоматически.
  • Гибкость: пользователь может в любой момент изменить логику (например, добавить «жест 2 — включить музыку») просто написав в чат.

Почему это выгодно: AI пишет код интеграции за секунды

Традиционная интеграция ESP32-S3 с AI-сервисом требует:
- Написать MQTT-клиент на Python для сервера.
- Настроить брокер (например, Mosquitto на VPS).
- Реализовать логику принятия решений.
- Развернуть Telegram-бота.

Всё это занимает от нескольких часов до дней. С ASI Biont пользователь просто описывает задачу на естественном языке, и AI-агент сам генерирует код, выполняет его в sandbox и подключается к устройству. Никаких панелей управления, кнопок «добавить устройство» — только диалог в чате.

Пример диалога:

Пользователь: «Подключись к моему ESP32-S3 через MQTT, брокер test.mosquitto.org, топик gesture/result. Если жест 0 — включи свет (топик light/command, {"light":"on"}), если 1 — выключи. И отправь мне в Telegram @myuser».
AI: «Подключаюсь... Готово. Слушаю топик gesture/result. Пришёл жест 0 — отправил команду на включение света и уведомление в Telegram.»

Заключение

ESP32-S3 с TensorFlow Lite Micro — это мощный инструмент для on-device ML, но его потенциал раскрывается только в связке с интеллектуальным агентом, который может принимать решения и управлять экосистемой устройств. ASI Biont заполняет этот пробел: он подключается к ESP32-S3 через MQTT (или любой другой протокол), обрабатывает данные инференса и запускает сценарии автоматизации — без серверов, без кодинга вручную, с полным контролем через чат.

Попробуйте сами: подключите ваш ESP32-S3 к ASI Biont на asibiont.com и создайте свою первую Edge AI-систему за 5 минут.

← Все статьи

Комментарии

Читайте также