pulseio
– Support for individual pulse based protocols
The pulseio
module contains classes to provide access to basic pulse IO.
Individual pulses are commonly used in infrared remotes and in DHT
temperature sensors.
All classes change hardware state and should be deinitialized when they
are no longer needed if the program continues after use. To do so, either
call deinit()
or use a context manager. See
Lifetime and ContextManagers for more info.
Available on these boards
- class pulseio.PulseIn(pin: microcontroller.Pin, maxlen: int = 2, *, idle_state: bool = False)
Measure a series of active and idle pulses. This is commonly used in infrared receivers and low cost temperature sensors (DHT). The pulsed signal consists of timed active and idle periods. Unlike PWM, there is no set duration for active and idle pairs.
Create a PulseIn object associated with the given pin. The object acts as a read-only sequence of pulse lengths with a given max length. When it is active, new pulse lengths are added to the end of the list. When there is no more room (len() ==
maxlen
) the oldest pulse length is removed to make room.- Parameters:
Read a short series of pulses:
import pulseio import board pulses = pulseio.PulseIn(board.D7) # Wait for an active pulse while len(pulses) == 0: pass # Pause while we do something with the pulses pulses.pause() # Print the pulses. pulses[0] is an active pulse unless the length # reached max length and idle pulses are recorded. print(pulses) # Clear the rest pulses.clear() # Resume with an 80 microsecond active pulse pulses.resume(80)
- __exit__() None
Automatically deinitializes the hardware when exiting a context. See Lifetime and ContextManagers for more info.
- resume(trigger_duration: int = 0) None
Resumes pulse capture after an optional trigger pulse.
Warning
Using trigger pulse with a device that drives both high and low signals risks a short. Make sure your device is open drain (only drives low) when using a trigger pulse. You most likely added a “pull-up” resistor to your circuit to do this.
- Parameters:
trigger_duration (int) – trigger pulse duration in microseconds
- maxlen: int
The maximum length of the PulseIn. When len() is equal to maxlen, it is unclear which pulses are active and which are idle.
- paused: bool
True when pulse capture is paused as a result of
pause()
or an error during capture such as a signal that is too fast.
- class pulseio.PulseOut(pin: microcontroller.Pin, *, frequency: int = 38000, duty_cycle: int = 1 << 15)
Pulse PWM-modulated “carrier” output on and off. This is commonly used in infrared remotes. The pulsed signal consists of timed on and off periods. Unlike
pwmio.PWMOut
, there is no set duration for on and off pairs.Create a PulseOut object associated with the given pin.
- Parameters:
Send a short series of pulses:
import array import pulseio import board # 50% duty cycle at 38kHz. pulse = pulseio.PulseOut(board.LED, frequency=38000, duty_cycle=32768) # on off on off on pulses = array.array('H', [65000, 1000, 65000, 65000, 1000]) pulse.send(pulses) # Modify the array of pulses. pulses[0] = 200 pulse.send(pulses)
- __exit__() None
Automatically deinitializes the hardware when exiting a context. See Lifetime and ContextManagers for more info.
- send(pulses: circuitpython_typing.ReadableBuffer) None
Pulse alternating on and off durations in microseconds starting with on.
pulses
must be anarray.array
with data type ‘H’ for unsigned halfword (two bytes).This method waits until the whole array of pulses has been sent and ensures the signal is off afterwards.
- Parameters:
pulses (array.array) – pulse durations in microseconds