Raspberry pie science experiment 4B--05_ horse race lamp

Posted by anothersystem on Wed, 02 Feb 2022 19:45:10 +0100

Small experiment catalogue

Raspberry pie science experiment
001 turn on the first LED
002 light up the LED lamp group
003_ Switch control LED light
004_ Obtain temperature and humidity
005_ Running lamp (ws2812b))

preface

For unknown reasons, in a burst of smoke, my raspberry pie 4B motherboard and interface board were reimbursed. Only today did I receive a new board purchased from Jingdong at a high price (it's really expensive to do hardware development!) New year's first burning, I hope this year can be prosperous!
To make a long story short, get back to the point: this experiment still imports the required library files from github.
https://github.com/rpi-ws281x/rpi-ws281x-python

Tip: the following is the main content of this article. The following cases can be used for reference

1, Experimental element

WS2812 component board with 8 RGB light beads

One GPIO expansion board or one bread board

2, ws2812b principle

Here is the description of 2812 principle cited. The output of 3.3v can be used in the actual connection
The general wiring diagram is as follows:

VCC: 3.3v is connected from the 3.3v power supply GPIO of raspberry pie
GND: connected to the common ground interface of raspberry pie
Control pin: connected to IO12 (here it needs to be connected to PWM pin, because we need to adjust the frequency later)
Each lamp bead is connected in series. From DI to DO, a filter capacitor (100MF) is required between VCC and GND

For ws2812b, you can download the ready-made library from github. There is no need to restart the underlying application. We can call it directly.

3, Code part:

1) Import and install the library of ws2812

sudo pip install rpi_ws281x

2) Set public part

Some parts of the Chinese standard need to be modified according to the actual needs, and others can be modified or not

# LED strip configuration:
LED_COUNT = 8        # Set the number of lamp beads. I only have 8 lamp beads
LED_PIN = 12          #Set the connection position of the control pin (mine is 12 pin. Note that PWM needs to be used here. If it is 10 pin, SPI control needs to be used)  
LED_FREQ_HZ = 800000  # Set the frequency of PWM (that is, the frequency of lamp beads, 800KHZ)
LED_DMA = 10          # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255  # Set to 0 for darkest and 255 for brightest
LED_INVERT = False    # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL = 0       # set to '1' for GPIOs 13, 19, 41, 45 or 53

3) Define a function to light
Color: color value in RGB format.
strip: lamp group after initialization

def colorWipe(strip, color, wait_ms=50):
    """Wipe color across display a pixel at a time."""
    for i in range(strip.numPixels()):
        strip.setPixelColor(i, color)
        strip.show()
        time.sleep(wait_ms / 1000.0)

4) Defines a gradient function

def rainbow(strip, wait_ms=20, iterations=1):
    """Draw rainbow that fades across all pixels at once."""
    for j in range(256 * iterations):
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, wheel((i + j) & 255))
        strip.show()
        time.sleep(wait_ms / 1000.0)
def rainbowCycle(strip, wait_ms=20, iterations=5):
    """Draw rainbow that uniformly distributes itself across all pixels."""
    for j in range(256 * iterations):
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, wheel(((i * 256 // strip.numPixels()) + j) & 255))
        strip.show()
        time.sleep(wait_ms / 1000.0)

5) Define a function for the lantern

def theaterChaseRainbow(strip, wait_ms=50):
    """Rainbow movie theater light style chaser animation."""
    for j in range(256):
        for q in range(3):
            for i in range(0, strip.numPixels(), 3):
                strip.setPixelColor(i + q, wheel((i + j) % 255))
            strip.show()
            time.sleep(wait_ms / 1000.0)
            for i in range(0, strip.numPixels(), 3):
                strip.setPixelColor(i + q, 0)

Complete test cases:

# NeoPixel library strandtest example
# Author: Tony DiCola (tony@tonydicola.com)
#
# Direct port of the Arduino NeoPixel library strandtest example.  Showcases
# various animations on a strip of NeoPixels.
import time

from rpi_ws281x import Color, PixelStrip, ws


# LED strip configuration:
LED_COUNT = 40         # Number of LED pixels.
LED_PIN = 18           # GPIO pin connected to the pixels (must support PWM!).
LED_FREQ_HZ = 800000   # LED signal frequency in hertz (usually 800khz)
LED_DMA = 10           # DMA channel to use for generating signal (try 10)
LED_BRIGHTNESS = 255   # Set to 0 for darkest and 255 for brightest
LED_INVERT = False     # True to invert the signal (when using NPN transistor level shift)
LED_CHANNEL = 0
LED_STRIP = ws.SK6812_STRIP_RGBW
# LED_STRIP = ws.SK6812W_STRIP


# Define functions which animate LEDs in various ways.
def colorWipe(strip, color, wait_ms=50):
    """Wipe color across display a pixel at a time."""
    for i in range(strip.numPixels()):
        strip.setPixelColor(i, color)
        strip.show()
        time.sleep(wait_ms / 1000.0)


def theaterChase(strip, color, wait_ms=50, iterations=10):
    """Movie theater light style chaser animation."""
    for j in range(iterations):
        for q in range(3):
            for i in range(0, strip.numPixels(), 3):
                strip.setPixelColor(i + q, color)
            strip.show()
            time.sleep(wait_ms / 1000.0)
            for i in range(0, strip.numPixels(), 3):
                strip.setPixelColor(i + q, 0)


def wheel(pos):
    """Generate rainbow colors across 0-255 positions."""
    if pos < 85:
        return Color(pos * 3, 255 - pos * 3, 0)
    elif pos < 170:
        pos -= 85
        return Color(255 - pos * 3, 0, pos * 3)
    else:
        pos -= 170
        return Color(0, pos * 3, 255 - pos * 3)


def rainbow(strip, wait_ms=20, iterations=1):
    """Draw rainbow that fades across all pixels at once."""
    for j in range(256 * iterations):
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, wheel((i + j) & 255))
        strip.show()
        time.sleep(wait_ms / 1000.0)


def rainbowCycle(strip, wait_ms=20, iterations=5):
    """Draw rainbow that uniformly distributes itself across all pixels."""
    for j in range(256 * iterations):
        for i in range(strip.numPixels()):
            strip.setPixelColor(i, wheel(((i * 256 // strip.numPixels()) + j) & 255))
        strip.show()
        time.sleep(wait_ms / 1000.0)


def theaterChaseRainbow(strip, wait_ms=50):
    """Rainbow movie theater light style chaser animation."""
    for j in range(256):
        for q in range(3):
            for i in range(0, strip.numPixels(), 3):
                strip.setPixelColor(i + q, wheel((i + j) % 255))
            strip.show()
            time.sleep(wait_ms / 1000.0)
            for i in range(0, strip.numPixels(), 3):
                strip.setPixelColor(i + q, 0)


# Main program logic follows:
if __name__ == '__main__':
    # Create NeoPixel object with appropriate configuration.
    strip = PixelStrip(LED_COUNT, LED_PIN, LED_FREQ_HZ, LED_DMA, LED_INVERT, LED_BRIGHTNESS, LED_CHANNEL, LED_STRIP)
    # Intialize the library (must be called once before other functions).
    strip.begin()

    print('Press Ctrl-C to quit.')
    while True:
        # Color wipe animations.
        colorWipe(strip, Color(255, 0, 0))  # Red wipe
        colorWipe(strip, Color(0, 255, 0))  # Blue wipe
        colorWipe(strip, Color(0, 0, 255))  # Green wipe
        colorWipe(strip, Color(0, 0, 0, 255))  # White wipe
        colorWipe(strip, Color(255, 255, 255))  # Composite White wipe
        colorWipe(strip, Color(255, 255, 255, 255))  # Composite White + White LED wipe
        # Theater chase animations.
        theaterChase(strip, Color(127, 0, 0))  # Red theater chase
        theaterChase(strip, Color(0, 127, 0))  # Green theater chase
        theaterChase(strip, Color(0, 0, 127))  # Blue theater chase
        theaterChase(strip, Color(0, 0, 0, 127))  # White theater chase
        theaterChase(strip, Color(127, 127, 127, 0))  # Composite White theater chase
        theaterChase(strip, Color(127, 127, 127, 127))  # Composite White + White theater chase
        # Rainbow animations.
        rainbow(strip)
        rainbowCycle(strip)
        theaterChaseRainbow(strip)

effect:
! [in

Topics: Single-Chip Microcomputer IoT Raspberry Pi