mirror of
https://github.com/esphome/esphome-docs.git
synced 2024-12-25 17:17:54 +01:00
e85bcac260
* refactor remote_transmitter.rst - declutter the TOC by removing the undistinguishable actions - change `switch` in examples to `button` (at the time this doc was originally created `button` didn't exist yet) - move the **Setting up** guides above the actions list - remove the IRRemoteESP8266 seealso link as it's not currently supported in any way * fix test 1 * oops * Fix links * examples correction * Update remote_transmitter.rst * Update remote_transmitter.rst * Update remote_transmitter.rst
193 lines
6.8 KiB
ReStructuredText
193 lines
6.8 KiB
ReStructuredText
.. seo::
|
|
:description: Set up guide for configuring IR and RF devices in ESPHome.
|
|
:image: remote.svg
|
|
|
|
.. _remote-setting-up-infrared:
|
|
|
|
Setting up IR Devices
|
|
=====================
|
|
|
|
In this guide an infrared device will be set up with ESPHome. First, the remote code
|
|
will be captured with an IR receiver module (like `this one <https://www.sparkfun.com/products/10266>`__).
|
|
We will use ESPHome's dumping ability to output the decoded remote code directly.
|
|
|
|
Then we will set up a new remote transmitter with an infrared LED (like
|
|
`this one <https://learn.sparkfun.com/tutorials/ir-communication/all>`__) to transmit the
|
|
code when a button is pressed.
|
|
|
|
First, connect the infrared receiver module to a pin on your board and set up a
|
|
remote_receiver instance:
|
|
|
|
.. code-block:: yaml
|
|
|
|
remote_receiver:
|
|
pin: GPIOXX
|
|
dump: all
|
|
|
|
Compile and upload the code. While viewing the log output from the ESP,
|
|
press a button on an infrared remote you want to capture (one at a time).
|
|
|
|
You should see log output like below:
|
|
|
|
.. code-block:: text
|
|
|
|
# If the codec is known:
|
|
[D][remote.panasonic] Received Panasonic: address=0x4004 command=0x8140DFA2
|
|
|
|
# Or raw output if it's not known yet
|
|
# The values may fluctuate a bit, but as long as they're similar it's ok
|
|
[D][remote.raw] Received Raw: 4088, -1542, 1019, -510, 513, -1019, 510, -509, 511, -510, 1020,
|
|
[D][remote.raw] -1020, 1022, -1019, 510, -509, 511, -510, 511, -509, 511, -510,
|
|
[D][remote.raw] 1020, -1019, 510, -511, 1020, -510, 512, -508, 510, -1020, 1022
|
|
|
|
If the codec is already implemented in ESPHome, you will see the decoded value directly -
|
|
otherwise you will see the raw data dump (which you can use just as well). You have
|
|
just successfully captured your first infrared code.
|
|
|
|
Now let's use this information to emulate a button press from the ESP. First, wire up the
|
|
IR diode to a new pin on the ESP and configure a global ``remote_transmitter`` instance:
|
|
|
|
.. code-block:: yaml
|
|
|
|
remote_transmitter:
|
|
pin: GPIOXX
|
|
# Infrared remotes use a 50% carrier signal
|
|
carrier_duty_percent: 50%
|
|
|
|
This will allow us to send any data we want via the IR LED. To replicate the codes we decoded
|
|
earlier, create a new template button that sends the infrared code when triggered:
|
|
|
|
.. code-block:: yaml
|
|
|
|
button:
|
|
- platform: template
|
|
name: Panasonic Power Button
|
|
on_press:
|
|
- remote_transmitter.transmit_panasonic:
|
|
address: 0x4004
|
|
command: 0x8140DFA2
|
|
|
|
# Or for raw code
|
|
button:
|
|
- platform: template
|
|
name: Raw Code Power Button
|
|
on_press:
|
|
- remote_transmitter.transmit_raw:
|
|
carrier_frequency: 38kHz
|
|
code: [4088, -1542, 1019, -510, 513, -1019, 510, -509, 511, -510, 1020,
|
|
-1020, 1022, -1019, 510, -509, 511, -510, 511, -509, 511, -510,
|
|
1020, -1019, 510, -511, 1020, -510, 512, -508, 510, -1020, 1022]
|
|
|
|
Recompile again, when you power up the device the next time you will see a new button
|
|
in the frontend. Click on it and you should see the remote signal being transmitted. Done!
|
|
|
|
.. _remote-setting-up-rf:
|
|
|
|
Setting up RF Devices
|
|
=====================
|
|
|
|
The ``remote_transmitter`` and ``remote_receiver`` components can also be used to send
|
|
and receive 433MHz Radio Frequency (RF) signals. This guide will discuss setting up a 433MHz
|
|
receiver to capture a device's remote codes. After that we will set up a 433MHz transmitter
|
|
to replicate the remote code with the press of a button in the frontend.
|
|
|
|
First, connect the RF module to a pin on the ESP and set up a remote_receiver instance:
|
|
|
|
.. code-block:: yaml
|
|
|
|
remote_receiver:
|
|
pin: GPIOXX
|
|
dump: all
|
|
# Settings to optimize recognition of RF devices
|
|
tolerance: 50%
|
|
filter: 250us
|
|
idle: 4ms
|
|
buffer_size: 2kb # only for ESP8266
|
|
|
|
Compile and upload the code. While viewing the log output from the ESP,
|
|
press a button on an RF remote you want to capture (one at a time).
|
|
|
|
You should see log output like below:
|
|
|
|
.. code-block:: text
|
|
|
|
# If the codec is known:
|
|
[D][remote.rc_switch] Received RCSwitch: protocol=2 data='100010000000000010111110'
|
|
|
|
# Or raw output if it's not known yet
|
|
# The values may fluctuate a bit, but as long as they're similar it's ok
|
|
[D][remote.raw] Received Raw: 4088, -1542, 1019, -510, 513, -1019, 510, -509, 511, -510, 1020,
|
|
[D][remote.raw] -1020, 1022, -1019, 510, -509, 511, -510, 511, -509, 511, -510,
|
|
[D][remote.raw] 1020, -1019, 510, -511, 1020, -510, 512, -508, 510, -1020, 1022
|
|
|
|
.. note::
|
|
|
|
If the log output is flooded with "Received Raw" messages, you can also disable raw
|
|
remote code reporting and rely on rc_switch to decode the values.
|
|
|
|
.. code-block:: yaml
|
|
|
|
remote_receiver:
|
|
pin: GPIOXX
|
|
dump:
|
|
- rc_switch
|
|
...
|
|
|
|
If the codec is already implemented in ESPHome, you will see the decoded value directly -
|
|
otherwise you will see the raw data dump (which you can use just as well). You have
|
|
just successfully captured your first RF code.
|
|
|
|
Now let's use this information to emulate a button press from the ESP. First, wire up the
|
|
RF transmitter to a new pin on the ESP and configure a global ``remote_transmitter`` instance:
|
|
|
|
.. code-block:: yaml
|
|
|
|
remote_transmitter:
|
|
pin: GPIOXX
|
|
# RF uses a 100% carrier signal
|
|
carrier_duty_percent: 100%
|
|
|
|
This will allow us to send any data we want via the RF transmitter. To replicate the codes we decoded
|
|
earlier, create a new template button that sends the RF code when triggered:
|
|
|
|
.. code-block:: yaml
|
|
|
|
button:
|
|
- platform: template
|
|
name: RF Power Button
|
|
optimistic: true
|
|
on_press:
|
|
- remote_transmitter.transmit_rc_switch_raw:
|
|
code: '100010000000000010111110'
|
|
protocol: 2
|
|
repeat:
|
|
times: 10
|
|
wait_time: 0s
|
|
|
|
|
|
# Or for raw code
|
|
button:
|
|
- platform: template
|
|
name: Raw Code Power Button
|
|
on_press:
|
|
- remote_transmitter.transmit_raw:
|
|
code: [4088, -1542, 1019, -510, 513, -1019, 510, -509, 511, -510, 1020,
|
|
-1020, 1022, -1019, 510, -509, 511, -510, 511, -509, 511, -510,
|
|
1020, -1019, 510, -511, 1020, -510, 512, -508, 510, -1020, 1022]
|
|
|
|
Recompile again, when you power up the device the next time you will see a new button
|
|
in the frontend. Click on it and you should see the remote signal being transmitted. Done!
|
|
|
|
.. note::
|
|
|
|
Some devices require that the transmitted code be repeated for the signal to be picked up
|
|
as valid. Also the interval between repetitions can be important. Check that the pace of
|
|
repetition logs are consistent between the remote controller and the transmitter node.
|
|
You can adjust the ``repeat:`` settings accordingly.
|
|
|
|
See Also
|
|
--------
|
|
|
|
- :doc:`/components/remote_receiver`
|
|
- :doc:`/components/remote_transmitter`
|