Cześć!
Kto śledził na forum walki ze sterowaniem głosowym powinien kojarzyć m.in mój poprzedni projekt: ESP32 smart głośnik v1.5
Obecny projekt jest nieco okrojoną wersją wersji v1.5 bo zrezygnowałem z głośnika na rzecz mniejszego gabarytu.
W między czasie wytestowałem bardzo dużo mikrofonów USB dla add-ona Assist Microphone, ale żaden nie wyróżnił się czymś “nadzyczajnym”, mało tego: uważam że poniższy projekt radził sobie lepiej z przechwytywaniem dźwięku.
Nie wprowadziłem żadnych istotnych zmian względem poprzedniego projektu (zmiana płytki na WROOM 32U), dlatego nie widzę potrzeby dodawania schematu. Jak jest wszystko zrobione widać na zdjęciach a świeży kod wkleję tu:
name: esp5-assist
friendly_name: esp5-assist
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "XXX"
ota:
- platform: esphome
password: "XXX"
wifi:
ssid: "XXX"
password: "XXX"
fast_connect: on
on_connect:
- script.execute: start
- delay: 3s
- script.execute: restarter
web_server:
port: 80
# Enable fallback hotspot (captive portal) in case wifi connection fails
# ap:
# ssid: "Esp5-Assist Fallback Hotspot"
# password: "XXX"
captive_portal:
button:
- platform: restart
name: Reboot
output:
- platform: ledc
pin: GPIO18
id: rtttl_out
rtttl:
output: rtttl_out
id: my_rtttl
light:
- platform: fastled_clockless
default_transition_length: 0.5s
id: ring
chipset: WS2811
pin: GPIO19
num_leds: 16
rgb_order: GRB
name: "FastLED WS2811 Light"
i2s_audio:
- id: i2s_mic
i2s_lrclk_pin: GPIO26 #WS
i2s_bclk_pin: GPIO25 #SCK
microphone:
- platform: i2s_audio
id: mikrofon
adc_type: external
channel: right
bits_per_sample: 32bit
i2s_audio_id: i2s_mic
i2s_din_pin: GPIO27 #DIN,SDIN,SD,SDATA
pdm: false
voice_assistant:
id: va
microphone: mikrofon
use_wake_word: true
noise_suppression_level: 3
auto_gain: 31dBFS
on_listening:
- light.turn_on:
id: ring
red: 0%
green: 0%
blue: 100%
brightness: 80%
- rtttl.play: 'two_short:d=4,o=5,b=100:16e6,16e6'
- delay: 3s
- light.turn_off:
id: ring
switch:
- platform: template
name: Use wake word
id: use_wake_word
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- lambda: id(va).set_use_wake_word(true);
- if:
condition:
not:
- voice_assistant.is_running
then:
- voice_assistant.start_continuous
on_turn_off:
- voice_assistant.stop
- lambda: id(va).set_use_wake_word(false);
interval:
- interval: 150s
then:
- script.execute: restarter
script:
- id: start
then:
- wait_until:
wifi.connected:
- logger.log: "polaczono"
- light.turn_on:
id: ring
red: 0%
green: 100%
blue: 0%
brightness: 80%
- delay: 3s
- light.turn_off:
id: ring
- id: restarter
then:
- switch.turn_off: use_wake_word
- delay: 80ms
- switch.turn_on: use_wake_word
Pliki do wydrukowania w .STL:
obudowa.zip (339,8 KB)
No i kilka fotek jak to się prezentuje:
Nie przez przypadek zrobiłem taką obudowę którą można postawić też w pionie Ukierunkowanie mikrofonu jest bardzo istotne dla sprawnego działania asystenta. Zasilanie podłączone bezpośrednio do płytki przez gniazdo usb które znajduje się głęboko w obudowie przez co trochę trudniej je podłączyć.
Wiemy jak jest z dostępnością Atomów Echo a jeśli lubisz się trochę pobawić w DIY to zapraszam do wspólnego majsterkowania