Введение
Голосовое управление давно перестало быть фантастикой. Теперь достаточно сказать «Включи свет» или «Открой шторы», и умный дом реагирует. Но как сделать это без дорогих облачных сервисов и с полным контролем над данными? Ответ — Edge AI на базе I2S MEMS микрофонов (например, INMP441 или SPH0645LM4H) и AI-агента ASI Biont. В этой статье я покажу, как подключить такой микрофон к AI-агенту через ESP32 или Raspberry Pi, настроить распознавание ключевых слов (wake word) и автоматизировать действия — от включения света до отправки уведомлений в Telegram. Никаких сторонних голосовых ассистентов — только ваш код и AI, который пишет интеграцию за секунды.
Что такое I2S MEMS микрофон и зачем его подключать к AI-агенту?
I2S MEMS (Micro-Electro-Mechanical Systems) микрофоны — это компактные, энергоэффективные цифровые микрофоны, которые передают аудиоданные по интерфейсу I2S. Они идеальны для проектов Edge AI, потому что обработка звука происходит прямо на устройстве (on-device ML), без отправки аудио в облако. Это даёт три ключевых преимущества:
- Приватность: голосовые данные не покидают ваш дом.
- Скорость: команды выполняются за миллисекунды.
- Автономность: работа даже при обрыве интернета (для локальных действий).
Подключив такой микрофон к ASI Biont, вы получаете AI-агента, который не только распознаёт команды, но и может:
- управлять устройствами умного дома (через MQTT, HTTP API, Modbus);
- отправлять уведомления в Telegram;
- логировать события в базу данных;
- анализировать тренды (например, уровень шума в комнате).
Как AI-агент подключается к микрофону? Выбираем способ
ASI Biont поддерживает 14 способов подключения к устройствам. Для аудиообработки на ESP32 или Raspberry Pi оптимальны два:
| Устройство | Способ подключения | Почему именно он |
|---|---|---|
| ESP32 (MicroPython/C++) | MQTT или COM-порт через Hardware Bridge | ESP32 может публиковать аудио-события (например, «обнаружено слово 'свет'») в MQTT-топик. Если нужно прямое управление с ПК — используем bridge.py и COM-порт. |
| Raspberry Pi | SSH (paramiko) или execute_python | На Raspberry Pi можно запустить Python-скрипт с библиотекой SpeechRecognition или TensorFlow Lite для распознавания прямо на устройстве. AI подключается по SSH и управляет скриптом. |
В этой статье мы рассмотрим оба варианта с реальными примерами кода.
Сценарий 1: ESP32 + INMP441 + MQTT → ASI Biont
Задача: Распознать голосовую команду «Включи свет» и отправить её в ASI Biont, который включит умную лампочку через MQTT.
Шаг 1. Собираем схему
Подключите INMP441 к ESP32 по схеме:
- INMP441 VDD → ESP32 3.3V
- INMP441 GND → GND
- INMP441 SCK → GPIO26 (I2S BCLK)
- INMP441 WS → GPIO25 (I2S LRCLK)
- INMP441 SD → GPIO33 (I2S DIN)
- INMP441 L/R → GND (левый канал)
Шаг 2. Прошиваем ESP32 (MicroPython)
Установите MicroPython на ESP32 (инструкция на micropython.org). Затем загрузите скрипт, который читает I2S и детектирует ключевое слово по энергии сигнала (упрощённый вариант; для продакшена используйте TensorFlow Lite Micro с моделью wake word).
# main.py на ESP32
from machine import Pin, I2S
import network
import time
import json
from umqtt.simple import MQTTClient
# Настройка I2S
bclk = Pin(26)
lrclk = Pin(25)
din = Pin(33)
i2s = I2S(0, sck=bclk, ws=lrclk, sd=din, mode=I2S.RX, bits=16, format=I2S.MONO, rate=16000, ibuf=2048)
# MQTT настройки
WIFI_SSID = "ваш_ssid"
WIFI_PASS = "ваш_пароль"
MQTT_BROKER = "broker.hivemq.com"
MQTT_TOPIC = b"home/voice_command"
# Подключение к Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(WIFI_SSID, WIFI_PASS)
while not wlan.isconnected():
time.sleep(0.5)
# MQTT клиент
client = MQTTClient("esp32_audio", MQTT_BROKER)
client.connect()
# Простая детекция звука по RMS (порог подбирается)
THRESHOLD = 1000
def detect_sound():
buf = bytearray(1024)
i2s.readinto(buf)
samples = [int.from_bytes(buf[i:i+2], 'little') for i in range(0, len(buf), 2)]
rms = (sum(s*s for s in samples) / len(samples)) ** 0.5
return rms > THRESHOLD
# Основной цикл
while True:
if detect_sound():
# В реальном проекте здесь запускается распознавание через TensorFlow Lite
# Для демо отправляем заглушку "voice_detected"
payload = json.dumps({"event": "voice_detected", "device": "esp32_living_room"})
client.publish(MQTT_TOPIC, payload)
print("Опубликовано:", payload)
time.sleep(0.1)
Шаг 3. Подключаем ASI Biont к MQTT
В чате с AI-агентом ASI Biont пишем:
Подключись к MQTT-брокеру broker.hivemq.com, подпишись на топик home/voice_command. Когда придёт сообщение с event "voice_detected" от ESP32, включи умную лампочку через HTTP API на http://192.168.1.100/api/light/on. И отправь мне уведомление в Telegram: "Голосовая команда получена, свет включён".
AI автоматически генерирует и выполняет Python-скрипт в sandbox (через execute_python). Пример кода, который сгенерирует AI:
import paho.mqtt.client as mqtt
import requests
import json
TELEGRAM_TOKEN = "ваш_токен"
TELEGRAM_CHAT_ID = "ваш_chat_id"
def on_message(client, userdata, msg):
payload = json.loads(msg.payload)
if payload.get("event") == "voice_detected":
# Включаем свет
requests.get("http://192.168.1.100/api/light/on")
# Отправляем уведомление
text = "Голосовая команда получена, свет включён"
requests.post(f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage",
json={"chat_id": TELEGRAM_CHAT_ID, "text": text})
client = mqtt.Client()
client.on_message = on_message
client.connect("broker.hivemq.com", 1883, 60)
client.subscribe("home/voice_command")
client.loop_forever() # Внимание: в sandbox таймаут 30 сек, для продакшена используйте bridge
Важно: execute_python в sandbox имеет таймаут 30 секунд. Для постоянного мониторинга используйте Hardware Bridge (bridge.py) на своём ПК, который подключается к ASI Biont через WebSocket и может крутить бесконечный цикл.
Сценарий 2: Raspberry Pi + SPH0645LM4H + SSH → ASI Biont
Задача: На Raspberry Pi запущен Python-скрипт, который слушает микрофон и при обнаружении слова «помощь» отправляет уведомление в Telegram.
Шаг 1. Настройка Raspberry Pi
Подключите SPH0645LM4H по I2S (пины: BCLK=18, LRCLK=19, DIN=21, VDD=3.3V, GND=GND). Включите I2S в /boot/config.txt:
dtoverlay=googlevoicehat-codec
Установите зависимости:
sudo apt update
sudo apt install python3-pip portaudio19-dev
pip install pyaudio webrtcvad requests
Создайте скрипт listen.py:
import pyaudio
import webrtcvad
import requests
import json
# Настройки
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
FRAME_DURATION = 30 # ms
CHUNK = int(RATE * FRAME_DURATION / 1000)
VAD_MODE = 1 # агрессивность 0-3
vad = webrtcvad.Vad(VAD_MODE)
pa = pyaudio.PyAudio()
stream = pa.open(format=FORMAT, channels=CHANNELS, rate=RATE,
input=True, frames_per_buffer=CHUNK)
print("Слушаю...")
while True:
frame = stream.read(CHUNK)
is_speech = vad.is_speech(frame, RATE)
if is_speech:
# Здесь можно подключить распознавание через vosk или TensorFlow
# Для демо — просто отправляем событие
payload = {"event": "speech_detected", "device": "rpi_office"}
# Отправляем на локальный HTTP-сервер или MQTT
requests.post("http://localhost:8000/event", json=payload)
time.sleep(0.01)
Шаг 2. AI подключается по SSH
В чате ASI Biont пишем:
Подключись по SSH к 192.168.1.50 (логин: pi, пароль: raspberry). Запусти listen.py в фоне. Когда скрипт отправит событие speech_detected, отправь мне уведомление в Telegram: "В офисе обнаружена речь!"
AI сгенерирует код с paramiko и выполнит его:
import paramiko
import requests
import json
# Подключаемся по SSH
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.1.50", username="pi", password="raspberry")
# Запускаем скрипт в фоне (но screen или nohup)
ssh.exec_command("nohup python3 /home/pi/listen.py > /dev/null 2>&1 &")
# Для простоты AI может запустить скрипт, который сам слушает HTTP-эндпоинт
# Но в этом примере мы просто проверяем, что скрипт запущен
print("Скрипт запущен на RPi")
ssh.close()
Почему это выгодно?
Без ASI Biont вам пришлось бы:
- Писать код интеграции с MQTT/SSH/HTTP самостоятельно.
- Настраивать логику обработки событий.
- Разбираться с библиотеками и долбиться в дебаг.
С ASI Biont вы просто описываете задачу на естественном языке — AI пишет код за секунды. Ошибки? AI их видит и исправляет. Новое устройство? Просто опишите его в чате. Никаких дашбордов и кнопок «добавить устройство» — только диалог.
Заключение
Подключение I2S MEMS микрофона к ASI Biont открывает путь к созданию полностью приватной, быстрой и настраиваемой системы голосового управления. Вы сами решаете, какие слова слушать, куда отправлять данные и как реагировать. AI-агент берёт на себя всю рутину интеграции — от генерации кода до отладки. Попробуйте сами: опишите в чате на asibiont.com ваше устройство (ESP32, Raspberry Pi, любой микроконтроллер) и получите готовую интеграцию за минуту. Голосовой умный дом ближе, чем кажется.
Комментарии