256 lines
5.3 KiB
YAML
256 lines
5.3 KiB
YAML
# NOTE: This program does NOT log via UART, but only via network socket (esphome logs...)
|
|
|
|
|
|
# ---------------------- Global config ----------------------
|
|
|
|
esphome:
|
|
name: fabula
|
|
|
|
esp8266:
|
|
board: d1_mini_lite
|
|
|
|
# Enable logging
|
|
logger:
|
|
baud_rate: 0
|
|
|
|
ota:
|
|
- platform: esphome
|
|
password: ""
|
|
|
|
wifi:
|
|
ssid: "Pew"
|
|
password: "SediaChinita@Terrazzo2017"
|
|
|
|
|
|
|
|
# ---------------------- PN532 NFC Reader ----------------------
|
|
|
|
i2c:
|
|
# I2C config left to default. For ESP8266 is:
|
|
# GPIO5 (D1) -> I2C SCL
|
|
# GPIO4 (D2) -> I2C SDA
|
|
timeout: 13ms #to prevent pn532 timeout
|
|
|
|
pn532_i2c:
|
|
update_interval: 1s
|
|
on_tag:
|
|
then:
|
|
# - logger.log:
|
|
# format: "NFC Tag found: %s"
|
|
# args: [ 'tag.get_ndef_message()->get_records()[0]->get_payload().c_str()' ]
|
|
- dfplayer.play_folder:
|
|
loop: True
|
|
# Crashes somewhere here in the lambda
|
|
folder: !lambda |-
|
|
if (!tag.has_ndef_message()) {
|
|
return 0; // Plays "No tag found" audio
|
|
}
|
|
auto message = tag.get_ndef_message();
|
|
auto records = message->get_records();
|
|
for (auto &record : records) {
|
|
std::string payload = record->get_payload();
|
|
ESP_LOGD("Fabula", "NFC NDEF record type %s - value %s - int value %d", record->get_type().c_str(), record->get_payload().c_str(), stoi(payload));
|
|
return stoi(payload);
|
|
}
|
|
return 0;
|
|
on_tag_removed:
|
|
then:
|
|
- logger.log: "NFC Tag removed"
|
|
- dfplayer.pause
|
|
|
|
|
|
# ---------------------- DFPlayer MP3 Player ----------------------
|
|
|
|
uart:
|
|
#tx_pin: D8
|
|
#rx_pin: D7
|
|
tx_pin: TX
|
|
rx_pin: RX
|
|
baud_rate: 9600
|
|
|
|
dfplayer:
|
|
on_finished_playback:
|
|
then:
|
|
logger.log: 'Playback finished event'
|
|
|
|
|
|
|
|
binary_sensor:
|
|
# ---------------------- NFC TAG Sensor ----------------------
|
|
- platform: pn532
|
|
uid: 74-10-37-94
|
|
name: "PN532 NFC Tag"
|
|
# ---------------------- Phisical buttons ----------------------
|
|
- platform: gpio
|
|
pin:
|
|
number: D7
|
|
mode:
|
|
input: true
|
|
pullup: true
|
|
id: "vol_down"
|
|
name: "Volume down"
|
|
filters:
|
|
- invert
|
|
- settle: 10ms
|
|
# - autorepeat:
|
|
# time_off: 200ms
|
|
# time_on: 200ms
|
|
on_press:
|
|
then:
|
|
- dfplayer.volume_down
|
|
- dfplayer.volume_down
|
|
- dfplayer.volume_down
|
|
- platform: gpio
|
|
pin:
|
|
number: D8
|
|
mode:
|
|
input: true
|
|
pullup: true
|
|
id: "vol_up"
|
|
name: "Volume up"
|
|
filters:
|
|
- settle: 10ms
|
|
# - autorepeat:
|
|
# time_off: 200ms
|
|
# time_on: 200ms
|
|
on_press:
|
|
then:
|
|
- dfplayer.volume_up
|
|
- dfplayer.volume_up
|
|
- dfplayer.volume_up
|
|
- platform: gpio
|
|
pin:
|
|
number: D5
|
|
mode:
|
|
input: true
|
|
pullup: true
|
|
id: "trk_prev"
|
|
name: "Previous track"
|
|
filters:
|
|
- invert
|
|
- settle: 10ms
|
|
on_press:
|
|
if:
|
|
condition:
|
|
dfplayer.is_playing
|
|
then:
|
|
dfplayer.play_previous
|
|
- platform: gpio
|
|
pin:
|
|
number: D6
|
|
mode:
|
|
input: true
|
|
pullup: true
|
|
id: "trk_next"
|
|
name: "Next track"
|
|
filters:
|
|
- invert
|
|
- settle: 10ms
|
|
on_press:
|
|
if:
|
|
condition:
|
|
dfplayer.is_playing
|
|
then:
|
|
dfplayer.play_next
|
|
|
|
|
|
|
|
|
|
# ---------------------- REMOVE FROM THERE TO END OF FILE WHEN TESTING FINISHED ----------------------
|
|
|
|
api:
|
|
# Per eseguire queste actions, andare in Home Assistant dentro Developer Tools -> Actions -> Inserire:
|
|
# action: esphome.fabula_dfplayer_play_folder
|
|
# data: {
|
|
# "folder": 2,
|
|
# "file": 1
|
|
# }
|
|
|
|
actions:
|
|
- action: dfplayer_next
|
|
then:
|
|
- dfplayer.play_next:
|
|
- action: dfplayer_previous
|
|
then:
|
|
- dfplayer.play_previous:
|
|
- action: dfplayer_play
|
|
variables:
|
|
file: int
|
|
then:
|
|
- dfplayer.play: !lambda 'return file;'
|
|
- action: dfplayer_play_loop
|
|
variables:
|
|
file: int
|
|
loop_: bool
|
|
then:
|
|
- dfplayer.play:
|
|
file: !lambda 'return file;'
|
|
loop: !lambda 'return loop_;'
|
|
- action: dfplayer_play_folder
|
|
variables:
|
|
folder: int
|
|
file: int
|
|
then:
|
|
- dfplayer.play_folder:
|
|
folder: !lambda 'return folder;'
|
|
file: !lambda 'return file;'
|
|
|
|
- action: dfplayer_play_loop_folder
|
|
variables:
|
|
folder: int
|
|
then:
|
|
- dfplayer.play_folder:
|
|
folder: !lambda 'return folder;'
|
|
loop: true
|
|
|
|
- action: dfplayer_set_device_tf
|
|
then:
|
|
- dfplayer.set_device: TF_CARD
|
|
|
|
- action: dfplayer_set_device_usb
|
|
then:
|
|
- dfplayer.set_device: USB
|
|
|
|
- action: dfplayer_set_volume
|
|
variables:
|
|
volume: int
|
|
then:
|
|
- dfplayer.set_volume: !lambda 'return volume;'
|
|
- action: dfplayer_set_eq
|
|
variables:
|
|
preset: int
|
|
then:
|
|
- dfplayer.set_eq: !lambda 'return static_cast<dfplayer::EqPreset>(preset);'
|
|
|
|
- action: dfplayer_sleep
|
|
then:
|
|
- dfplayer.sleep
|
|
|
|
- action: dfplayer_reset
|
|
then:
|
|
- dfplayer.reset
|
|
|
|
- action: dfplayer_start
|
|
then:
|
|
- dfplayer.start
|
|
|
|
- action: dfplayer_pause
|
|
then:
|
|
- dfplayer.pause
|
|
|
|
- action: dfplayer_stop
|
|
then:
|
|
- dfplayer.stop
|
|
|
|
- action: dfplayer_random
|
|
then:
|
|
- dfplayer.random
|
|
|
|
- action: dfplayer_volume_up
|
|
then:
|
|
- dfplayer.volume_up
|
|
|
|
- action: dfplayer_volume_down
|
|
then:
|
|
- dfplayer.volume_down
|
|
|