Non-blocking LED controlling library
Project description
Introduction
An embedded library for Python to control LEDs. It uses a non-blocking approach and can control LEDs in simple (on/off) and complex (blinking, breathing and more) ways in a time-driven manner.
This is a pure Python port of my JLed C++ library.
Features
non-blocking
effects: simple on/off, breathe, blink, candle, fade, user-defined
supports inverted polarity of LED
easy configuration using fluent interface
can control groups of LEDs sequentially or in parallel
supports CircuitPython and MicroPython
Usage Example
Test JLed interactively in a CircuitPython REPL:
Adafruit CircuitPython 7.3.3 on 2022-08-29; Raspberry Pi Pico with rp2040
>>> import board
>>> from jled import JLed
>>> led=JLed(board.LED).breathe(500).delay_after(250).repeat(5)
>>> while led.update(): pass
This creates a JLed object connected to the builtin LED (board.LED), with a breathe effect that is repeated 5 times. Each iteration is followed by a delay of 250 ms, before starting again. By calling led.update() periodically, the LED gets physically updated. Alternatively play(led) can be call in the REPL as a shortcut. Once finished, call led.reset() before playing the effect again.
Cheat Sheet
Installation
On supported GNU/Linux systems like the Raspberry Pi (with Adafruit-Blinka), you can install the lib locally from PyPI. To install for current user:
pip3 install circuitpython-jled
To install system-wide (this may be required in some cases):
sudo pip3 install circuitpython-jled
To install in a virtual environment in your current project:
mkdir project-name && cd project-name
python3 -m venv .venv
source .env/bin/activate
pip3 install circuitpython-jled
Installing to a Connected CircuitPython Device with Circup
JLed is available in the Circuitpython Community Bundle and can easily installed with circup by running:
$ circup install jled
Optionally copy also one of the example as code.py to the root of the filesystem.
Installing on a MicroPython device
Create a directory called jled on the device and copy the following files into this directory: into this directory: jled.py, jled_sequence.py hal_pwm_micropython.py, hal_time_micropython.py, play.py, __init__.py`. Optionally also copy one of the example as main.py to the root of the filesystem. The overall structure is:
/
├─ main.py
└─ jled
├─ __init__.[m]py
├─ hal_pwm_micropython.[m]py
├─ hal_time_micropython.[m]py
├─ jled.[m]py
├─ jled_sequence.[m]py
└─ play.[m]py
To reduce memory consumption, Python source files can be compiled to binary mpy format using the mpy-cross tool. For convenience, a script to compile and copy jled to a connected device is provided here (see scripts/install_mp.sh).
Documentation
API documentation for this library can be found on here.
Rebuild the documentation with sphinx-build -E -W -b html . _build/html in the docs directory. Run pip install ".[optional]" before to install build-time dependency Sphinx
Tests
Unit tests (using https://docs.pytest.org) are provided, run the tests with:
$ pip install ".[optional]"
$ pytest
To run the pre-commit-hook locally, run pre-commit run --all-files
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file circuitpython-jled-1.0.4.tar.gz
.
File metadata
- Download URL: circuitpython-jled-1.0.4.tar.gz
- Upload date:
- Size: 1.0 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cbedf4512a5997a280e7f2ae79532ddc94d2ec5b1b2033f56ae1af37047f7f77 |
|
MD5 | 080be01314570e0d3096c0bf1f247c54 |
|
BLAKE2b-256 | 2b048d7242b2a2b1cd31a21f684072d67f8bb5b59fedbe2479e8fd4fc66ce6c9 |
File details
Details for the file circuitpython_jled-1.0.4-py3-none-any.whl
.
File metadata
- Download URL: circuitpython_jled-1.0.4-py3-none-any.whl
- Upload date:
- Size: 16.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6e313bb288677e126b5d10eb7a751fb4540d020325a3970a25223503dd8ae4b7 |
|
MD5 | cf06e4ff5c7f0330d2a1d0ad4301077b |
|
BLAKE2b-256 | 39bbb835f3d1c60954339b0c4a6aae2619627445253934368f233e39a28a1117 |