Receive and transmit IR remote codes

Discuss development of drivers for external hardware and components, such as LCD screens, sensors, motor drivers, etc.
Target audience: Users and developers of drivers.
User avatar
pythoncoder
Posts: 5956
Joined: Fri Jul 18, 2014 8:01 am
Location: UK
Contact:

Receive and transmit IR remote codes

Post by pythoncoder » Thu Feb 27, 2020 10:25 am

I have released this repo which supports infra red remote controls. Protocols supported are NEC, Sony, and two Philips options. A receiver and "blaster" driver are provided. Both are nonblocking. They are not reliant on uasyncio but are compatible with it. The transmitter is Pyboard specific.

A transmitter demo implements a 2-button remote with auto-repeat.
Peter Hinch
Index to my micropython libraries.

Marius
Posts: 21
Joined: Fri Nov 30, 2018 2:08 pm

Re: Receive and transmit IR remote codes

Post by Marius » Sun Mar 08, 2020 10:51 pm

pythoncoder wrote:
Thu Feb 27, 2020 10:25 am
I have released this repo which supports infra red remote controls. Protocols supported are NEC, Sony, and two Philips options. A receiver and "blaster" driver are provided. Both are nonblocking. They are not reliant on uasyncio but are compatible with it. The transmitter is Pyboard specific.

A transmitter demo implements a 2-button remote with auto-repeat.
Thanks for the work! :D I will def check it out.

User avatar
pythoncoder
Posts: 5956
Joined: Fri Jul 18, 2014 8:01 am
Location: UK
Contact:

Re: Receive and transmit IR remote codes

Post by pythoncoder » Mon Mar 09, 2020 7:17 am

This is a work in progress. The code on GitHub works, but I'm improving it with the following objectives:
  1. Receiver and Transmitter will be Python packages to reduce RAM use.
  2. Transmitter will work on ESP32 in addition to Pyboards.
ESP8266 is incapable of a nonblocking transmit owing to the limitations of its PWM.
Peter Hinch
Index to my micropython libraries.

User avatar
pythoncoder
Posts: 5956
Joined: Fri Jul 18, 2014 8:01 am
Location: UK
Contact:

Re: Receive and transmit IR remote codes

Post by pythoncoder » Wed Mar 11, 2020 12:13 pm

This has now been updated. The API has changed since the initial release but should now be stable. All drivers are nonblocking. The transmitter now fully supports ESP32.

The ESP32 transmitter uses a PWM object to generate the carrier. Modulation is provided by the RMT class which offers precision timing. A simple hardware gate physically performs the OOK modulation and drives the IR LED.
Peter Hinch
Index to my micropython libraries.

kevinkk525
Posts: 969
Joined: Sat Feb 03, 2018 7:02 pm

Re: Receive and transmit IR remote codes

Post by kevinkk525 » Wed Mar 11, 2020 2:33 pm

This sounds so awesome I want to try it :D But I don't really have a use-case for it :? I don't really use any devices with IR..
Unless it can control RF433Mhz power sockets one day :lol: then I have lots of use-cases.
Kevin Köck
Micropython Smarthome Firmware (with Home-Assistant integration): https://github.com/kevinkk525/pysmartnode

User avatar
pythoncoder
Posts: 5956
Joined: Fri Jul 18, 2014 8:01 am
Location: UK
Contact:

Re: Receive and transmit IR remote codes

Post by pythoncoder » Thu Mar 12, 2020 8:30 am

The applications I have in mind are bridges between IR remotes and WiFi, or IR to UART bridges. With a WiFi bridge a few devices could control an IR controlled box in one room using its remote elsewhere. Or control a Sonoff-type WiFi mains socket.

My original interest in the Sonoff was to make the receiver part of this bridge. I fitted the chip in the box and wrote the code to do MQTT publications on receipt of IR. It worked but the original Sonoff hardware proved so poor that I abandoned it. The new one does work well enough to do this job and I think I could fit the chip in the box, but I suspect an ESP32 (or even better a Pyboard D) running off a USB wall-wart might be a better solution now.

Another use case for the receiver would be for projects controlled by an IR remote. My completed projects use touchscreens but I have ideas for things which would benefit from remote control.

As for 433MHz it's getting on for a decade since I played with that (using Arduino). What do you have in mind? A WiFi/MQTT to 433MHz transmitter bridge? Or a simple IR rx with 433MHz tx? I doubt either would be hard: I'm sure the RF protocols will be published somewhere. Failing that, there's always an rx and a scope...
Peter Hinch
Index to my micropython libraries.

kevinkk525
Posts: 969
Joined: Sat Feb 03, 2018 7:02 pm

Re: Receive and transmit IR remote codes

Post by kevinkk525 » Thu Mar 12, 2020 7:19 pm

You are right, I wasn't thinking far enough.. It's not only about controlling an IR device. I could use an IR remote to control everything in my house connected by mqtt, which is pretty cool actually.
Have to think about that some more.. I have a project in a different building where lights are going to be controlled over mqtt (using Sonoff 4CH Pro and Sonoff T0EU3C switches). An IR remote could be pretty nice addition here.


As for 433MHz there are libraries for RPIs in C++ but my C++ is a bit rusty.. However I expect the esp8266 to be incapable of getting the timings right. An esp32 using RMT would probably have no problem. But can't put any time into that right now.
Just thought about it as I control the lights in my room using 433MHz power sockets and I still have 8 more lying around :D They are a lot cheaper than Sonoff Wifi Power Sockets (and I have those since a few years now...).
Kevin Köck
Micropython Smarthome Firmware (with Home-Assistant integration): https://github.com/kevinkk525/pysmartnode

wr300000
Posts: 32
Joined: Sun Jan 14, 2018 3:54 pm

Re: Receive and transmit IR remote codes

Post by wr300000 » Fri Mar 13, 2020 6:41 am

Hi Peter,
I've got TSOP4838 38kHze receiver on my breadboard wit ESP32-PSRAM including copy ir_rx directory application already to test your ir_rx driver but unfortunately, upip could not find this package. see below message.

>>> upip.install('pystone_lowmem')
Installing to: /lib/
Installing pystone_lowmem 3.4.2.post4 from https://micropython.org/pi/pystone_lowm ... st4.tar.gz <--- confirm that upip and internet is working well
>>> upip.install('ir_rx')
Installing to: /lib/
Error installing 'ir_rx': Package not found, packages may be partially installed <--- I don't have any frozen ir_rx modules
>>>

How can I install your ir_rx driver package ?

User avatar
pythoncoder
Posts: 5956
Joined: Fri Jul 18, 2014 8:01 am
Location: UK
Contact:

Re: Receive and transmit IR remote codes

Post by pythoncoder » Fri Mar 13, 2020 6:50 am

This has prompted a few ideas. To relate just one of them: I use 433MHz remote controlled sockets in several locations around the house. The remotes have lousy range. I wonder if a 433MHz transmitter module with a decent antenna and groundplane, centrally located, could control all the sockets around the house? From what I've read the modulation is OOK, as per IR remotes but with different protocols. It does sound like it might be easy to try.

The ESP32 RMT class is magic :D
Peter Hinch
Index to my micropython libraries.

User avatar
pythoncoder
Posts: 5956
Joined: Fri Jul 18, 2014 8:01 am
Location: UK
Contact:

Re: Receive and transmit IR remote codes

Post by pythoncoder » Fri Mar 13, 2020 6:54 am

wr300000 wrote:
Fri Mar 13, 2020 6:41 am
...
How can I install your ir_rx driver package ?
The package is only on GitHub, not on PyPi, so upip cannot install it. You need to clone the repository to your PC and copy the directory to your device as per the docs.

Code: Select all

git clone https://github.com/peterhinch/micropython_ir
will copy my repo to the current directory on your PC. Then use rshell (or other utility) to copy it to your hardware.
Peter Hinch
Index to my micropython libraries.

Post Reply