I2S MEMS микрофон + ESP32 + ASI Biont: голосовое управление умным домом без кода
Вы когда-нибудь хотели, чтобы ваша кофеварка понимала голос, а кондиционер включался по команде с другого конца комнаты? Или мечтали собрать систему шумового мониторинга для цеха, которая сама отправляет отчёты в Telegram? Связка I2S MEMS-микрофона (INMP441, ICS-43434) и ESP32 — это классика Edge AI и on-device ML, но главный вопрос — как передать звук в «мозг» умного дома. Ответ — ASI Biont, AI-агент, который берёт на себя всю рутину интеграции и автоматизации.
В этой статье я покажу, как подключить I2S MEMS-микрофон к ESP32, как настроить передачу аудиопотока или детектированных событий в ASI Biont, и как с помощью штатного AI-конструктора интеграций заставить свет загораться по слову «огонь» и получать уведомления о превышении шума. И всё это — без единой строчки кода со стороны пользователя: AI сам напишет интеграцию на Python под ваше устройство.
Почему именно I2S MEMS и ESP32?
I2S MEMS-микрофоны (например, INMP441 от TDK InvenSense) — это цифровые микрофоны с интерфейсом I2S. Они дешевле аналоговых (от $2-3), имеют широкий динамический диапазон и отлично подключаются к ESP32, у которого аппаратный I2S-контроллер есть на борту. Ключевое преимущество — поток PCM, который можно обрабатывать локально (edge) или отправлять по сети.
Схема подключения простая:
- VDD → 3.3V
- GND → GND
- SCK (bit clock) → GPIO 26
- WS (word select) → GPIO 25
- SD (data) → GPIO 22
Для ICS-43434 пины те же, только у него I2S-адрес настраивается перемычкой.
Как ASI Biont подключается к устройству
ASI Biont — это AI-агент, который работает через чат. Вы описываете ему свою задачу человеческим языком, а он сам выбирает протокол, пишет код и выполняет его. Для подключения устройства доступно несколько протоколов:
| Протокол | Библиотека | Когда использовать |
|---|---|---|
| MQTT | paho-mqtt | Когда ESP32 публикует данные в брокер |
| HTTP/WebSocket | aiohttp | Для прямого обмена с ESP32 по REST или WS |
| Modbus/TCP | pymodbus | Для промышленных контроллеров |
| SSH | paramiko | Если ESP32 работает под Linux (MicroPython) |
| OPC-UA | opcua-asyncio | Для SCADA и IIoT платформ |
В нашем случае для аудиопотока удобнее всего MQTT — он лёгкий и поддерживается из коробки в MicroPython. Но ASI Biont может использовать и execute_python — универсальный инструмент, когда AI пишет Python-скрипт под ваше устройство и выполняет его в sandbox. Именно это открывает безграничные возможности: не нужно ждать готовых драйверов.
Пример 1. Голосовое управление светом через MQTT
Представьте: ESP32 с микрофоном распознает слово «свет» локально (например, по пороговой громкости или через Edge Impulse), а затем отправляет команду по MQTT в ASI Biont, которая уже управляет умным замком или реле.
Микропитон-код на ESP32 (фрагмент):
from machine import I2S, Pin
import ujson
import umqtt.simple as mqtt
# Инициализация I2S
sck_pin = Pin(26)
ws_pin = Pin(25)
sd_pin = Pin(22)
i2s = I2S(0,
sck=sck_pin,
ws=ws_pin,
sd=sd_pin,
mode=I2S.RX,
bits=16,
format=I2S.MONO,
rate=16000,
ibuf=20000)
# Простейшее детектирование: амплитуда > порога
buffer = bytearray(1024)
def get_level():
i2s.readinto(buffer)
samples = [int.from_bytes(buffer[i:i+2], 'little') for i in range(0, len(buffer), 2)]
peak = max(samples) - min(samples)
return peak
# Подключение к MQTT брокеру
client = mqtt.MQTTClient('esp32', '192.168.1.100', user='biont', password='secret')
client.connect()
while True:
if get_level() > 5000: # порог громкости
client.publish('home/room/voice', ujson.dumps({'cmd': 'light_on'}))
time.sleep(1)
Этот код будет работать в ASI Biont, но важно: сам AI-агент не пишет код для микроконтроллера — пользователь загружает его на ESP32 сам. Зато ASI Biont пишет Python-скрипт, который подключается к MQTT-брокеру и слушает топик.
Как это выглядит в чате ASI Biont:
Пользователь: "Подключись к MQTT-брокеру 192.168.1.100, подпишись на топик home/room/voice. Когда придёт сообщение с командой "light_on", включи свет через HTTP на реле 192.168.1.50"
ASI Biont генерирует код на Python с использованием paho-mqtt и aiohttp, запускает его через execute_python, и автоматизация готова.
Python-код, который AI напишет сам (пример):
import paho.mqtt.client as mqtt
import requests
def on_message(client, userdata, msg):
data = json.loads(msg.payload)
if data.get('cmd') == 'light_on':
requests.post('http://192.168.1.50/relay', json={'state': 'on'})
client = mqtt.Client()
client.username_pw_set('biont', 'secret')
client.connect('192.168.1.100')
client.subscribe('home/room/voice')
client.on_message = on_message
client.loop_forever()
Обратите внимание: в реальном sandbox ASI Biont loop_forever() не пройдёт из-за таймаута 30 секунд. AI адаптирует код — например, будет опрашивать топик раз в 5 секунд в течение 25 секунд, а затем перезапустится. Поэтому для долгоживущих задач лучше использовать встроенные механизмы автоматизации.
Пример 2. Звуковая аналитика в цеху
Другой сценарий — мониторинг шума на производстве. ESP32 с I2S-микрофоном измеряет уровень шума в дБ, отправляет его в ASI Biont по MQTT, а AI уже анализирует тренды и оповещает через Telegram.
Для этого не нужно передавать сырой аудиопоток — достаточно усреднённого значения амплитуды. ESP32 может отправлять данные каждые 10 секунд, а ASI Biont накапливает их в JSON и при превышении порога отправляет сообщение.
Код на стороне ESP32 (MicroPython):
import math
# ... как в предыдущем примере, но дополнительно вычисляем RMS
def rms():
i2s.readinto(buffer)
samples = [int.from_bytes(buffer[i:i+2], 'little') for i in range(0, len(buffer), 2)]
avg = sum(samples) / len(samples)
rms = math.sqrt(sum((s - avg) ** 2 for s in samples) / len(samples))
return rms
client.publish('factory/shouldb/level', ujson.dumps({'db': rms()}))
А в ASI Biont сценарий: если средний уровень шума за 5 минут > 85 дБ — отправить алерт через Telegram (через requests.post к api.telegram.org).
Универсальная интеграция через execute_python
Главная фишка ASI Biont — умение подключаться к ЛЮБОМУ устройству через execute_python. Не нужно ждать, пока разработчики добавят официальную поддержку вашего девайса. Вы просто описываете в чате: "у меня есть промышленный контроллер с Modbus/TCP по адресу 192.168.1.10, регистр 4x4001 отвечает за температуру", и AI сам пишет код с pymodbus. Или: "у меня GPS-трекер на COM-порту, baud 9600, пришлёт NMEA-строки", и AI использует bridge.py для чтения.
Для этого не требуется панель управления — только диалог с AI. Это радикально ускоряет разработку: средняя интеграция занимает минуты вместо дней.
Практические советы и подводные камни
- Питание: I2S MEMS микрофоны чувствительны к шуму по питанию. Ставьте конденсатор 0.1 мкФ на VDD.
- Библиотеки: для ESP32 используйте
MicroPythonили Arduino-библиотекуesp32-arduino-lib-builder. В Python —pyaudioилиnumpyдля обработки PCM. - Таймауты: в execute_python нельзя вызывать
while True— скрипт упадёт через 30 секунд. Используйте однократные запросы или оформляйте постоянные слушатели через MQTT встроенными средствами ASI Biont. - Безопасность: при использовании MQTT всегда включайте аутентификацию, иначе любой в локальной сети сможет управлять вашим домом.
Итог
Интеграция I2S MEMS микрофона с ASI Biont — это не просто игрушка, а рабочий инструмент для голосового управления и звуковой аналитики. Вы освобождаете себя от написания кода интеграции: AI-агент делает это за вас, а вы лишь описываете цель. Хотите попробовать? Перейдите на asibiont.com, создайте своего агента и подключите первый микрофон — остальное сделает AI.
Комментарии