IR remote control receiver and transmitter based on Onion Omega2
RC-transceiver uses it's own Linux kernel module. This module uses the hardware PWM of Onion Omega2 for IR transmitting and GPIO for receiving.
You can load the module via command line:
insmod rc-transceiver rx_pin=17 pwm_channel=0
You should use this parameters for my schematic but if you want to change something:
- rx_pin - number of GPIO pin for receiving
- pwm_channel - PWM channel used for transmitting (0 for pin 18, 1 for pin 19, see datasheet)
To load the module autocatically at boot you can create the /etc/modules.d/99-rc-transceiver
file with this line:
rc-transceiver rx_pin=17 pwm_channel=0
You need to set GPIO MUX to PWM manually, e.g. put this line to the beginning of /etc/rc.local
:
omega2-ctrl gpiomux set pwm0 pwm
If module is loaded correctly the /dev/rc
pseudo file should appear. You can read it as a text file and press some button on your remote control:
root@rc-transceiver:~# cat /dev/rc
680a7803bc017803bc01bc01bc01bc01bc0178037803bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc0178037803bc01bc017803bc01bc01bc01bc01bc01bc0178037803
This long line is a raw button code. It's encoded as a hexadecimal string of 16-bit (little-endian) values with signal lengths and gap lengths in microseconds. E.g. code 112233445566778899aa
means:
1122
= 8721 microseconds of signal3344
= 17459 microseconds of gap5566
= 26197 microseconds of signal7788
= 34935 microseconds of gap99aa
= 43673 microseconds of signal And so on. So RC-6-encoded button 0x3D looks like680a7803bc017803bc01bc01bc01bc01bc0178037803bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc0178037803bc01bc017803bc01bc01bc01bc01bc01bc0178037803
Now you can transmit this code by writing to the /dev/rc
:
echo 680a7803bc017803bc01bc01bc01bc01bc0178037803bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc0178037803bc01bc017803bc01bc01bc01bc01bc01bc0178037803 > /dev/rc
This project comes with several Python scripts that demonstrate encoding and decoding of some remote control protocols:
demo_scripts/receiver-test.py
- receiverdemo_scripts/transmitter-test.py
- transmitterdemo_scripts/necrc.py
- module to decode and encode NEC protocol (most popular one)demo_scripts/rc6.py
- module to decode and encode RC-6 protocol (used by Philips)
- YooMoney: 41001843680639
- Bitcoin: 1GS4XXx1FjQaFjgHnoPPVAzw9xqfv5Spx5
- DonationAlerts: https://www.donationalerts.com/r/clustermeerkat