From ec78f828fbd94fd903d8aa364bc60fc9aea3ed8e Mon Sep 17 00:00:00 2001 From: Guillermo Ruffino Date: Sat, 19 Oct 2019 16:43:56 -0300 Subject: [PATCH] Add DFPlayer docs (#306) * Add DFPlayer docs * lint Co-authored-by: Otto Winter --- components/dfplayer_mini.rst | 397 ++++++++++++++++++++++++++++ components/images/dfplayer-full.jpg | Bin 0 -> 46142 bytes images/dfplayer.svg | 1 + index.rst | 2 +- 4 files changed, 399 insertions(+), 1 deletion(-) create mode 100644 components/dfplayer_mini.rst create mode 100644 components/images/dfplayer-full.jpg create mode 100644 images/dfplayer.svg diff --git a/components/dfplayer_mini.rst b/components/dfplayer_mini.rst new file mode 100644 index 000000000..6683fee69 --- /dev/null +++ b/components/dfplayer_mini.rst @@ -0,0 +1,397 @@ +DF-Player mini +============== + +.. seo:: + :description: Instructions for setting up DF Player Mini integration in ESPHome. + :image: crosshair-gps.png + +The ``dfplayer`` (`datasheet `__), component +allows you to play sound and music stored in SD card. + +.. figure:: images/dfplayer-full.jpg + :align: center + :width: 50.0% + + DF-Player mini Module. + +For this integration to work you need to have set up a :ref:`UART bus ` +in your configuration. + +Overview +-------- + +The module can be powered by the 3V output of an NodeMCU and a powered speaker connected to +the modules ``DAC_R``, ``DAC_I`` and ``GND`` . You can connect only the ``tx_pin`` of +the ``uart`` bus to the module's ``RX`` but if you need feedback of playback active you will +also need to connect the ``rx_pin`` to the module's ``TX``. + +.. code-block:: yaml + + # Example configuration entry + uart: + tx_pin: GPIO2 + rx_pin: GPIO5 + baud_rate: 9600 + + # Declare DFPlayer mini module + dfplayer: + on_finished_playback: + then: + logger.log: 'Somebody press play!' + +Configuration variables: +------------------------ + +- **uart_id** (*Optional*, :ref:`config-id`): Manually specify the ID of the UART hub. +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID used for code generation. +- **on_finished_playback** (*Optional*, :ref:`Automation `): An action to be + performed when playback is finished. + +``dfplayer.is_playing`` Condition +--------------------------------- + +This Condition returns true while playback is active. + +.. code-block:: yaml + + # In some trigger: + on_...: + if: + condition: + dfplayer.is_playing + then: + logger.log: 'Playback is active!' + + +``dfplayer.play_next`` Action +----------------------------- + +Starts playback of next track or skips to the next track. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.play_next: + +``dfplayer.play_previous`` Action +--------------------------------- + +Plays the previously played track. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.play_previous: + + +``dfplayer.play`` Action +------------------------ + +Plays a track. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.play: + file: 23 + loop: false + # Shorthand + - dfplayer.play: 23 + +Configuration options: + +- **file** (*Optional*, int, :ref:`templatable `): The global track + number (from all tracks in the device). If not specified plays the first track. +- **loop** (*Optional*, bool, :ref:`templatable `): Repeats playing + the same track. Defaults to ``False``. + +``dfplayer.play_folder`` Action +------------------------------- + +Plays files inside numbered folders, folders must be numbered from 1 and with leading +zeros. Like `01`, `02`, ... etc. Files inside the folders must be numbered with two +leading zeros, like `001.mp3`, `002.mp3`, ... etc. +Folder numbers can range from 1 to 99 and file name from 1 to 255 or folder number +from 1 to 10 and file number from 1 to 1000. + +.. code-block:: bash + + /01 + /001.mp3 + /002.mp3 + .. + /02 + /001.mp3 + /002.mp3 + /003.mp3 + .. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.play_folder: + folder: 2 + file: 1 + + +Configuration options: + +- **folder** (**Required**, int, :ref:`templatable `): The folder number. +- **file** (*Optional*, int, :ref:`templatable `): The file number + inside the folder to play. Optional only if ``loop`` is not set. +- **loop** (*Optional*, bool, :ref:`templatable `): Repeats playing + all files in the folder. Causes ``file`` to be ignored. Defaults to ``False``. + + +``dfplayer.set_device`` Action +------------------------------ + +Changes the device in use. Valid values are ``TF_CARD`` and ``USB``. *Note: only* ``TF_CARD`` +*is tested. If you connect a USB stick and found it works please create an issue at ESPHome +GitHub*. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.set_device: TF_CARD + +``dfplayer.set_volume`` Action +------------------------------ + +Changes volume. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.set_volume: + volume: 20 + # Shorthand + - dfplayer.set_volume: 20 + +Configuration options: + +- **volume** (**Required**, int, :ref:`templatable `): The volume value. + Valid values goes from 0 to 30. + +``dfplayer.set_eq`` Action +-------------------------- + +Changes audio equalization preset. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.set_eq: + eq_preset: ROCK + # Shorthand + - dfplayer.set_eq: ROCK + +Configuration options: + +- **eq_preset** (**Required**): Eq Preset value. Valid values are ``NORMAL``, ``POP``, ``ROCK``, ``JAZZ``, + ``CLASSIC`` and ``BASS``. + +``dfplayer.sleep`` Action +------------------------- + +Enters sleep mode. Playback is stopped and the action ``dfplayer.set_device: TF_CARD`` should be +send for playback to be enabled again. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.sleep + +``dfplayer.reset`` Action +------------------------- + +Module reset. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.reset + +``dfplayer.start`` Action +------------------------- + +Starts playing a track or resumes paused playback. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.start + +``dfplayer.pause`` Action +------------------------- + +Pauses playback, playback can be resumed from the same position with ``dfplayer.start``. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.pause + +``dfplayer.stop`` Action +------------------------ + +Stops playback. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.stop + + +``dfplayer.random`` Action +-------------------------- + +Randomly plays all tracks. + +.. code-block:: yaml + + on_...: + then: + - dfplayer.random + +All actions +----------- + +- **id** (*Optional*, :ref:`config-id`): Manually specify the ID of the DFPlayer if you have multiple components. + + +Test setup +---------- + +With the following code you can quickly setup a node and use Home Assistant's service in the developer tools. +E.g. for calling ``dfplayer.play_folder`` select the service ``esphome.test_node_dfplayer_play`` and in +service data enter + +.. code-block:: json + + { "file": 23 } + +Sample code +*********** + +.. code-block:: yaml + + esphome: + name: test_node + platform: ESP8266 + board: nodemcu + + wifi: + ssid: !secret wifi_ssid + password: !secret wifi_pass + + logger: + level: VERBOSE + + uart: + tx_pin: GPIO2 + rx_pin: GPIO5 + baud_rate: 9600 + + dfplayer: + on_finished_playback: + then: + logger.log: 'Playback finished event' + + api: + services: + - service: dfplayer_next + then: + - dfplayer.play_next: + - service: dfplayer_previous + then: + - dfplayer.play_previous: + - service: dfplayer_play + variables: + file: int + then: + - dfplayer.play: !lambda 'return file;' + - service: dfplayer_play_loop + variables: + file: int + loop_: bool + then: + - dfplayer.play: + file: !lambda 'return file;' + loop: !lambda 'return loop_;' + - service: dfplayer_play_folder + variables: + folder: int + file: int + then: + - dfplayer.play_folder: + folder: !lambda 'return folder;' + file: !lambda 'return file;' + + - service: dfplayer_play_loo_folder + variables: + folder: int + then: + - dfplayer.play_folder: + folder: !lambda 'return folder;' + loop: True + + - service: dfplayer_set_device + variables: + device: int + then: + - dfplayer.set_device: + device: TF_CARD + + - service: dfplayer_set_volume + variables: + volume: int + then: + - dfplayer.set_volume: !lambda 'return volume;' + - service: dfplayer_set_eq + variables: + preset: int + then: + - dfplayer.set_eq: !lambda 'return static_cast(preset);' + + - service: dfplayer_sleep + then: + - dfplayer.sleep + + - service: dfplayer_reset + then: + - dfplayer.reset + + - service: dfplayer_start + then: + - dfplayer.start + + - service: dfplayer_pause + then: + - dfplayer.pause + + - service: dfplayer_stop + then: + - dfplayer.stop + + - service: dfplayer_random + then: + - dfplayer.random + +See Also +-------- + +- :apiref:`dfplayer/dfplayer.h` +- :ghedit:`Edit` diff --git a/components/images/dfplayer-full.jpg b/components/images/dfplayer-full.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fec8accfb5dddba977bce9534e4c8721e70286ea GIT binary patch literal 46142 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 NsCC0I_prZT{vS9lXng \ No newline at end of file diff --git a/index.rst b/index.rst index 3ca4633e3..03554bcc7 100644 --- a/index.rst +++ b/index.rst @@ -309,7 +309,7 @@ Misc Components PCF8574 I/O Expander, components/pcf8574, pcf8574.jpg MCP230XX I/O Expander, components/mcp230xx, mcp230xx.svg SIM800L, components/sim800l, sim800l.jpg - + DFPlayer, components/dfplayer_mini, dfplayer.svg Captive Portal, components/captive_portal, wifi-strength-alert-outline.svg Debug Component, components/debug, bug-report.svg