Голосовое управление и аудиоаналитика на Edge AI: как подключить I2S MEMS-микрофон к ASI Biont

Введение

Современные микроконтроллеры, такие как ESP32, оснащённые I2S MEMS-микрофонами (например, INMP441), позволяют захватывать аудиопоток с высоким качеством и минимальной задержкой. Однако интерпретировать звук, распознавать команды, фильтровать шум и принимать решения на основе аудиоданных — задача, требующая AI-агента. Платформа ASI Biont решает эту проблему: AI-агент подключается к аудиоустройству, обрабатывает данные на границе сети (Edge AI) и автоматизирует сценарии умного дома, мониторинга или голосового управления — без необходимости писать код вручную.

Как ASI Biont подключается к I2S MEMS-микрофону?

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

  • Низкая задержка: MQTT оптимизирован для IoT и работает даже при нестабильном соединении.
  • Двусторонняя связь: микрофон отправляет аудиоданные в ASI Biont (через ESP32), а AI-агент может отправлять команды обратно (например, включить свет при голосовой команде).
  • Простота: ESP32 с помощью MicroPython или Arduino подключается к MQTT-брокеру (например, Mosquitto) и публикует аудиофрагменты в топик.

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

Способ Когда использовать
MQTT (paho-mqtt) Для аудиостримов с ESP32, датчиков умного дома
Hardware Bridge (COM-порт) Для старых микрофонных модулей с UART-интерфейсом
SSH (paramiko) Если микрофон подключён к Raspberry Pi, где работает скрипт захвата звука
HTTP API (aiohttp) Для IP-микрофонов с REST API (например, AXIS Audio)

В этой статье мы рассмотрим самый популярный сценарий: ESP32 + I2S MEMS-микрофон (INMP441) → MQTT → ASI Biont.

Конкретный сценарий: голосовое управление светом через ESP32 и ASI Biont

Шаг 1. Подготовка устройства

Соберите схему:
- ESP32 (любая модель с I2S, например, ESP32-WROOM-32)
- INMP441 (I2S MEMS-микрофон): подключите к пинам ESP32 (SCK -> GPIO26, WS -> GPIO25, SD -> GPIO33, L/R -> GND)
- Светодиод или реле для управления светом (GPIO12)

Установите на ESP32 прошивку на MicroPython (или Arduino), которая:
1. Читает аудиоданные с I2S (16-bit, 16 кГц, моно)
2. Публикует их в MQTT-топик sensor/audio/raw (например, каждые 100 мс)
3. Подписывается на топик actuator/light для получения команд от ASI Biont

Пример кода для ESP32 (MicroPython):

import network
import time
import ustruct
from machine import Pin, I2S
from umqtt.simple import MQTTClient

# Настройка Wi-Fi
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect('SSID', 'PASSWORD')
while not wifi.isconnected():
    time.sleep(0.5)

# Настройка I2S
i2s = I2S(0, sck=Pin(26), ws=Pin(25), sd=Pin(33), mode=I2S.RX, bits=16, format=I2S.MONO, rate=16000, ibuf=4096)

# MQTT-клиент
client = MQTTClient('esp32_audio', 'mqtt.broker.local', port=1883)
client.connect()
client.set_callback(lambda topic, msg: handle_command(msg))
client.subscribe(b'actuator/light')

def handle_command(msg):
    if msg == b'ON':
        Pin(12, Pin.OUT).on()
    elif msg == b'OFF':
        Pin(12, Pin.OUT).off()

# Основной цикл
buf = bytearray(1024)
while True:
    i2s.readinto(buf)
    # Отправляем сырые PCM-данные (можно сжать, но для примера — как есть)
    client.publish(b'sensor/audio/raw', buf)
    client.check_msg()  # проверяем команды
    time.sleep_ms(100)

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

Пользователь открывает чат с AI-агентом ASI Biont и пишет, например:

«Подключись к MQTT-брокеру по адресу mqtt.broker.local:1883, без авторизации. Подпишись на топик sensor/audio/raw, где ESP32 публикует аудиоданные с I2S-микрофона. Я хочу, чтобы при произнесении слова "свет" включался светодиод — для этого публикуй команду "ON" в топик actuator/light. Используй шумоподавление: сначала преобразуй PCM в спектрограмму через numpy.fft, отфильтруй частоты ниже 300 Гц и выше 3400 Гц (голосовой диапазон), затем детектируй ключевое слово с помощью простого порога энергии или, если возможно, используй библиотеку speech_recognition (если есть в sandbox).»

AI-агент создаёт Python-скрипт, который выполняется в sandbox с помощью execute_python. В sandbox доступны библиотеки: numpy, paho-mqtt, aiohttp, requests и другие (полный список в документации).

Пример кода, который генерирует AI (упрощённый вариант):

import paho.mqtt.client as mqtt
import numpy as np

BROKER = 'mqtt.broker.local'
PORT = 1883
TOPIC_AUDIO = 'sensor/audio/raw'
TOPIC_LIGHT = 'actuator/light'

# Порог энергии для детекции голоса (эвристика)
ENERGY_THRESHOLD = 500

def on_message(client, userdata, msg):
    # Преобразуем байты в массив int16 (PCM 16-bit)
    pcm_data = np.frombuffer(msg.payload, dtype=np.int16)
    if len(pcm_data) < 256:
        return
    # Простой энергетический детектор
    energy = np.sum(pcm_data ** 2) / len(pcm_data)
    if energy > ENERGY_THRESHOLD:
        # Имитация распознавания: если энергия высокая — считаем, что сказали "свет"
        client.publish(TOPIC_LIGHT, 'ON')
        print("Detected voice command -> light ON")
    else:
        # Если тихо — выключаем (или ничего не делаем)
        client.publish(TOPIC_LIGHT, 'OFF')

def main():
    client = mqtt.Client()
    client.on_message = on_message
    client.connect(BROKER, PORT, 60)
    client.subscribe(TOPIC_AUDIO)
    client.loop_forever()  # выполняется до таймаута sandbox (30 сек)

if __name__ == '__main__':
    main()

Важно: Sandbox ASI Biont имеет таймаут 30 секунд, поэтому бесконечный цикл (client.loop_forever()) будет прерван. В реальном сценарии AI-агент запускает скрипт периодически (например, каждые 10 секунд) или использует внешний брокер с долгоживущим подключением.

Шаг 3. Результат

После запуска скрипта ESP32 публикует аудиоданные, ASI Biont анализирует их, и при обнаружении голосовой команды отправляет сигнал на включение света. Всё работает в реальном времени с задержкой менее 1 секунды (зависит от скорости сети и размера буфера).

Почему это выгодно?

  • Не нужно писать код вручную: AI-агент сам генерирует Python-скрипт под ваше устройство и сценарий. Вы просто описываете задачу на естественном языке.
  • Универсальность: ASI Biont подключается к любому устройству через execute_python — не нужно ждать обновлений платформы. Если ваше устройство говорит на MQTT, Modbus, HTTP или COM-порт — AI подберёт нужную библиотеку.
  • Edge AI: аудиоаналитика выполняется на стороне микроконтроллера или AI-агента, что снижает нагрузку на облако и задержку.
  • Автоматизация: можно создавать сложные сценарии — например, при обнаружении определённого звука (разбитое стекло, плач ребёнка) отправлять уведомление в Telegram или включать сирену.

Другие сценарии с I2S MEMS-микрофоном и ASI Biont

  1. Мониторинг шума на производстве: ESP32 с INMP441 измеряет уровень шума в цехе и публикует данные в MQTT. ASI Biont анализирует превышение нормы (например, >85 дБ) и отправляет отчёт в Slack.
  2. Детекция событий: AI-агент распознаёт специфические звуки (звонок в дверь, лай собаки, сигнализация) и запускает запись видео с камеры.
  3. Голосовое управление без облака: все команды обрабатываются локально на ESP32 (с помощью Edge ML), а ASI Biont используется для логирования и настройки.

Заключение

Интеграция I2S MEMS-микрофона с AI-агентом ASI Biont открывает мир голосового управления и аудиоаналитики без сложного программирования. Вы подключаете ESP32 к MQTT, описываете сценарий в чате, и AI сам пишет код, настраивает шумоподавление и автоматизирует реакции. Попробуйте прямо сейчас: зайдите на asibiont.com, подключите своё аудиоустройство и убедитесь, что AI-агент справляется за секунды.

← Все статьи

Комментарии

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