我正在尝试为 Neopixel Led 灯条创建自己的库,因为没有具有我需要的功能的库,我想知道 LED 是如何工作的。在 LED 的数据表中,我发现我必须以方波的形式发送 24 位 GRB 颜色值,并在 24 位之间暂停 50us。
https://i.stack.imgur.com/SG30f.png
现在我想知道如何在树莓派的帮助下将那些 24 位 GRB 颜色转换为方波。
Example01
import time
import RPi.GPIO as GPIO
us = 0
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.OUT)
def microdelay(us):
time.sleep(us/1e6)
def zero():
GPIO.output(18, GPIO.HIGH)
microdelay(0.4)
GPIO.output(18, GPIO.LOW)
microdelay(0.85)
def one():
GPIO.output(18, GPIO.HIGH)
microdelay(0.8)
GPIO.output(18, GPIO.LOW)
microdelay(0.45)
# Color Red : 0000 0000 1111 1111 0000 0000
if __name__ == "__main__":
zero()
zero()
zero()
zero()
zero()
zero()
zero()
zero()
one()
one()
one()
one()
one()
one()
one()
one()
zero()
zero()
zero()
zero()
zero()
zero()
zero()
zero()
print("strip is red")
我在控制台上得到这个输出:
pi@raspberrypi:~/库测试 $ sudo python3 LED_testing.py
LED_testing.py:9: RuntimeWarning: 这个频道已经在使用,继续。使用 GPIO.setwarnings(False) 禁用警告。GPIO.setup(18, GPIO.OUT)
条带是红色的
pi@raspberrypi:~/库测试 $
示例02
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(18, GPIO.OUT)
def usleep(us: int):
time.sleep(us/1e6)
def one():
GPIO.output(18, GPIO.HIGH)
usleep(0.8)
GPIO.output(18, GPIO.LOW)
usleep(0.45)
def zero():
GPIO.output(18, GPIO.HIGH)
usleep(0.4)
GPIO.output(18, GPIO.LOW)
usleep(0.85)
if __name__ == '__main__':
for i in range(0, 862):
# Green
one()
one()
one()
one()
one()
one()
one()
one()
# Red
one()
one()
one()
one()
one()
one()
one()
one()
# Blue
one()
one()
one()
one()
one()
one()
one()
one()
usleep(50)
print("strip is white")
控制台输出:pi@raspberrypi:~/Libary testing $ sudo python3 LED_testing.py
LED_testing.py:7: RuntimeWarning: 这个频道已经在使用中,继续。使用 GPIO.setwarnings(False) 禁用警告。GPIO.setup(18, GPIO.OUT) 条为白色
pi@raspberrypi:~/库测试 $