Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/clusterm/rc-transceiver
IR remote control receiver and transmitter based on Onion Omega2
https://github.com/clusterm/rc-transceiver
Last synced: about 1 month ago
JSON representation
IR remote control receiver and transmitter based on Onion Omega2
- Host: GitHub
- URL: https://github.com/clusterm/rc-transceiver
- Owner: ClusterM
- License: gpl-3.0
- Created: 2022-04-10T16:36:31.000Z (almost 3 years ago)
- Default Branch: master
- Last Pushed: 2024-02-20T18:57:23.000Z (11 months ago)
- Last Synced: 2024-11-24T19:48:12.774Z (about 2 months ago)
- Language: C
- Size: 328 KB
- Stars: 10
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# RC-Transceiver
IR remote control receiver and transmitter based on Onion Omega2![image](https://user-images.githubusercontent.com/4236181/162630080-509640bc-b694-4214-8539-e739509308c4.png)
## Hardware
### Bill of materials
![BoM](hardware/bom.png)### Schematic
![Schematic](hardware/schematic.png)
## Software
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.
### How to load the Linux kernel module
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
```### How to use the Linux kernel module
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 signal
* `3344` = 17459 microseconds of gap
* `5566` = 26197 microseconds of signal
* `7788` = 34935 microseconds of gap
* `99aa` = 43673 microseconds of signal
And so on.
So [RC-6](https://www.sbprojects.net/knowledge/ir/rc6.php)-encoded button 0x3D looks like `680a7803bc017803bc01bc01bc01bc01bc0178037803bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc0178037803bc01bc017803bc01bc01bc01bc01bc01bc0178037803`Now you can transmit this code by writing to the `/dev/rc`:
```
echo 680a7803bc017803bc01bc01bc01bc01bc0178037803bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc01bc0178037803bc01bc017803bc01bc01bc01bc01bc01bc0178037803 > /dev/rc
```## Example scripts
This project comes with several Python scripts that demonstrate encoding and decoding of some remote control protocols:
* `demo_scripts/receiver-test.py` - receiver
* `demo_scripts/transmitter-test.py` - transmitter
* `demo_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)## Donations
* YooMoney: [41001843680639](https://yoomoney.ru/transfer/quickpay?requestId=343838343938323238305f64633138343335353537313930333165656235636336346136363334373439303432636264356532)
* Bitcoin: [1GS4XXx1FjQaFjgHnoPPVAzw9xqfv5Spx5](https://btc.clusterrr.com/)
* DonationAlerts: [https://www.donationalerts.com/r/clustermeerkat](https://www.donationalerts.com/r/clustermeerkat)