Giter Site home page Giter Site logo

micropython_ir's Introduction

Device drivers for IR (infra red) remote controls

This repo provides a driver to receive from IR (infra red) remote controls and a driver for IR "blaster" apps. The device drivers are nonblocking. They do not require uasyncio but are compatible with it, and are designed for standard firmware builds.

The receiver is cross platform and has been tested on Pyboard, ESP8266 and ESP32.

In a typical use case the receiver is employed at the REPL to sniff the address and data values associated with buttons on a remote control. The transmitter is then used in an application to send those codes, emulating the remote control.

Other use cases involve running the receiver in an application. This enables an IR remote to control a device such as a robot.

The transmitter driver is compatible with Pyboard (1.x and D series) and ESP32. ESP8266 is unsupported; it seems incapable of generating the required signals.

1. IR communication

IR communication uses a carrier frequency to pulse the IR source. Modulation takes the form of OOK (on-off keying). There are multiple protocols and at least three options for carrier frequency: 36, 38 and 40KHz.

In the case of the transmitter the carrier frequency is a runtime parameter: any value may be specified. The receiver uses a hardware demodulator which should be purchased for the correct frequency. The receiver device driver sees the demodulated signal and is hence carrier frequency agnostic.

Remotes transmit an address and a data byte, plus in some cases an extra value. The address denotes the physical device being controlled. The data defines the button on the remote. Provision usually exists for differentiating between a button repeatedly pressed and one which is held down; the mechanism is protocol dependent.

2. Supported protocols

The drivers support NEC and Sony protocols plus two Philips protocols, namely RC-5 and RC-6 mode 0. There is also support for the OrtekMCE protocol used on VRC-1100 remotes. These originally supported Microsoft Media Center but can be used to control Kodi and (with a suitable receiver) to emulate a PC keyboard.

Examining waveforms from various remote controls it is evident that numerous protocols exist. Some are doubtless proprietary and undocumented. The supported protocols are those for which I managed to locate documentation. My preference is for the NEC version. It has conservative timing and good provision for error detection. RC-5 has limited error detection, and RC-6 mode 0 has rather fast timing.

A remote using the NEC protocol is this one.

3. Hardware Requirements

These are discussed in detail in the relevant docs; the following provides an overview.

The receiver is cross-platform. It requires an IR receiver chip to demodulate the carrier. The chip must be selected for the frequency in use by the remote. For 38KHz devices a receiver chip such as the Vishay TSOP4838 or the adafruit one is required. This demodulates the 38KHz IR pulses and passes the demodulated pulse train to the microcontroller.

In my testing a 38KHz demodulator worked with 36KHz and 40KHz remotes, but this is obviously neither guaranteed nor optimal.

The transmitter requires a Pyboard 1.x (not Lite), a Pyboard D or an ESP32. Output is via an IR LED which will need a transistor to provide sufficient current. The ESP32 requires an extra transistor to work as a transmitter.

3.1 Carrier frequencies

These are as follows. The Samsung and Panasonic remotes appear to use proprietary protocols and are not supported by these drivers.

Protocol F KHz How found Support
NEC 38 Measured Y
RC-5 RC-6 36 Spec/measured Y
Sony 40 Spec/measured Y
MCE 38 Measured Y
Samsung 38 Measured N
Panasonic 36.3 Measured N

4. References

Sources of information about IR protocols.
General information about IR

The NEC protocol:
altium
circuitvalley

Philips protocols:
RC5
RC5
RC6

Sony protocol:
SIRC

MCE protocol:
OrtekMCE

IR decoders (C sourcecode):
in the Linux kernel

micropython_ir's People

Contributors

peterhinch avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.