Welcome to mirror list, hosted at ThFree Co, Russian Federation.

README.md - github.com/ClusterM/rc-transceiver.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 607c005308345e39f7a8d7e08808b2ab2310c491 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# 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)