LATEST RELEASE:  FPP 7.5 - Download from here -



Welcome, Guest.
Please login or register.
Forgot your password?

+-Site Stats

Total Members: 16462
Latest: TheRockyRoad
New This Month: 12
New This Week: 1
New Today: 0
Total Posts: 132620
Total Topics: 16449
Most Online Today: 390
Most Online Ever: 7634
(January 21, 2020, 02:14:03 AM)
Users Online
Members: 0
Guests: 114
Total: 114

FPP and WS2812b not work, but work with python script

Started by irumi, April 11, 2024, 03:11:34 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.


Hello, I purchased a WS2812b LED strip. I connected it directly to a Raspberry Pi 3, on GPIO18. 
I'm trying to make it work with Falcon Pi Player (FPP). FPP is installed on my Raspberry Pi, and I can access the FPP interface via my browser. I configured my strip in the OUTPUT tab, as "spixels", port 1 (GPIO18, P1-12) with the protocol WS8101.

On the Display Testing page, I check Enable Test Mode, select the configured LED strip, but it doesn't work.

I tested it with a Python script found on the internet, I run the script via FPP and it works perfectly fine. The major difference I see is the protocol used: WS2811X via Python and WS8101 via FPP. I searched online if I could install the WS2811X protocol, but I couldn't find how to do it.
Do you think my error comes from there? If yes, can we install the WS2811X protocol?

My Python script:
#!/usr/bin/env python3
# NeoPixel library strandtest example
# Author: Tony DiCola (
# Direct port of the Arduino NeoPixel library strandtest example.  Showcases
# various animations on a strip of NeoPixels.

import time
from rpi_ws281x import PixelStrip, Color
import argparse

# LED strip configuration:
LED_COUNT = 50        # Number of LED pixels.
LED_PIN = 18          # GPIO pin connected to the pixels (18 uses PWM!).
# LED_PIN = 10        # GPIO pin connected to the pixels (10 uses SPI /dev/spidev0.0).
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       # set to '1' for GPIOs 13, 19, 41, 45 or 53

# 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)
        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)
            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)
        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))
        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(
                (int(i * 256 / strip.numPixels()) + j) & 255))
        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))
            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__':
    # Process arguments
    parser = argparse.ArgumentParser()
    parser.add_argument('-c', '--clear', action='store_true', help='clear the display on exit')
    args = parser.parse_args()

    # Create NeoPixel object with appropriate configuration.
    # Intialize the library (must be called once before other functions).

    print('Press Ctrl-C to quit.')
    if not args.clear:
        print('Use "-c" argument to clear LEDs on exit')


        while True:
            print('Color wipe animations.')
            colorWipe(strip, Color(255, 0, 0))  # Red wipe
            colorWipe(strip, Color(0, 255, 0))  # Green wipe
            colorWipe(strip, Color(0, 0, 255))  # Blue wipe
            print('Theater chase animations.')
            theaterChase(strip, Color(127, 127, 127))  # White theater chase
            theaterChase(strip, Color(127, 0, 0))  # Red theater chase
            theaterChase(strip, Color(0, 0, 127))  # Blue theater chase
            print('Rainbow animations.')

    except KeyboardInterrupt:
        if args.clear:
            colorWipe(strip, Color(0, 0, 0), 10)


You want to configure it as a "PiHat" which is a dual-output Channel Output for WS281x pixels.  Install the PiHat virtual EEPROM and configure the PiHat output and your pixels should work.


Thank you for the response. I'll test it this weekend. I didn't think of trying that because I don't have a PiHat on my Raspberry Pi.


The "PiHat" output and Virtual EEPROM is the one used to drive 2 outputs of WS281x pixels using the rpiws281x library.  You don't need a hat installed to use the output.  The pins used match what you are looking for.

If you want to drive up to 24 outputs of WS281x pixels on a Pi, you can use the DPIPixels virtual EEPROM.

Support FPP

+- Recent Topics

Video Output display creation failed by Zcarpenter
June 17, 2024, 11:42:12 AM

Difference on Channel output > LED Panels between two FPP instances by Poporacer
June 17, 2024, 08:08:51 AM

Scheduler Holiday list now only has Christmas and New Years by SeldenBlack
June 16, 2024, 04:43:00 PM

Did the the latest upgrade tonight and it failed. by k6ccc
June 15, 2024, 11:56:26 AM

FPP 7.5 Virtual Matrix Overlay Sub Model State by wjenkins364
June 14, 2024, 11:04:59 PM

Looking for specs on F4V2 (Red) by algerdes
June 13, 2024, 08:14:31 PM

F16v3 & Differential Cntrl Pwr Question by
June 13, 2024, 07:55:31 PM

No Audio by Steve
June 07, 2024, 02:10:47 PM

Video IP Capture -> sound by MikeKrebs
June 06, 2024, 09:00:17 PM

Control Channel Output by zj023
June 03, 2024, 06:23:35 AM

Powered by EzPortal
Powered by SMFPacks Menu Editor Mod