RTTTL 蜂鸣器
rtttl 组件允许您轻松地将无源压电蜂鸣器连接到微控制器并播放单音歌曲。它接受铃声文本传输语言(RTTTL)格式(维基百科),该格式可以存储简单的旋律。
使用无源蜂鸣器概述
Section titled “使用无源蜂鸣器概述”重要的是您的蜂鸣器是无源的,如果您给它供电 3.3V 时它会发出蜂鸣声,那么它不是无源的,此库将无法正常工作。
音调发生器需要一个支持 PWM 的输出才能工作,目前仅支持 ESP8266 软件 PWM 输出和 ESP32 LEDC 输出。
# 示例配置项output: - platform: ... id: rtttl_out ...
rtttl: output: rtttl_out id: my_rtttl gain: 60%使用扬声器概述
Section titled “使用扬声器概述”音调发生器也可以与扬声器一起使用来输出音频。
# 示例配置项speaker: - platform: ... id: my_speaker ...
rtttl: speaker: my_speaker id: my_rtttl gain: 0.8-
id (可选, ID): 手动指定用于代码生成的 ID。
-
gain (可选, 百分比): 使用此值可以设置音量。
-
on_finished_playback (可选, 自动化): 播放完成时要执行的动作。
NOTE
您只能使用 output 或 speaker 变量,不能同时使用两者。
所有动作和条件
Section titled “所有动作和条件”- id (可选, ID): 如果您有多个组件,手动指定 RTTTL 的 ID。
rtttl.play 动作
Section titled “rtttl.play 动作”播放 RTTTL 音调。
on_...: then: - rtttl.play: 'siren:d=8,o=5,b=100:d,e,d,e,d,e,d,e'配置选项:
- rtttl (必填, 字符串, 可模板化): RTTTL 字符串。
NOTE
如果当前正在播放旋律,您必须在开始新旋律之前调用 rtttl.stop 动作。
您可以在网上找到许多 RTTTL 字符串。您可以使用 RTTTL 在线播放器在将旋律添加到配置之前进行测试。有关详细信息,请参阅下面的格式说明。
rtttl.stop 动作
Section titled “rtttl.stop 动作”停止播放。
on_...: then: - rtttl.stoprtttl.is_playing 条件
Section titled “rtttl.is_playing 条件”当播放处于活动状态时,此条件返回 true。
# 在某个触发器中:on_...: if: condition: rtttl.is_playing then: logger.log: '播放处于活动状态!'RTTTL 格式
Section titled “RTTTL 格式”RTTTL 字符串由三个部分组成,用冒号 (:) 分隔:
name:d=4,o=5,b=120:notes- 名称: 旋律的简短标识符(最多 10 个字符)
- 控制参数: 包含
d、o和b参数的控制部分 - 音符: 编码为音符数据的实际旋律
- d (时值): 默认音符时值。有效值为 1(全音符)、2(二分音符)、4(四分音符)、8(八分音符)、16(十六分音符)和 32(三十二分音符)。默认为 4。
- o (八度): 音符的默认八度。有效值为 4、5、6 或 7。较高的值产生较高的音调。默认为 6。
- b (节拍): 每分钟节拍数 (BPM) 的速度。决定旋律播放的速度。默认为 63。
旋律中的每个音符遵循此模式:[时值][音符][#][八度][.]
- 时值 (可选): 覆盖默认时值 (1, 2, 4, 8, 16, 32)
- 音符: 音符名称:
c、d、e、f、g、a、b或p表示休止 - # (可选): 升号修饰符,将音符升高半音
- 八度 (可选): 覆盖默认八度 (4-7)
- . (点) (可选): 附点音符,将时值延长 50%
8e6- 八分音符 E,八度 64c#5- 四分音符升 C,八度 52g.- 附点二分音符 G,使用默认八度4c#5.- 附点四分音符升 C,八度 516p- 十六分音符休止
提示:您可以尝试调整控制值来改变歌曲的听感。例如,增加 b 会使歌曲播放更快,而更改 o 会将音调升高或降低。
您也可以自己制作蜂鸣音模式!这里有一个简短的集合,您可以直接使用或根据喜好调整:
two_short:d=4,o=5,b=100:16e6,16e6long:d=1,o=5,b=100:e6siren:d=8,o=5,b=100:d,e,d,e,d,e,d,escale_up:d=32,o=5,b=100:c,c#,d#,e,f#,g#,a#,bstar_wars:d=16,o=5,b=100:4e,4e,4e,8c,p,g,4e,8c,p,g,4e,4p,4b,4b,4b,8c6,p,g,4d#,8c,p,g,4e,8pmission_imp:d=16,o=6,b=95:32d,32d#,32d,32d#,32d,32d#,32d,32d#,32d,32d,32d#,32e,32f,32f#,32g,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,g,8p,g,8p,a#,p,c7,p,g,8p,g,8p,f,p,f#,p,a#,g,2d,32p,a#,g,2c#,32p,a#,g,2c,a#5,8c,2p,32p,a#5,g5,2f#,32p,a#5,g5,2f,32p,a#5,g5,2e,d#,8dmario:d=4,o=5,b=100:16e6,16e6,32p,8e6,16c6,8e6,8g6,8p,8g,8p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,16p,8c6,16p,8g,16p,8e,16p,8a,8b,16a#,8a,16g.,16e6,16g6,8a6,16f6,8g6,8e6,16c6,16d6,8b,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16c7,16p,16c7,16c7,p,16g6,16f#6,16f6,16d#6,16p,16e6,16p,16g#,16a,16c6,16p,16a,16c6,16d6,8p,16d#6,8p,16d6,8p,16c6使用以下代码,您可以快速设置一个节点,并在 Home Assistant 的开发者工具中使用服务。
例如,要调用 rtttl.play,选择服务 esphome.test_esp8266_rtttl_play,并在服务数据中输入
song_str: 'scale_up:d=32,o=5,b=100:c,c#,d#,e,f#,g#,a#,b'esphome: name: test_esp8266
esp8266: board: nodemcuv2
wifi: ssid: !secret wifi_ssid password: !secret wifi_password
output: - platform: esp8266_pwm pin: GPIOXX id: rtttl_out
rtttl: output: rtttl_out on_finished_playback: - logger.log: '歌曲结束!'
api: actions: - action: rtttl_play variables: song_str: string then: - rtttl.play: rtttl: !lambda 'return song_str;'