On ESP32 the demo uses pin 23 for IR output and pins 18 and 19 for pushbuttons.
These pins may be changed. The only device resource used is `RMT(0)`.
-## 1.1 Pyboard Wiring
+On Raspberry Pi Pico the demo uses pin 17 for IR output and pins 18 and 19 for
+pushbuttons. These pins may be changed. The driver uses the PIO to emulate a
+device similar to the ESP32 RMT. The device driver is
+[documented here](./RP2_RMT.md); this is for experimenters and those wanting to
+use the library in conjunction with their own PIO assembler code.
+
+## 1.1 Wiring
+
+All microcontrollers require an external circuit to drive the LED. The notes
+below on specific microcontrollers assume that such a circuit is used.
I use the following circuit which delivers just under 40mA to the diode. R2 may
be reduced for higher current.
available on the ESP32 `RMT` object, so any alternative circuit must illuminate
the LED if the pin state is high.
+## 1.3 RP2 Wiring
+
+There is no `active_high` option so the circuit must illuminate the LED if the
+pin state is high, as per the above drivers. Test programs use pin 17, but this
+can be reassigned.
+
# 2. Dependencies and installation
## 2.1 Dependencies
The device driver has no dependencies.
-On ESP32 a firmware version >= V1.14 is required. The Loboris port is not
+On ESP32 a firmware version >= V1.17 is required. The Loboris port is not
supported owing to the need for the RMT device and other issues.
The demo program uses `uasyncio` primitives from
# 3. The driver
-This is specific to Pyboard D, Pyboard 1.x (not Lite) and ESP32.
+This is specific to Pyboard D, Pyboard 1.x (not Lite), ESP32 and Raspberry Pi
+Pico (RP2 architecture chip).
It implements a class for each supported protocol, namely `NEC`, `SONY_12`,
`SONY_15`, `SONY_20`, `RC5` and `RC6_M0`. Each class is subclassed from a
nec = NEC(Pin(23, Pin.OUT, value = 0))
nec.transmit(1, 2) # address == 1, data == 2
```
+Basic usage on Pico:
+```python
+from machine import Pin
+from ir_tx.nec import NEC
+nec = NEC(Pin(17, Pin.OUT, value = 0))
+nec.transmit(1, 2) # address == 1, data == 2
+```
#### Common to all classes
| RC6_M0 | 6.0ms | 2.0ms |
| MCE | 6.7ms | 2.0ms |
-#### NEC class
+#### NEC class (also Samsung)
Class `NEC`. Example invocation:
```python
A value passed in `toggle` is ignored.
+For Samsung protocol set the `samsung` class variable `True`:
+```python
+from ir_tx.nec import NEC
+NEC.samsung=True
+```
+Samsung remotes do not seem to use repeat codes: the sample I have simply
+repeats the original code.
+
+Thanks are due to J.E.Tannenbaum for information about the Samsung protocol.
+
#### Sony classes
Classes `SONY_12`, `SONY_15` and `SONY_20`. Example invocation: