Skip to main content

Build Status codecov Version Implementation Status Pyversions Format License Issues

WS2801python_rpi

A python module connecting RPI with WS2801

It is based on the spidev module you can find here.

You can use it like this:

import WS2801_RPI as w
s=w.set_led_colors_buffer_list_multi_call

w.set_number_of_leds(100)                      # adjust to the number of leds in your project
w.hello()
w.s(1)                                         # to let led number 1 shine in white
w.flush()                                      # to communicate your settings to the led strip via spi

You can call set_leds as often as you like before flushing it out. And of course you can flush as often as you need to create effects.

Other convenience functions are:

  • set_number_of_leds(leds=128): Call this to set the number of LEDs on your strip for WS2801_RPI.

  • hello(): I had many issues before I started to do a flush() with all LEDs white. This is a convenience function to let all LEDs shine 3 times for one second. If you call it and nothing happens: There must be an issue either in program (Check set_number_of_leds and set_spidev_bus_device) or in your wiring

  • clear(): turn off all leds. Remember you need to call flush() to see the effect.

  • get_led_colors_buffer_dict(): Get all rgb values currently in the buffer as dictionary. This might differ from what you see on your LED strip.

  • set_led_colors_buffer_dict_multi_call(): After you adjusted the dict of the function above: Write it back to the buffer. Don’t forget flush().

  • get_led_colors_buffer_list(): Get back two lists. First is a list with integers for all of your LEDs (boring but needed for the set function) and a list of lists each with the three values for rgb

  • set_led_colors_buffer_list_multi_call(pixels, rgb_values=[255, 255, 255]): Set the colors for a list of LEDs (pixels). If you give less lists for RGB values than numbers for LEDs the last RGB value is assumed for the remaining LEDs. If you give only a list for rgb_values (like in the default) all LEDs in pixels are set to these values. If pixel is an int you are adressing one LED with this int. I know that this kind of multi is not for production but with this setup my daughter was happy and could play arround before doing all the python list topics.

  • set_max_speed_hz(hz): Default is 1MHz. You may change this but not below 1,5KHz.

  • flush(): Send the data out to the LED strip via SPI

  • set_gamma(): Set the gamma value. Formula is: int(((rgb/255)**gamma)*255). Default is 2.1 which reduces the number of rgb values to approx. 187. Set it to 1 you will have 255 values per color but you won’t be able to see them. Your eye will turn many into white.

  • set_spidev_bus_device(bus=0, device=0): Change the default bus and device for WS2801_RPI

  • get_number_of_leds(): You should know anyhow. But if you want to check how many LEDs WS2801_RPI is assuming call this function.

Installation

pip install WS2801_RPI.

Hint

You can raise the log level if you like to suppress warnings:

import logging
logging.getLogger().setLevel(31)

Testing

You can call python setup.py test to run the tests (if you clone the git repo onto your machine). I will update as soon as I have more understanding on the test infrastructure.

Acknowledgement

General remarks on WS2801:

  • In the Data Sheet of WS2801 I found the following passage I didn’t fully understand: When the WS2801 receives total 24 clock rising edges, the WS2801 enters relay mode .... In addition one can read this explanation. I found it helpful.

  • WS2801 is using the raising flag of the clock to retrieve the data and expects clock being low for 500 microseconds between data transmissions. Hence there is no need to change the mode of spidev.

Would be glad if this code was used often in your projects. Feedback and pull requests are more than welcome.

Metadata

Release files for WS2801-RPI 1.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for WS2801-RPI 1.0.2
File Size Uploaded
WS2801_RPI-1.0.2.tar.gz 22.9 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for WS2801-RPI 1.0.2
File Interpreter ABI Platform
WS2801_RPI-1.0.2-py3.6.egg Legacy Egg format - - Details
WS2801_RPI-1.0.2-py2.7.egg Legacy Egg format - - Details

Total release size: 59.8 kB

Release files / WS2801_RPI-1.0.2.tar.gz

Download URL WS2801_RPI-1.0.2.tar.gz
Size 22.9 kB
Tags Source
SHA-256 checksum
How to use checksums
d1781579b0b7a0961ab08f1e7c0a1dde914162443bbb895e4cadaa7dce2ddd09
BLAKE2b-256 checksum
How to use checksums
05e85561b45098d23a73bce08012f069cc83ebd90a334f8e49cadb582f139396
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / WS2801_RPI-1.0.2-py3.6.egg

Download URL WS2801_RPI-1.0.2-py3.6.egg
Size 18.6 kB
Tags Egg
SHA-256 checksum
How to use checksums
83c88f7691c188702a655713e64bde665c563316a8498ad775cb6a81c54c0c6d
BLAKE2b-256 checksum
How to use checksums
ddc52322062145f96ae13b915d90f1a7306db19577da92746385271095209339
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Release files / WS2801_RPI-1.0.2-py2.7.egg

Download URL WS2801_RPI-1.0.2-py2.7.egg
Size 18.3 kB
Tags Egg
SHA-256 checksum
How to use checksums
4d97d177d8a197d944784086be2332f4e620e1350ea08b927d22b7f37fbf40e6
BLAKE2b-256 checksum
How to use checksums
3f7591ae1ef519d2607542865740fc687ec2e66f30942a87419994ea03c5f18a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page