adafruit_irremote

Demo code for Circuit Playground Express:

# Circuit Playground Express Demo Code
# Adjust the pulseio 'board.PIN' if using something else
import pulseio
import board
import adafruit_irremote

pulsein = pulseio.PulseIn(board.REMOTEIN, maxlen=120, idle_state=True)
decoder = adafruit_irremote.GenericDecode()


while True:
    pulses = decoder.read_pulses(pulsein)
    print("Heard", len(pulses), "Pulses:", pulses)
    try:
        code = decoder.decode_bits(pulses)
        print("Decoded:", code)
    except adafruit_irremote.IRNECRepeatException:  # unusual short code!
        print("NEC repeat!")
    except adafruit_irremote.IRDecodeException as e:     # failed to decode
        print("Failed to decode: ", e.args)

    print("----------------------------")
  • Author(s): Scott Shawcroft

Implementation Notes

Hardware:

Software and Dependencies:

exception adafruit_irremote.FailedToDecode[source]

Raised by decode_bits. Error argument is UnparseableIRMessage

class adafruit_irremote.GenericDecode[source]

Generic decoding of infrared signals

bin_data(pulses)[source]

Wraps the top-level function bin_data for backward-compatibility.

decode_bits(pulses)[source]

Wraps the top-level function decode_bits for backward-compatibility.

read_pulses(input_pulses, *, max_pulse=10000, blocking=True, pulse_window=0.1, blocking_delay=0.1)[source]

Read out a burst of pulses until pulses stop for a specified period (pulse_window), pruning pulses after a pulse longer than max_pulse.

Parameters:
  • input_pulses (PulseIn) – Object to read pulses from
  • max_pulse (int) – Pulse duration to end a burst
  • blocking (bool) – If True, will block until pulses found. If False, will return None if no pulses. Defaults to True for backwards compatibility
  • pulse_window (float) – pulses are collected for this period of time
  • blocking_delay (float) – delay between pulse checks when blocking
class adafruit_irremote.GenericTransmit(header, one, zero, trail, *, debug=False)[source]

Generic infrared transmit class that handles encoding.

Parameters:
  • header (int) – The length of header in microseconds
  • one (int) – The length of a one in microseconds
  • zero (int) – The length of a zero in microseconds
  • trail (int) – The length of the trail in microseconds, set to None to disable
  • debug (bool) – Enable debug output, default False
transmit(pulseout, data, *, repeat=0, delay=0, nbits=None)[source]

Transmit the data using the pulseout.

Parameters:
  • pulseout (pulseio.PulseOut) – PulseOut to transmit on
  • data (bytearray) – Data to transmit
  • repeat (int) – Number of additional retransmissions of the data, default 0
  • delay (float) – Delay between any retransmissions, default 0
  • nbits (int) – Optional number of bits to send, useful to send fewer bits than in the data bytes
exception adafruit_irremote.IRDecodeException[source]

Generic decode exception

class adafruit_irremote.IRMessage(pulses, code)

Pulses and the code they were parsed into

code

Alias for field number 1

pulses

Alias for field number 0

exception adafruit_irremote.IRNECRepeatException[source]

Exception when a NEC repeat is decoded

class adafruit_irremote.NECRepeatIRMessage(pulses)

Pulses interpreted as an NEC repeat code

pulses

Alias for field number 0

class adafruit_irremote.NonblockingGenericDecode(pulses, max_pulse=10000)[source]

Decode pulses into bytes in a non-blocking fashion.

Parameters:
  • input_pulses (PulseIn) – Object to read pulses from
  • max_pulse (int) – Pulse duration to end a burst. Units are microseconds.
>>> pulses = PulseIn(...)
>>> decoder = NonblockingGenericDecoder(pulses)
>>> for message in decoder.read():
...     if isinstace(message, IRMessage):
...         message.code  # TA-DA! Do something with this in your application.
...     else:
...         # message is either NECRepeatIRMessage or
...         # UnparseableIRMessage. You may decide to ignore it, raise
...         # an error, or log the issue to a file. If you raise or log,
...         # it may be helpful to include message.pulses in the error message.
...         ...
read()[source]

Consume all pulses from PulseIn. Yield decoded messages, if any.

If a partial message is received, this does not block to wait for the rest. It stashes the partial message, to be continued the next time it is called.

adafruit_irremote.UnparseableIRMessage

Pulses and the reason that they could not be parsed into a code

alias of adafruit_irremote.IRMessage

adafruit_irremote.bin_data(pulses)[source]

Compute bins of pulse lengths where pulses are +-25% of the average.

Parameters:pulses (list) – Input pulse lengths
adafruit_irremote.decode_bits(pulses)[source]

Decode the pulses into bits.