Для реализации проекта нам понадобится:
ESP32 S3: https://alii.pub/6xmljx?erid=2SDnjbqDzDf
Микрофон INMP441: https://alii.pub/6xmikz?erid=2SDnjdkN329
Усилитель D класса MAX98357: https://alii.pub/6xmiq8?erid=2SDnjcHs5SR
Динамик: https://alii.pub/6xmisr?erid=2SDnjchasww
Адресные светодиоды ws2812b: https://alii.pub/6xmini?erid=2SDnjbohK5s
Прежде чем приступить к материалу, я Вас попрошу, если нравится то, что я делаю и хотите следить за моей деятельностью, то рекомендую подписаться на мой телеграмм канал: https://t.me/ypavla
Там я публикую новости о вышедших видео, статьях и разные устройства для умного дома и не только показываю.
Спасибо за внимание, теперь продолжим.
В этой статье сделаем умную колонку с микрофоном на esp32 S3, которая будет управлять умным домом Home Assistant через голосовые команды. Причем команда пробуждения Wake up обрабатывается локально. То есть самой платой esp32 s3, что должно ускорить пробуждение, и быстроту срабатывания голосовой команды. Но пока в такой связке можно только 3 фразы для пробуждения выбрать. okay_nabu, hey_jarvis и Alexa
Для начала у Вас должен быть настроен Home Assistant для управления голосом. Как это сделать я описал в этой статье:
Управление голосом умным домом Home Assistant с помощью Whisper и Wyoming
И так-же сделал про эту настройку видео:
После этого нужно собрать по схеме все элементы на которые я оставил ссылки в начале статьи.
А именно Взять саму плату ESP32 s3, к ней подключить микрофон INMP441 по шине i2s, так-же по этой шине подключить усилитель MAX98357. К усилителю подключить динамик. на самой плате по ссылке выше уже встроен светодиод адресный ws2812, его собственно и будем использовать для визуального эффекта пробуждения колонки, ну и подключить все по схеме:
ESP32 S3 | INMP441 Microphone | Speaker |
---|---|---|
Vin (5v) | Vin | |
GND | Gnd | |
GPIO 6 | LRC | |
GPIO 7 | BLCK | |
GPIO 8 | DIN | |
GPIO 4 | SD | |
GPIO 3 | WS | |
GPIO 2 | SCK | |
3v3 | VDD | |
GND | GND & L/R |
Когда все подключите по схеме, В ESPHome нужно подготовить код, который будет выглядеть примерно так:
esphome:
name: esp32-s3-wake-word
friendly_name: ESP32-S3-Wake-word
platformio_options:
board_build.flash_mode: dio
on_boot:
- light.turn_on:
id: led_ww
blue: 100%
brightness: 60%
effect: fast pulse
esp32:
board: esp32-s3-devkitc-1
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP32S3_DEFAULT_CPU_FREQ_240: "y"
CONFIG_ESP32S3_DATA_CACHE_64KB: "y"
CONFIG_ESP32S3_DATA_CACHE_LINE_64B: "y"
CONFIG_AUDIO_BOARD_CUSTOM: "y"
psram:
mode: quad # quad for N8R2 and octal for N16R8
speed: 80MHz
# Enable logging
logger:
hardware_uart: UART0
# Enable Home Assistant API
api:
encryption:
key: "TFpb+pBAvQIS1MVwaA7EoJ2DkpWE+79UvVro7yMyGdU="
on_client_connected:
then:
- delay: 50ms
- light.turn_off: led_ww
- micro_wake_word.start:
on_client_disconnected:
then:
- voice_assistant.stop:
ota:
password: "1245211a05eef56614a2ef5a3f3e971c"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esp32-S3-Wake-Word"
password: "LJfUrdJk3svP"
captive_portal:
button:
- platform: restart
name: "Restart"
id: but_rest
switch:
- platform: template
id: mute
name: mute
optimistic: true
on_turn_on:
- micro_wake_word.stop:
- voice_assistant.stop:
- light.turn_on:
id: led_ww
red: 100%
green: 0%
blue: 0%
brightness: 60%
effect: fast pulse
- delay: 2s
- light.turn_off:
id: led_ww
- light.turn_on:
id: led_ww
red: 100%
green: 0%
blue: 0%
brightness: 30%
on_turn_off:
- micro_wake_word.start:
- light.turn_on:
id: led_ww
red: 0%
green: 100%
blue: 0%
brightness: 60%
effect: fast pulse
- delay: 2s
- light.turn_off:
id: led_ww
light:
- platform: esp32_rmt_led_strip
id: led_ww
rgb_order: GRB
pin: GPIO48
num_leds: 1
rmt_channel: 0
chipset: ws2812
name: "on board light"
effects:
- pulse:
- pulse:
name: "Fast Pulse"
transition_length: 0.5s
update_interval: 0.5s
min_brightness: 0%
max_brightness: 100%
# Audio and Voice Assistant Config
i2s_audio:
- id: i2s_in
i2s_lrclk_pin: GPIO3 #WS
i2s_bclk_pin: GPIO2 #SCK
- id: i2s_speaker
i2s_lrclk_pin: GPIO6 #LRC
i2s_bclk_pin: GPIO7 #BLCK
microphone:
- platform: i2s_audio
id: va_mic
adc_type: external
i2s_din_pin: GPIO4 #SD pin on the INMP441
channel: left
pdm: false
i2s_audio_id: i2s_in
bits_per_sample: 32 bit
speaker:
platform: i2s_audio
id: va_speaker
i2s_audio_id: i2s_speaker
dac_type: external
i2s_dout_pin: GPIO8 # DIN Pin of the MAX98357A Audio Amplifier
mode: mono
micro_wake_word:
on_wake_word_detected:
# then:
- voice_assistant.start:
wake_word: !lambda return wake_word;
- light.turn_on:
id: led_ww
red: 30%
green: 30%
blue: 70%
brightness: 60%
effect: fast pulse
model: hey_jarvis
voice_assistant:
id: va
microphone: va_mic
noise_suppression_level: 2.0
volume_multiplier: 4.0
speaker: va_speaker
on_stt_end:
then:
- light.turn_off: led_ww
on_error:
- micro_wake_word.start:
on_end:
then:
- light.turn_off: led_ww
- wait_until:
not:
voice_assistant.is_running:
- micro_wake_word.start:
После этого микрофон подключенный к ESP32 S3 будет постоянно слушать “окружающую среду” и как только услышит команду активации, дальше начнет транслировать вашу голосовую команду в сам Home Assistant.
Взят пример их этой статьи: https://smarthomecircle.com/How-to-setup-on-device-wake-word-for-voice-assistant-home-assistant