Вы когда-нибудь хотели, чтобы ваш умный дом понимал вас с полуслова? Не через приложение, не через пульт, а просто: вы сказали — он сделал. С подключением микрофона к ASI Biont это становится реальностью. Сегодня разберём, как подключить два популярных микрофона — аналоговый MAX9814 и цифровой I2S INMP441 — к AI-агенту, настроить распознавание речи и автоматизировать команды. Поехали!
Зачем подключать микрофон к AI-агенту?
Микрофон — это «уши» для вашей системы. Само по себе устройство просто записывает звук, но в связке с ASI Biont оно превращается в полноценный голосовой интерфейс. Вы можете:
- Управлять освещением, климатом, шторами — просто сказав «Включи свет в гостиной».
- Отдавать команды промышленным контроллерам: «Подними температуру в цехе до 22 градусов».
- Запускать рабочие процессы: «Отправь отчёт на почту» или «Запусти тестирование партии №5».
- Интегрировать голосовой ввод в свои скрипты — например, для голосового заполнения форм или журналов.
ASI Biont — это AI-агент, который умеет подключаться к любому устройству через Python-код. Вам не нужно ждать готовых интеграций: вы описываете в чате, к чему подключиться и как, а AI сам пишет и выполняет код. Работает с ESP32, Raspberry Pi, Arduino, промышленными контроллерами и даже с вашим PC.
Способы подключения: что выберем для микрофона?
У ASI Biont есть несколько способов связи с железом: COM-порт, MQTT, Modbus, SSH, HTTP API, OPC-UA и другие. Но для микрофона — это особый случай. Микрофон не висит в сети и не имеет IP-адреса. Он подключается к микроконтроллеру (например, ESP32) по аналоговому или цифровому интерфейсу. Поэтому我们先 рассмотрим, как ESP32 с микрофоном общается с ASI Biont.
Вариант 1: ESP32 + MAX9814 + ASI Biont
MAX9814 — аналоговый микрофон с усилителем. Он подключается к аналоговому пину ESP32 (например, GPIO34). ESP32 читает уровень звука (RMS или пиковый) и передаёт его в ASI Biont по MQTT или через последовательный порт.
Схема подключения:
| MAX9814 | ESP32 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| OUT | GPIO34 (ADC) |
| AR | логический вход (можно не подключать или к GPIO 15 для регулировки) |
Код на MicroPython для ESP32:
from machine import Pin, ADC, Timer
import ujson
from umqtt.simple import MQTTClient
# Настройка АЦП
adc = ADC(Pin(34))
adc.atten(ADC.ATTN_11DB) # диапазон 0-3.6V
adc.width(ADC.WIDTH_12BIT) # 12 бит
# MQTT клиент
mqtt = MQTTClient('esp32_audio', '192.168.1.100', port=1883, user='biont', password='secret')
mqtt.connect()
def read_audio(timer):
# Считываем 100 значений за 10 мс и считаем RMS
samples = [adc.read() for _ in range(100)]
rms = (sum(s*s for s in samples) / len(samples)) ** 0.5
mqtt.publish(b'home/sound_level', ujson.dumps({'rms': rms, 'ts': time.time()}))
# Таймер на 1 Гц
tim = Timer(1)
tim.init(period=1000, mode=Timer.PERIODIC, callback=read_audio)
ASI Biont подписан на топик home/sound_level и анализирует уровень шума. Если RMS превышает порог, AI может запустить сценарий — например, отправить уведомление в Telegram или включить запись.
Но это ещё не распознавание речи. Для распознавания сам MAX9814 недостаточен — нужен речевой движок (например, Vosk или Google Speech). Как это сделать? Опционально: ESP32 записывает WAV-файл на SD-карту или отправляет аудиопоток по MQTT/HTTP на сервер, где ASI Biont использует Vosk для распознавания. Это можно автоматизировать через execute_python — AI напишет скрипт, который принимает аудио, распознаёт и выполняет команды.
Вариант 2: ESP32 + INMP441 + ASI Biont (цифровой I2S)
INMP441 — цифровой микрофон с интерфейсом I2S. Он даёт более чистое качество и не подвержен аналоговым помехам. Подключается к ESP32 по I2S-шине, что позволяет передавать PCM-аудио напрямую.
Схема подключения:
| INMP441 | ESP32 |
|---|---|
| VDD | 3.3V |
| GND | GND |
| SCK | GPIO26 (BCLK) |
| WS | GPIO25 (LRCLK) |
| SD | GPIO22 (DIN) |
| L/R | GND (левый канал) |
Чтение аудио в MicroPython:
from machine import I2S, Pin
import ustruct
# Настройка 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.TX, bits=16, format=I2S.MONO, rate=16000, ibuf=20000)
# Буфер для аудио (например, 3200 байт на 100 мс)
buf = bytearray(3200)
def read_audio():
i2s.readinto(buf)
# Здесь можно отправить buf по MQTT или сохранить в файл
return buf
Такой поток аудио можно отправлять в ASI Biont через WebSocket или HTTP POST. AI-агент, используя библиотеку pyaudio и Vosk, распознаёт команды.
Как ASI Biont подключается к устройству?
Вы, наверное, заметили, что я нигде не показывал настройку «подключения» в ASI Biont. Всё верно: вам не нужно создавать «устройство» в панели управления. Вы просто описываете задачу в чате: «Подключись к ESP32 на IP 192.168.1.50, порт 8080, читай JSON с уровнем звука. Если уровень больше 500 — включи свет в гостиной через MQTT». ASI Biont сам напишет Python-скрипт, который:
- Подключается к ESP32 по HTTP или MQTT.
- Получает данные.
- Анализирует их.
- Выполняет нужные действия.
Для этого используется универсальный метод execute_python — AI генерирует код в песочнице, запускает его и возвращает результат.
Пример: голосовое управление светом через INMP441
Допустим, вы хотите, чтобы при слове «свет» включался свет, при слове «музыка» — включалась музыка на колонках. Как это реализовать без сложной настройки?
Шаг 1. Опишите задачу в чате ASI Biont:
У меня есть ESP32 с микрофоном INMP441, он отправляет аудио на сервер по UDP на порт 5000. Напиши скрипт, который принимает это аудио, распознаёт слова «свет» и «музыка» с помощью Vosk, и при распознавании слова «свет» отправляет MQTT-команду на включение света, а при «музыка» — включает медиаплеер.
Шаг 2. AI пишет код — например, на Python с использованием pyaudio, vosk и paho-mqtt.
import paho.mqtt.client as mqtt
import vosk
import pyaudio
import json
# Настройка Vosk
model = vosk.Model("vosk-model-small-ru-0.22")
rec = vosk.KaldiRecognizer(model, 16000)
# MQTT
mqtt_client = mqtt.Client()
mqtt_client.connect("192.168.1.100", 1883)
# Аудио
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=4000)
print("Слушаю...")
while True:
data = stream.read(4000, exception_on_overflow=False)
if rec.AcceptWaveform(data):
result = json.loads(rec.Result())
text = result.get('text', '')
if 'свет' in text:
mqtt_client.publish("home/light", "ON")
elif 'музыка' in text:
mqtt_client.publish("home/music", "play")
Этот код запускается на сервере или на отдельной машине, где работает ASI Biont. AI сам подберёт нужные библиотеки и сгенерирует корректный код.
Автоматизация сбора данных и управление через чат
ASI Biont может не только выполнять команды, но и собирать данные с микрофона для последующего анализа. Например, вы можете попросить AI:
- «Собирай уровень шума каждый час и отправляй мне статистику в Telegram»
- «Если уровень шума превысит 60 дБ, предупреди меня и включи кондиционер»
- «Распознавай фразу „отчёт
Комментарии