---+ The rgb LED chain The LED employed on the !LoLin RGB LED card is very different from the one we used on the CPU card. In fact, the card uses cascadable, addressable !WS2812B color LED. rgb stands for red, blue, green. There are 3 very small colored LEDs with red, green and blue colors and by modifying the intensity of each LED different colors can be created. If all color components have the same intensity, the color observed will be white. If you want to know the details of how the !WS282B works, here is its [[https://cdn-shop.adafruit.com/datasheets/WS2812B.pdf][datasheet]]. Communicating with the !WS2812B can be quite complex because the communication timing must be strictly respected. Fortunately, the authors of !MicroPython supply a driver which makes usage of the !WS2812B a child's game. The driver is a !MicroPython class called [[https://docs.micropython.org/en/latest/esp32/quickref.html#neopixel-and-apa106-driver][NeoPixel]]. Here is a circuit diagram showing how the !WS2812B LEDs are cascaded. <img alt="ws2812b_diagram.png" height="377" src="%ATTACHURL%/ws2812b_diagram.png" title="ws2812b_diagram.png" width="704" /> Of course, on the rgb LED shield there are seven and not 3 cascaded LEDs. In fact, there are LED chains with several hundreds of LEDs cascaded this way. This is how the board looks like: | <img alt="leds.png" height="440" src="%ATTACHURL%/leds.png" title="leds.png" width="444" /> | <img alt="ledRingBack.png" height="483" src="%ATTACHURL%/ledRingBack.png" title="ledRingBack.png" width="440" /> | The board is jumpered to use D0 or GPIO 26 for its communication with the ESP32. All the !NeoPixel driver needs to know is the number of LEDs there are in the ring and which GPIO line to use for communication. The red green and blue color components are given as 8 bit values and can therefore range from 0 (off) to 255 (maximum brightness), <b>Be careful: The !WS2812B is extremely bright, and you may even damage your eyes when looking straight into the LED, set to maximum brightness. </b>I therefore recommend not to set brightness values higher than 32. <verbatim>from machine import Pin from neopixel import NeoPixel NO_OF_LEDS = 7 pin = Pin(26,Pin.OUT) # GPIO 26 is used for communication with the WS2812B ws2812b = NeoPixel(pin,NO_OF_LEDS) ws2812b[0] = (32,0,0) # Only the red color component is set. The LED number zero will light up in red ws2812b.write() # write the color to the LED</verbatim> First, do the exercises of [[ExerciseSheets#FourthSession]], then we will terminate the workshop with [[a small project]] -- %USERSIG{UliRaich - 2022-10-16}% ---++ Comments %COMMENT%
Attachments
Attachments
Topic attachments
I
Attachment
History
Action
Size
Date
Who
Comment
png
ledRingBack.png
r1
manage
348.5 K
2022-10-16 - 21:25
UliRaich
png
leds.png
r1
manage
292.6 K
2022-10-16 - 21:24
UliRaich
png
ws2812b_diagram.png
r1
manage
5.3 K
2022-10-24 - 13:19
UliRaich
This topic: AFNOG
>
ASP2022
>
MinimalLectures
>
RgbLEDChain
Topic revision: r5 - 2022-10-24 - UliRaich
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback