Hello,
Ne sachant que faire par ce beau temps breton , j’ai fouillé dans ma malle à bazar, espérant y dénicher quelques composants pour attaquer un petit montage DIY flash.
Au menu des trouvailles, un esp32 mini, un microphone INMP441, et un ring led WS2812, vestiges d’une ancienne installation WLED audio-reactif.
Comme par coïncidence, déjà équipé d’un ANKER S330 pour Assist-Microphone, d’un RPI3 avec hat respeaker 4 mic pour HomeAssistant-Satellite, c’est tout ce qu’il ma fallait pour débuter avec ESPHome et créer un 2ème satellite pour Assist mais sur base d’ESP32.
N’ayant ni haut-parleur ni DAC-Amplifier sous la main, ce sera donc sans retour TTS, mais avec retour d’état sur le ring.
ESPHome étant très bien documenté et en me basant sur les nombreux exemples disponibles , il ne m’a pas fallut longtemps pour avoir quelques chose de fonctionnel et plutôt sympa (reste à lui créer un bel emballage )
Seul défaut, l’INMP441 dont je dispose n’est plus au top au niveau sensibilité/portée, il a pris une claque pendant son stockage , il sera rapidement remplacé par un ics-43434.
Donc, pour ceux qui veulent tester , voici le yaml pour la conception de ce satellite.
A noter que lorsque le wakeword est désactivé, on peut gérer la ring led WS2812 indépendamment.
esphome:
name: satellite1
friendly_name: Satellite1
on_boot:
- priority: -100
then:
- wait_until: api.connected
- delay: 1s
- voice_assistant.start_continuous:
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "XXXXXXXXX"
ota:
password: "XXXXXXXXX"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Test Fallback Hotspot"
password: "XXXXXXX"
captive_portal:
light:
- platform: neopixelbus
variant: WS2812
pin: GPIO16
num_leds: 16
type: GRB
name: "Neopixel Light"
id: led
effects:
- pulse:
name: Pulse
transition_length: 0.5s
update_interval: 0.5s
min_brightness: 0%
max_brightness: 100%
- addressable_scan:
name: Scan
move_interval: 50ms
scan_width: 4
i2s_audio:
- id: i2s_in
i2s_lrclk_pin: GPIO25
i2s_bclk_pin: GPIO32
microphone:
- platform: i2s_audio
adc_type: external
pdm: false
id: mic_i2s
channel: left
bits_per_sample: 32bit
i2s_audio_id: i2s_in
i2s_din_pin: GPIO33
voice_assistant:
id: va
microphone: mic_i2s
use_wake_word: true
on_listening:
- light.turn_on:
id: led
blue: 100%
red: 0%
green: 0%
brightness: 100%
effect: Scan
on_tts_start:
- light.turn_on:
id: led
blue: 0%
red: 100%
green: 0%
brightness: 100%
effect: Pulse
on_end:
- delay: 500ms
- light.turn_off: led
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);
Amusez-vous bien
@+