189 lines
6.9 KiB
YAML
189 lines
6.9 KiB
YAML
####################################################################################################
|
|
##### TX Ultimate Easy for ESPHome #####
|
|
##### Repository: https://github.com/edwardtfn/TX-Ultimate-Easy #####
|
|
####################################################################################################
|
|
##### Purpose: ESPHome - Standard - Hardware - Speaker #####
|
|
####################################################################################################
|
|
##### Author: edwardtfn - https://github.com/edwardtfn - https://buymeacoffee.com/edwardfirmo #####
|
|
####################################################################################################
|
|
##### NOTE: #####
|
|
##### - Make changes ONLY if absolutely necessary and you have the required knowledge. #####
|
|
##### - For normal system use, modifications to this file are NOT required. #####
|
|
####################################################################################################
|
|
---
|
|
substitutions:
|
|
# RTTTL format: name:d=duration,o=octave,b=tempo:notes
|
|
# d=32 (32nd note), o=5 (octave 5), b=100 (tempo 100)
|
|
tone_volume_change: "scale_up:d=32,o=5,b=100:c,c#,d#,e,f#,g#,a#,b" # Use "none" to disable sound
|
|
|
|
TAG_STD_HW_SPEAKER: std.hw.speaker
|
|
|
|
packages:
|
|
standard_hw_audio: !include TX-Ultimate-Easy-ESPHome_standard_hw_audio.yaml
|
|
|
|
api:
|
|
actions:
|
|
- action: rtttl_play
|
|
variables:
|
|
# The RTTTL string for the melody to be played.
|
|
# It should follow the RTTTL format, including the melody's name,
|
|
# default settings, and a sequence of notes.
|
|
tone: string
|
|
then:
|
|
- lambda: |-
|
|
rtttl_speaker->stop();
|
|
if (speaker_volume->state > 0) {
|
|
ESP_LOGI("${TAG_STD_HW_SPEAKER}", "Play tone: '%s'", tone.c_str());
|
|
rtttl_speaker->play(tone.c_str());
|
|
}
|
|
|
|
esphome:
|
|
platformio_options:
|
|
build_flags:
|
|
- -D TX_ULTIMATE_EASY_STANDARD_HW_SPEAKER
|
|
|
|
number:
|
|
- id: speaker_volume
|
|
name: Speaker Volume
|
|
platform: template
|
|
max_value: 100
|
|
min_value: 0
|
|
step: 1
|
|
initial_value: 100
|
|
unit_of_measurement: "%"
|
|
internal: false
|
|
disabled_by_default: true
|
|
entity_category: config
|
|
device_class: sound_pressure
|
|
restore_value: true
|
|
optimistic: true
|
|
set_action:
|
|
then:
|
|
- speaker.volume_set:
|
|
id: speaker_embedded
|
|
volume: !lambda return x/100.0f;
|
|
- lambda: |-
|
|
static const std::string tone_volume_change = "${tone_volume_change}";
|
|
// Play sound if tone_volume_change is not "none"
|
|
if (x > 0 and !tone_volume_change.empty() and tone_volume_change != "none")
|
|
rtttl_speaker->play(tone_volume_change);
|
|
|
|
rtttl:
|
|
- id: rtttl_speaker
|
|
speaker: speaker_embedded
|
|
|
|
script:
|
|
- id: !extend dump_config_list_packages
|
|
then:
|
|
- script.wait: dump_config
|
|
- lambda: |-
|
|
// Check for requirements
|
|
#if !defined(TX_ULTIMATE_EASY_CORE_COMMON)
|
|
#error "The package TX-Ultimate-Easy-ESPHome_core_common.yaml is required."
|
|
#endif
|
|
#if !defined(TX_ULTIMATE_EASY_STANDARD_HW_AUDIO)
|
|
#error "The package TX-Ultimate-Easy-ESPHome_standard_hw_audio.yaml is required."
|
|
#endif
|
|
|
|
// Identify itself
|
|
ESP_LOGCONFIG(ESPHOME_PROJECT_NAME, " - Standard - Hardware - Speaker");
|
|
|
|
- id: speaker_play_click
|
|
then:
|
|
- if:
|
|
condition:
|
|
not:
|
|
- speaker.is_playing: speaker_embedded
|
|
then:
|
|
- speaker.play:
|
|
id: speaker_embedded
|
|
data: [
|
|
0x01, 0x02, 0x04, 0x06, 0x07, 0x08, 0x08, 0x06, 0x01, 0xFA, 0xF4,
|
|
0xEF, 0xEE, 0xF1, 0xF7, 0xFF, 0x07, 0x0E, 0x11, 0x11, 0x10, 0x0C,
|
|
0x06, 0xFF, 0xF8, 0xF1, 0xEC, 0xEA, 0xEC, 0xF2, 0xF9, 0xFF, 0x05,
|
|
0x0A, 0x10, 0x14, 0x17, 0x17, 0x14, 0x0B, 0xFD, 0xED, 0xE0, 0xD9,
|
|
0xDB, 0xE6, 0xF7, 0x0A, 0x19, 0x20, 0x1E, 0x14, 0x05, 0xF4, 0xE5,
|
|
0xDF, 0xE4, 0xF4, 0x0C, 0x24, 0x36, 0x3D, 0x35, 0x20, 0xFF, 0xDD,
|
|
0xC0, 0xAE, 0xA9, 0xB0, 0xC4, 0xE0, 0x03, 0x26, 0x48, 0x62, 0x70,
|
|
0x6D, 0x59, 0x35, 0x08, 0xD8, 0xAC, 0x8D, 0x80, 0x85, 0x9C, 0xC1,
|
|
0xF0, 0x21, 0x4E, 0x6F, 0x7F, 0x7A, 0x63, 0x3D, 0x0F, 0xE0, 0xB7,
|
|
0x9B, 0x90, 0x96, 0xAC, 0xCE, 0xF6, 0x1D, 0x3C, 0x50, 0x55, 0x4D,
|
|
0x3A, 0x20, 0x04, 0xEC, 0xD8, 0xCC, 0xC9, 0xCD, 0xD8, 0xE8, 0xF9,
|
|
0x0A, 0x17, 0x1F, 0x20, 0x1C, 0x12, 0x07, 0xFC, 0xF2, 0xEC, 0xEB,
|
|
0xED, 0xF3, 0xFA, 0x02, 0x0A, 0x10, 0x12, 0x12, 0x0E, 0x07, 0xFE,
|
|
0xF5, 0xED, 0xEA, 0xEB, 0xEF, 0xF7, 0x00, 0x0A, 0x10, 0x13, 0x12,
|
|
0x0F, 0x09, 0x02, 0xFB, 0xF5, 0xF3, 0xF2, 0xF3, 0xF6, 0xFB, 0xFF,
|
|
0x03, 0x05, 0x07, 0x08, 0x07, 0x05, 0x03, 0x01, 0xFF, 0xFE, 0xFC,
|
|
0xFB, 0xFB, 0xFC, 0xFC, 0xFD, 0xFE, 0xFF, 0x00, 0x01, 0x02, 0x02,
|
|
0x01]
|
|
|
|
- wait_until:
|
|
condition:
|
|
not:
|
|
- speaker.is_playing: speaker_embedded
|
|
- speaker.stop: speaker_embedded
|
|
|
|
- id: !extend touch_on_multi_touch_release
|
|
then:
|
|
- script.execute: touch_on_multi_touch_release_speaker
|
|
|
|
- id: touch_on_multi_touch_release_speaker
|
|
mode: restart
|
|
then:
|
|
- lambda: |-
|
|
if (sl_touch_speaker_feedback->state != "Disabled")
|
|
speaker_play_click->execute();
|
|
|
|
- id: !extend touch_on_press
|
|
then:
|
|
- script.execute: touch_on_press_speaker
|
|
|
|
- id: touch_on_press_speaker
|
|
mode: restart
|
|
then:
|
|
- lambda: |-
|
|
if (sl_touch_speaker_feedback->state == "On press" or sl_touch_speaker_feedback->state == "Always")
|
|
speaker_play_click->execute();
|
|
|
|
- id: !extend touch_on_release
|
|
then:
|
|
- script.execute: touch_on_release_speaker
|
|
|
|
- id: touch_on_release_speaker
|
|
mode: restart
|
|
then:
|
|
- lambda: |-
|
|
if (sl_touch_speaker_feedback->state == "On release" or sl_touch_speaker_feedback->state == "Always")
|
|
speaker_play_click->execute();
|
|
|
|
select:
|
|
- id: sl_touch_speaker_feedback
|
|
name: Touch - Speaker feedback
|
|
platform: template
|
|
options:
|
|
- "Disabled"
|
|
- "On press"
|
|
- "On release"
|
|
- "Always"
|
|
initial_option: "Disabled"
|
|
optimistic: true
|
|
restore_value: true
|
|
internal: false
|
|
entity_category: config
|
|
disabled_by_default: false
|
|
icon: mdi:vibrate
|
|
|
|
speaker:
|
|
- id: speaker_embedded
|
|
platform: i2s_audio
|
|
dac_type: external
|
|
i2s_dout_pin: GPIO15
|
|
i2s_audio_id: if_i2s_audio
|
|
i2s_comm_fmt: stand_msb
|
|
channel: mono
|
|
timeout: never
|
|
bits_per_sample: 16bit
|
|
sample_rate: 48000
|
|
buffer_duration: 500ms
|
|
...
|