From 0c6509cc178124514fe1f0f5278127bb14da3e9c Mon Sep 17 00:00:00 2001 From: ducoterra Date: Tue, 14 Oct 2025 12:31:14 -0400 Subject: [PATCH] add esphome notes --- active/device_esphome/.gitignore | 5 + active/device_esphome/default-atom-echo.yaml | 370 +++++++++++++++++ active/device_esphome/esphome.md | 179 ++++++++ .../device_esphome/great-room-atom-echo.yaml | 386 +++++++++++++++++ active/device_esphome/lilygo-tdongle.yaml | 118 ++++++ active/device_esphome/loft-atom-echo.yaml | 387 ++++++++++++++++++ active/device_esphome/test_tdongle_image.png | Bin 0 -> 3344 bytes active/device_esphome/test_tdongle_image.xcf | Bin 0 -> 8007 bytes .../device_esphome/wake_word_triggered.flac | Bin 0 -> 16782 bytes active/device_esphome/wake_word_triggered.wav | Bin 0 -> 90988 bytes 10 files changed, 1445 insertions(+) create mode 100644 active/device_esphome/.gitignore create mode 100644 active/device_esphome/default-atom-echo.yaml create mode 100644 active/device_esphome/esphome.md create mode 100644 active/device_esphome/great-room-atom-echo.yaml create mode 100644 active/device_esphome/lilygo-tdongle.yaml create mode 100644 active/device_esphome/loft-atom-echo.yaml create mode 100644 active/device_esphome/test_tdongle_image.png create mode 100644 active/device_esphome/test_tdongle_image.xcf create mode 100644 active/device_esphome/wake_word_triggered.flac create mode 100644 active/device_esphome/wake_word_triggered.wav diff --git a/active/device_esphome/.gitignore b/active/device_esphome/.gitignore new file mode 100644 index 0000000..d8b4157 --- /dev/null +++ b/active/device_esphome/.gitignore @@ -0,0 +1,5 @@ +# Gitignore settings for ESPHome +# This is an example and may include too much for your use-case. +# You can modify this file to suit your needs. +/.esphome/ +/secrets.yaml diff --git a/active/device_esphome/default-atom-echo.yaml b/active/device_esphome/default-atom-echo.yaml new file mode 100644 index 0000000..3c58093 --- /dev/null +++ b/active/device_esphome/default-atom-echo.yaml @@ -0,0 +1,370 @@ +substitutions: + name: m5stack-atom-echo + friendly_name: M5Stack Atom Echo + +esphome: + name: ${name} + name_add_mac_suffix: true + friendly_name: ${friendly_name} + min_version: 2025.5.0 + +esp32: + board: m5stack-atom + cpu_frequency: 240MHz + framework: + type: esp-idf + +logger: +api: + +ota: + - platform: esphome + id: ota_esphome + +wifi: + ap: + +captive_portal: + +button: + - platform: factory_reset + id: factory_reset_btn + name: Factory reset + +i2s_audio: + - id: i2s_audio_bus + i2s_lrclk_pin: GPIO33 + i2s_bclk_pin: GPIO19 + +microphone: + - platform: i2s_audio + id: echo_microphone + i2s_din_pin: GPIO23 + adc_type: external + pdm: true + sample_rate: 16000 + correct_dc_offset: true + +speaker: + - platform: i2s_audio + id: echo_speaker + i2s_dout_pin: GPIO22 + dac_type: external + bits_per_sample: 16bit + sample_rate: 16000 + channel: stereo # The Echo has poor playback audio quality when using mon audio + buffer_duration: 60ms + +media_player: + - platform: speaker + name: None + id: echo_media_player + announcement_pipeline: + speaker: echo_speaker + format: WAV + codec_support_enabled: false + buffer_size: 6000 + volume_min: 0.4 + files: + - id: timer_finished_wave_file + file: https://github.com/esphome/wake-word-voice-assistants/raw/main/sounds/timer_finished.wav + on_announcement: + - if: + condition: + - microphone.is_capturing: + then: + - script.execute: stop_wake_word + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + brightness: 100% + effect: none + on_idle: + - script.execute: start_wake_word + - script.execute: reset_led + +voice_assistant: + id: va + micro_wake_word: + microphone: + microphone: echo_microphone + channels: 0 + gain_factor: 4 + media_player: echo_media_player + noise_suppression_level: 2 + auto_gain: 31dBFS + on_listening: + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + effect: "Slow Pulse" + on_stt_vad_end: + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + effect: "Fast Pulse" + on_tts_start: + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + brightness: 100% + effect: none + on_end: + # Handle the "nevermind" case where there is no announcement + - wait_until: + condition: + - media_player.is_announcing: + timeout: 0.5s + # Restart only mWW if enabled; streaming wake words automatically restart + - if: + condition: + - lambda: return id(wake_word_engine_location).state == "On device"; + then: + - wait_until: + - and: + - not: + voice_assistant.is_running: + - not: + speaker.is_playing: + - lambda: id(va).set_use_wake_word(false); + - micro_wake_word.start: + - script.execute: reset_led + on_error: + - light.turn_on: + id: led + red: 100% + green: 0% + blue: 0% + brightness: 100% + effect: none + - delay: 2s + - script.execute: reset_led + on_client_connected: + - delay: 2s # Give the api server time to settle + - script.execute: start_wake_word + on_client_disconnected: + - script.execute: stop_wake_word + on_timer_finished: + - script.execute: stop_wake_word + - wait_until: + not: + microphone.is_capturing: + - switch.turn_on: timer_ringing + - light.turn_on: + id: led + red: 0% + green: 100% + blue: 0% + brightness: 100% + effect: "Fast Pulse" + - wait_until: + - switch.is_off: timer_ringing + - light.turn_off: led + - switch.turn_off: timer_ringing + +binary_sensor: + # button does the following: + # short click - stop a timer + # if no timer then restart either microwakeword or voice assistant continuous + - platform: gpio + pin: + number: GPIO39 + inverted: true + name: Button + disabled_by_default: true + entity_category: diagnostic + id: echo_button + on_multi_click: + - timing: + - ON for at least 50ms + - OFF for at least 50ms + then: + - if: + condition: + switch.is_on: timer_ringing + then: + - switch.turn_off: timer_ringing + else: + - script.execute: start_wake_word + - timing: + - ON for at least 10s + then: + - button.press: factory_reset_btn + +light: + - platform: esp32_rmt_led_strip + id: led + name: None + disabled_by_default: true + entity_category: config + pin: GPIO27 + default_transition_length: 0s + chipset: SK6812 + num_leds: 1 + rgb_order: grb + effects: + - pulse: + name: "Slow Pulse" + transition_length: 250ms + update_interval: 250ms + min_brightness: 50% + max_brightness: 100% + - pulse: + name: "Fast Pulse" + transition_length: 100ms + update_interval: 100ms + min_brightness: 50% + max_brightness: 100% + +script: + - id: reset_led + then: + - if: + condition: + - lambda: return id(wake_word_engine_location).state == "On device"; + - switch.is_on: use_listen_light + then: + - light.turn_on: + id: led + red: 100% + green: 89% + blue: 71% + brightness: 60% + effect: none + else: + - if: + condition: + - lambda: return id(wake_word_engine_location).state != "On device"; + - switch.is_on: use_listen_light + then: + - light.turn_on: + id: led + red: 0% + green: 100% + blue: 100% + brightness: 60% + effect: none + else: + - light.turn_off: led + - id: start_wake_word + then: + - if: + condition: + and: + - not: + - voice_assistant.is_running: + - lambda: return id(wake_word_engine_location).state == "On device"; + then: + - lambda: id(va).set_use_wake_word(false); + - micro_wake_word.start: + - if: + condition: + and: + - not: + - voice_assistant.is_running: + - lambda: return id(wake_word_engine_location).state == "In Home Assistant"; + then: + - lambda: id(va).set_use_wake_word(true); + - voice_assistant.start_continuous: + - id: stop_wake_word + then: + - if: + condition: + lambda: return id(wake_word_engine_location).state == "In Home Assistant"; + then: + - lambda: id(va).set_use_wake_word(false); + - voice_assistant.stop: + - if: + condition: + lambda: return id(wake_word_engine_location).state == "On device"; + then: + - micro_wake_word.stop: + +switch: + - platform: template + name: Use listen light + id: use_listen_light + optimistic: true + restore_mode: RESTORE_DEFAULT_ON + entity_category: config + on_turn_on: + - script.execute: reset_led + on_turn_off: + - script.execute: reset_led + - platform: template + id: timer_ringing + optimistic: true + restore_mode: ALWAYS_OFF + on_turn_off: + # Turn off the repeat mode and disable the pause between playlist items + - lambda: |- + id(echo_media_player) + ->make_call() + .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_REPEAT_OFF) + .set_announcement(true) + .perform(); + id(echo_media_player)->set_playlist_delay_ms(speaker::AudioPipelineType::ANNOUNCEMENT, 0); + # Stop playing the alarm + - media_player.stop: + announcement: true + on_turn_on: + # Turn on the repeat mode and pause for 1000 ms between playlist items/repeats + - lambda: |- + id(echo_media_player) + ->make_call() + .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_REPEAT_ONE) + .set_announcement(true) + .perform(); + id(echo_media_player)->set_playlist_delay_ms(speaker::AudioPipelineType::ANNOUNCEMENT, 1000); + - media_player.speaker.play_on_device_media_file: + media_file: timer_finished_wave_file + announcement: true + - delay: 15min + - switch.turn_off: timer_ringing + +select: + - platform: template + entity_category: config + name: Wake word engine location + id: wake_word_engine_location + optimistic: true + restore_value: true + options: + - In Home Assistant + - On device + initial_option: On device + on_value: + - if: + condition: + lambda: return x == "In Home Assistant"; + then: + - micro_wake_word.stop: + - delay: 500ms + - lambda: id(va).set_use_wake_word(true); + - voice_assistant.start_continuous: + - if: + condition: + lambda: return x == "On device"; + then: + - lambda: id(va).set_use_wake_word(false); + - voice_assistant.stop: + - delay: 500ms + - micro_wake_word.start: + +micro_wake_word: + on_wake_word_detected: + - voice_assistant.start: + wake_word: !lambda return wake_word; + vad: + models: + - model: okay_nabu + - model: hey_mycroft + - model: hey_jarvis diff --git a/active/device_esphome/esphome.md b/active/device_esphome/esphome.md new file mode 100644 index 0000000..2d5fc56 --- /dev/null +++ b/active/device_esphome/esphome.md @@ -0,0 +1,179 @@ +# ESP32 + +- [ESP32](#esp32) + - [Install](#install) + - [Devices](#devices) + - [Lilygo tdongle](#lilygo-tdongle) + - [Local Flashing](#local-flashing) + - [Adding a New Device](#adding-a-new-device) + - [Controlling Home Assistant](#controlling-home-assistant) + - [Configuration Sections](#configuration-sections) + - [esphome](#esphome) + - [esp32](#esp32-1) + - [logger](#logger) + - [api](#api) + - [wifi](#wifi) + - [ota](#ota) + - [captive portal](#captive-portal) + - [button](#button) + - [i2s audio](#i2s-audio) + - [microphone](#microphone) + - [speaker](#speaker) + - [media player](#media-player) + - [voice assistant](#voice-assistant) + - [micro wake word](#micro-wake-word) + - [light](#light) + - [binary sensor](#binary-sensor) + - [lambda](#lambda) + +## Install + +```bash +# Check that you have python 3.11 installed +uv python list --only-installed + +# Create the venv (python 3.11 is recommended in the docs) +uv venv --python 3.11 + +# Install esphome +uv pip install esphome wheel pip +source .venv/bin/activate +``` + +## Devices + +### Lilygo tdongle + +Display: 80 X 160 + +## Local Flashing + +Make sure your permissions are set correctly + +```bash +sudo usermod -a -G dialout ducoterra +``` + +Then "run" your config file + +```bash +cd active/device_esp32 +uv venv +uv pip install esphome +source .venv/bin/activate + +esphome run m5stack-atom-echo.yaml +``` + +## Adding a New Device + +1. Create a new yaml configuration file called "my-device-device-type.yaml" + +## Controlling Home Assistant + + + +## Configuration Sections + + + +### esphome + +### esp32 + + + +### logger + + + +### api + + + +### wifi + + + +### ota + + + + + +### captive portal + + + +### button + + + +### i2s audio + + + +### microphone + + + + + +### speaker + + + +### media player + + + +Sometimes you'll need to convert media files to supported encoders. + +```bash +ffmpeg -i input.flac output.wav +``` + +To play media on other devices from home assistant, put the + +```yaml +action: media_player.play_media +target: + entity_id: media_player.kitchen_google_home +data: + media_content_type: "audio/wav" + media_content_id: "media-source://media_source/local/wake_word_triggered.wav" +``` + +### voice assistant + + + +In Home Assistant's configuration.yaml, add the following to listen to +audio recordings of your voice request: + +```bash +assist_pipeline: + debug_recording_dir: /share/assist_pipeline +``` + +### micro wake word + + + +### light + + + +### binary sensor + + + +### lambda + + + +> id(...) is a helper function that makes ESPHome fetch an object with the +> supplied ID (which you defined somewhere else, like top_end_stop ) and lets +> you call any of ESPHome’s many APIs directly. For example, here we’re +> retrieving the current state of the end stop using .state and using it to +> construct our cover state. diff --git a/active/device_esphome/great-room-atom-echo.yaml b/active/device_esphome/great-room-atom-echo.yaml new file mode 100644 index 0000000..96748d6 --- /dev/null +++ b/active/device_esphome/great-room-atom-echo.yaml @@ -0,0 +1,386 @@ +esphome: + name: great-room-atom-echo + friendly_name: Great Room Atom Echo + +esp32: + board: m5stack-atom + framework: + type: esp-idf + +# Enable logging +logger: + level: debug + +# Enable Home Assistant API +api: + encryption: + key: !secret great_room_atom_echo_key + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + domain: .reeselink.com + fast_connect: true + enable_btm: true + on_disconnect: + - light.turn_on: + id: led + blue: 0% + red: 100% + green: 0% + effect: "Slow Pulse" + # Enable fallback hotspot (captive portal) in case wifi connection fails + ap: + ssid: "Great-Room-Atom-Echo" + password: !secret hotspot_password + +ota: + - platform: esphome + password: !secret ota_password + +captive_portal: + +button: + - platform: factory_reset + id: factory_reset_btn + name: Factory reset + +i2s_audio: + - id: i2s_audio_bus + i2s_lrclk_pin: GPIO33 + i2s_bclk_pin: GPIO19 + +microphone: + - platform: i2s_audio + id: echo_microphone + i2s_din_pin: GPIO23 + adc_type: external + pdm: true + sample_rate: 16000 + correct_dc_offset: true + +speaker: + - platform: i2s_audio + id: echo_speaker + i2s_dout_pin: GPIO22 + dac_type: external + bits_per_sample: 16bit + sample_rate: 16000 + channel: stereo # The Echo has poor playback audio quality when using mon audio + buffer_duration: 60ms + +media_player: + - platform: speaker + name: None + id: echo_media_player + announcement_pipeline: + speaker: echo_speaker + format: WAV + codec_support_enabled: false + buffer_size: 6000 + volume_min: 1 + volume_max: 1 + volume_initial: 1 + files: + - id: timer_finished_wave_file + file: https://github.com/esphome/wake-word-voice-assistants/raw/main/sounds/timer_finished.wav + on_announcement: + - if: + condition: + - microphone.is_capturing: + then: + - script.execute: stop_wake_word + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + brightness: 100% + effect: none + on_idle: + - script.execute: start_wake_word + - script.execute: reset_led + +voice_assistant: + id: va + micro_wake_word: + microphone: + microphone: echo_microphone + channels: 0 + gain_factor: 64 + media_player: echo_media_player + noise_suppression_level: 2 + auto_gain: 31dBFS + on_listening: + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + effect: "Slow Pulse" + on_stt_vad_end: + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + effect: "Fast Pulse" + on_tts_start: + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + brightness: 100% + effect: none + on_end: + # Handle the "nevermind" case where there is no announcement + - wait_until: + condition: + - media_player.is_announcing: + timeout: 0.5s + # Restart only mWW if enabled; streaming wake words automatically restart + - if: + condition: + - lambda: return id(wake_word_engine_location).state == "On device"; + then: + - wait_until: + - and: + - not: + voice_assistant.is_running: + - not: + speaker.is_playing: + - lambda: id(va).set_use_wake_word(false); + - micro_wake_word.start: + - script.execute: reset_led + on_error: + - light.turn_on: + id: led + red: 100% + green: 0% + blue: 0% + brightness: 100% + effect: none + - delay: 2s + - script.execute: reset_led + on_client_connected: + - delay: 2s # Give the api server time to settle + - script.execute: start_wake_word + on_client_disconnected: + - script.execute: stop_wake_word + on_timer_finished: + - script.execute: stop_wake_word + - wait_until: + not: + microphone.is_capturing: + - switch.turn_on: timer_ringing + - light.turn_on: + id: led + red: 0% + green: 100% + blue: 0% + brightness: 100% + effect: "Fast Pulse" + - wait_until: + - switch.is_off: timer_ringing + - light.turn_off: led + - switch.turn_off: timer_ringing + +binary_sensor: + # button does the following: + # short click - stop a timer + # if no timer then restart either microwakeword or voice assistant continuous + - platform: gpio + pin: + number: GPIO39 + inverted: true + name: Button + disabled_by_default: true + entity_category: diagnostic + id: echo_button + on_multi_click: + - timing: + - ON for at least 50ms + - OFF for at least 50ms + then: + - if: + condition: + switch.is_on: timer_ringing + then: + - switch.turn_off: timer_ringing + else: + - script.execute: start_wake_word + - timing: + - ON for at least 10s + then: + - button.press: factory_reset_btn + +light: + - platform: esp32_rmt_led_strip + id: led + name: None + disabled_by_default: true + entity_category: config + pin: GPIO27 + default_transition_length: 0s + chipset: SK6812 + num_leds: 1 + rgb_order: grb + effects: + - pulse: + name: "Slow Pulse" + transition_length: 250ms + update_interval: 250ms + min_brightness: 50% + max_brightness: 100% + - pulse: + name: "Fast Pulse" + transition_length: 100ms + update_interval: 100ms + min_brightness: 50% + max_brightness: 100% + +script: + - id: reset_led + then: + - if: + condition: + - lambda: return id(wake_word_engine_location).state == "On device"; + - switch.is_on: use_listen_light + then: + - light.turn_on: + id: led + red: 100% + green: 89% + blue: 71% + brightness: 60% + effect: none + else: + - if: + condition: + - lambda: return id(wake_word_engine_location).state != "On device"; + - switch.is_on: use_listen_light + then: + - light.turn_on: + id: led + red: 0% + green: 100% + blue: 100% + brightness: 60% + effect: none + else: + - light.turn_off: led + - id: start_wake_word + then: + - if: + condition: + and: + - not: + - voice_assistant.is_running: + - lambda: return id(wake_word_engine_location).state == "On device"; + then: + - lambda: id(va).set_use_wake_word(false); + - micro_wake_word.start: + - if: + condition: + and: + - not: + - voice_assistant.is_running: + - lambda: return id(wake_word_engine_location).state == "In Home Assistant"; + then: + - lambda: id(va).set_use_wake_word(true); + - voice_assistant.start_continuous: + - id: stop_wake_word + then: + - if: + condition: + lambda: return id(wake_word_engine_location).state == "In Home Assistant"; + then: + - lambda: id(va).set_use_wake_word(false); + - voice_assistant.stop: + - if: + condition: + lambda: return id(wake_word_engine_location).state == "On device"; + then: + - micro_wake_word.stop: + +switch: + - platform: template + name: Use listen light + id: use_listen_light + optimistic: true + restore_mode: RESTORE_DEFAULT_ON + entity_category: config + on_turn_on: + - script.execute: reset_led + on_turn_off: + - script.execute: reset_led + - platform: template + id: timer_ringing + optimistic: true + restore_mode: ALWAYS_OFF + on_turn_off: + # Turn off the repeat mode and disable the pause between playlist items + - lambda: |- + id(echo_media_player) + ->make_call() + .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_REPEAT_OFF) + .set_announcement(true) + .perform(); + id(echo_media_player)->set_playlist_delay_ms(speaker::AudioPipelineType::ANNOUNCEMENT, 0); + # Stop playing the alarm + - media_player.stop: + announcement: true + on_turn_on: + # Turn on the repeat mode and pause for 1000 ms between playlist items/repeats + - lambda: |- + id(echo_media_player) + ->make_call() + .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_REPEAT_ONE) + .set_announcement(true) + .perform(); + id(echo_media_player)->set_playlist_delay_ms(speaker::AudioPipelineType::ANNOUNCEMENT, 1000); + - media_player.speaker.play_on_device_media_file: + media_file: timer_finished_wave_file + announcement: true + - delay: 15min + - switch.turn_off: timer_ringing + +select: + - platform: template + entity_category: config + name: Wake word engine location + id: wake_word_engine_location + optimistic: true + restore_value: true + options: + - In Home Assistant + - On device + initial_option: On device + on_value: + - if: + condition: + lambda: return x == "In Home Assistant"; + then: + - micro_wake_word.stop: + - delay: 500ms + - lambda: id(va).set_use_wake_word(true); + - voice_assistant.start_continuous: + - if: + condition: + lambda: return x == "On device"; + then: + - lambda: id(va).set_use_wake_word(false); + - voice_assistant.stop: + - delay: 500ms + - micro_wake_word.start: + +micro_wake_word: + on_wake_word_detected: + - voice_assistant.start: + wake_word: !lambda return wake_word; + vad: + models: + - model: okay_nabu + - model: hey_mycroft + - model: hey_jarvis diff --git a/active/device_esphome/lilygo-tdongle.yaml b/active/device_esphome/lilygo-tdongle.yaml new file mode 100644 index 0000000..8e9d77f --- /dev/null +++ b/active/device_esphome/lilygo-tdongle.yaml @@ -0,0 +1,118 @@ +esphome: + name: tdongle + friendly_name: tdongle + +esp32: + board: esp32-s3-devkitc-1 + framework: + type: esp-idf + flash_size: 16MB + +logger: + +# Enable Home Assistant API +api: + encryption: + key: !secret lilygo_tdongle_key + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + domain: .reeselink.com + fast_connect: true + enable_btm: true + id: wifithing + # on_connect: + # - component.update: my_online_image + +ota: + - platform: esphome + password: !secret ota_password + +captive_portal: + +binary_sensor: + - platform: gpio + pin: GPIO0 + name: Button + +spi: + - id: spi_led + clk_pin: GPIO39 + mosi_pin: GPIO40 + - id: spi_lcd + clk_pin: GPIO5 + mosi_pin: GPIO3 + +output: + - platform: ledc + frequency: 2000 + pin: GPIO38 + inverted: True + id: backlight_output + +light: + - platform: monochromatic + output: backlight_output + name: "LCD Backlight" + id: lcd_backlight + restore_mode: ALWAYS_ON +# RGB Led, APA102 on GPIO39/GPIO40 + - platform: spi_led_strip + spi_id: spi_led + num_leds: 1 + name: "FastLED SPI Light" + data_rate: 1MHz # Adjust as needed, APA102 supports up to 20MHz, 1MHz is a safe starting point + +display: + - platform: st7735 + spi_id: spi_lcd + model: "INITR_MINI160X80" + reset_pin: GPIO1 + cs_pin: GPIO4 + dc_pin: GPIO2 + rotation: 270 + device_width: 82 + device_height: 161 + col_start: 0 + row_start: 0 + eight_bit_color: true + invert_colors: true + use_bgr: true + auto_clear_enabled: true + id: my_display + pages: + - id: page1 + lambda: |- + it.print(0, 10, id(font_roboto), "Connecting to"); + it.print(0, 30, id(font_roboto), "Home Assistant..."); + - id: page2 + lambda: |- + it.print(0, 10, id(font_roboto), "Configuring"); + it.print(0, 30, id(font_roboto), "sensors..."); + - id: page3 + lambda: |- + it.print(0, 10, id(font_roboto), "Loading"); + it.print(0, 30, id(font_roboto), "important"); + it.print(0, 50, id(font_roboto), "update..."); + - id: page4 + lambda: |- + it.image(0, 0, id(my_image), COLOR_OFF, COLOR_ON); + +image: + - file: "test_tdongle_image.png" + type: RGB + id: my_image + +http_request: + +font: + - file: "gfonts://Roboto" + id: font_roboto + size: 20 + +interval: + - interval: 5s + then: + - display.page.show_next: my_display + - component.update: my_display \ No newline at end of file diff --git a/active/device_esphome/loft-atom-echo.yaml b/active/device_esphome/loft-atom-echo.yaml new file mode 100644 index 0000000..5edd3c1 --- /dev/null +++ b/active/device_esphome/loft-atom-echo.yaml @@ -0,0 +1,387 @@ +esphome: + name: loft-atom-echo + friendly_name: Loft Atom Echo + +esp32: + board: m5stack-atom + cpu_frequency: 240MHz + framework: + type: esp-idf + +# Enable logging +logger: + level: debug + +# Enable Home Assistant API +api: + encryption: + key: !secret loft_atom_echo_key + +wifi: + ssid: !secret wifi_ssid + password: !secret wifi_password + domain: .reeselink.com + fast_connect: true + enable_btm: true + on_disconnect: + - light.turn_on: + id: led + blue: 0% + red: 100% + green: 0% + effect: "Slow Pulse" + # Enable fallback hotspot (captive portal) in case wifi connection fails + ap: + ssid: "Loft-Atom-Echo" + password: !secret hotspot_password + +ota: + - platform: esphome + password: !secret ota_password + +captive_portal: + +button: + - platform: factory_reset + id: factory_reset_btn + name: Factory reset + +i2s_audio: + - id: i2s_audio_bus + i2s_lrclk_pin: GPIO33 + i2s_bclk_pin: GPIO19 + +microphone: + - platform: i2s_audio + id: echo_microphone + i2s_din_pin: GPIO23 + adc_type: external + pdm: true + sample_rate: 16000 + correct_dc_offset: true + +speaker: + - platform: i2s_audio + id: echo_speaker + i2s_dout_pin: GPIO22 + dac_type: external + bits_per_sample: 16bit + sample_rate: 16000 + channel: stereo # The Echo has poor playback audio quality when using mon audio + buffer_duration: 60ms + +media_player: + - platform: speaker + name: None + id: echo_media_player + announcement_pipeline: + speaker: echo_speaker + format: WAV + codec_support_enabled: false + buffer_size: 6000 + volume_min: 1 + volume_max: 1 + volume_initial: 1 + files: + - id: timer_finished_wave_file + file: https://github.com/esphome/wake-word-voice-assistants/raw/main/sounds/timer_finished.wav + on_announcement: + - if: + condition: + - microphone.is_capturing: + then: + - script.execute: stop_wake_word + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + brightness: 100% + effect: none + on_idle: + - script.execute: start_wake_word + - script.execute: reset_led + +voice_assistant: + id: va + micro_wake_word: + microphone: + microphone: echo_microphone + channels: 0 + gain_factor: 64 + media_player: echo_media_player + noise_suppression_level: 2 + auto_gain: 31dBFS + on_listening: + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + effect: "Slow Pulse" + on_stt_vad_end: + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + effect: "Fast Pulse" + on_tts_start: + - light.turn_on: + id: led + blue: 100% + red: 0% + green: 0% + brightness: 100% + effect: none + on_end: + # Handle the "nevermind" case where there is no announcement + - wait_until: + condition: + - media_player.is_announcing: + timeout: 0.5s + # Restart only mWW if enabled; streaming wake words automatically restart + - if: + condition: + - lambda: return id(wake_word_engine_location).state == "On device"; + then: + - wait_until: + - and: + - not: + voice_assistant.is_running: + - not: + speaker.is_playing: + - lambda: id(va).set_use_wake_word(false); + - micro_wake_word.start: + - script.execute: reset_led + on_error: + - light.turn_on: + id: led + red: 100% + green: 0% + blue: 0% + brightness: 100% + effect: none + - delay: 2s + - script.execute: reset_led + on_client_connected: + - delay: 2s # Give the api server time to settle + - script.execute: start_wake_word + on_client_disconnected: + - script.execute: stop_wake_word + on_timer_finished: + - script.execute: stop_wake_word + - wait_until: + not: + microphone.is_capturing: + - switch.turn_on: timer_ringing + - light.turn_on: + id: led + red: 0% + green: 100% + blue: 0% + brightness: 100% + effect: "Fast Pulse" + - wait_until: + - switch.is_off: timer_ringing + - light.turn_off: led + - switch.turn_off: timer_ringing + +binary_sensor: + # button does the following: + # short click - stop a timer + # if no timer then restart either microwakeword or voice assistant continuous + - platform: gpio + pin: + number: GPIO39 + inverted: true + name: Button + disabled_by_default: true + entity_category: diagnostic + id: echo_button + on_multi_click: + - timing: + - ON for at least 50ms + - OFF for at least 50ms + then: + - if: + condition: + switch.is_on: timer_ringing + then: + - switch.turn_off: timer_ringing + else: + - script.execute: start_wake_word + - timing: + - ON for at least 10s + then: + - button.press: factory_reset_btn + +light: + - platform: esp32_rmt_led_strip + id: led + name: None + disabled_by_default: true + entity_category: config + pin: GPIO27 + default_transition_length: 0s + chipset: SK6812 + num_leds: 1 + rgb_order: grb + effects: + - pulse: + name: "Slow Pulse" + transition_length: 250ms + update_interval: 250ms + min_brightness: 50% + max_brightness: 100% + - pulse: + name: "Fast Pulse" + transition_length: 100ms + update_interval: 100ms + min_brightness: 50% + max_brightness: 100% + +script: + - id: reset_led + then: + - if: + condition: + - lambda: return id(wake_word_engine_location).state == "On device"; + - switch.is_on: use_listen_light + then: + - light.turn_on: + id: led + red: 100% + green: 89% + blue: 71% + brightness: 60% + effect: none + else: + - if: + condition: + - lambda: return id(wake_word_engine_location).state != "On device"; + - switch.is_on: use_listen_light + then: + - light.turn_on: + id: led + red: 0% + green: 100% + blue: 100% + brightness: 60% + effect: none + else: + - light.turn_off: led + - id: start_wake_word + then: + - if: + condition: + and: + - not: + - voice_assistant.is_running: + - lambda: return id(wake_word_engine_location).state == "On device"; + then: + - lambda: id(va).set_use_wake_word(false); + - micro_wake_word.start: + - if: + condition: + and: + - not: + - voice_assistant.is_running: + - lambda: return id(wake_word_engine_location).state == "In Home Assistant"; + then: + - lambda: id(va).set_use_wake_word(true); + - voice_assistant.start_continuous: + - id: stop_wake_word + then: + - if: + condition: + lambda: return id(wake_word_engine_location).state == "In Home Assistant"; + then: + - lambda: id(va).set_use_wake_word(false); + - voice_assistant.stop: + - if: + condition: + lambda: return id(wake_word_engine_location).state == "On device"; + then: + - micro_wake_word.stop: + +switch: + - platform: template + name: Use listen light + id: use_listen_light + optimistic: true + restore_mode: RESTORE_DEFAULT_ON + entity_category: config + on_turn_on: + - script.execute: reset_led + on_turn_off: + - script.execute: reset_led + - platform: template + id: timer_ringing + optimistic: true + restore_mode: ALWAYS_OFF + on_turn_off: + # Turn off the repeat mode and disable the pause between playlist items + - lambda: |- + id(echo_media_player) + ->make_call() + .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_REPEAT_OFF) + .set_announcement(true) + .perform(); + id(echo_media_player)->set_playlist_delay_ms(speaker::AudioPipelineType::ANNOUNCEMENT, 0); + # Stop playing the alarm + - media_player.stop: + announcement: true + on_turn_on: + # Turn on the repeat mode and pause for 1000 ms between playlist items/repeats + - lambda: |- + id(echo_media_player) + ->make_call() + .set_command(media_player::MediaPlayerCommand::MEDIA_PLAYER_COMMAND_REPEAT_ONE) + .set_announcement(true) + .perform(); + id(echo_media_player)->set_playlist_delay_ms(speaker::AudioPipelineType::ANNOUNCEMENT, 1000); + - media_player.speaker.play_on_device_media_file: + media_file: timer_finished_wave_file + announcement: true + - delay: 15min + - switch.turn_off: timer_ringing + +select: + - platform: template + entity_category: config + name: Wake word engine location + id: wake_word_engine_location + optimistic: true + restore_value: true + options: + - In Home Assistant + - On device + initial_option: On device + on_value: + - if: + condition: + lambda: return x == "In Home Assistant"; + then: + - micro_wake_word.stop: + - delay: 500ms + - lambda: id(va).set_use_wake_word(true); + - voice_assistant.start_continuous: + - if: + condition: + lambda: return x == "On device"; + then: + - lambda: id(va).set_use_wake_word(false); + - voice_assistant.stop: + - delay: 500ms + - micro_wake_word.start: + +micro_wake_word: + on_wake_word_detected: + - voice_assistant.start: + wake_word: !lambda return wake_word; + vad: + models: + - model: okay_nabu + - model: hey_mycroft + - model: hey_jarvis diff --git a/active/device_esphome/test_tdongle_image.png b/active/device_esphome/test_tdongle_image.png new file mode 100644 index 0000000000000000000000000000000000000000..4cbfeca89641efd8c858bade6ad2d0b0dc8079c2 GIT binary patch literal 3344 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 NAnuvymFuEk{s)=Ng#7>j literal 0 HcmV?d00001 diff --git a/active/device_esphome/test_tdongle_image.xcf b/active/device_esphome/test_tdongle_image.xcf new file mode 100644 index 0000000000000000000000000000000000000000..e44501a703bbfb26f42850764be8ad7e3daa26c1 GIT binary patch literal 8007 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 DE$8sS literal 0 HcmV?d00001 diff --git a/active/device_esphome/wake_word_triggered.wav b/active/device_esphome/wake_word_triggered.wav new file mode 100644 index 0000000000000000000000000000000000000000..ef1a53f668a1a664d724250a8aa6aea3796c91be GIT binary patch literal 90988 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

2poaw&}!i`VMlAF@@dE9WGcenlEveU6nUG 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 literal 0 HcmV?d00001