【国产RISC-V Linux板 昉·星光VisionFive试用报告】Python点亮炫彩灯环
[复制链接]
在之前的分享中,我讲过使用C语言,直接操作spi设备,来控制WS2812B灯珠,原文可见:C语言编程控制WS2812B炫彩灯珠
这一次,我们使用Python语言来控制。
得益于Python的可扩展性,已经有很多爱好者,做出了各种WS2812B的控制模块,经过一番研究,我选择了ws2812-spi,其官网地址为:
ws2812-spi模块,本来是给树莓派写的,但是在星光派上面,也能够正常使用。
首先是接线,还是参考上次的接线:

但我这次用的是炫彩灯环:
不过接线方式完全一样,因为WS2812B系列,都是VCC、GND、DIN的。
同样注意,需要使用额外的电源,给WS1812B供电,不要用板载的5V。
然后,要先安装下面的模块,以便python能够操作spi设备:
- git clone https:
- cd py-spidev
- make
- make install
安装好以后,就可以下载ws2812-spi的代码了:
- git clone https:
- cd ws2812-spi
再编写一个下面的Python程序:
- import spidev
- import sys
- import time
-
- sys.path.append("./")
- import ws2812
-
- spi = spidev.SpiDev()
- spi.open(0,0)
-
-
-
- nLED=24
- ledArray = [[0,0,0]]*nLED
- print(ledArray)
- ws2812.write2812(spi, ledArray)
- time.sleep(1)
-
-
-
-
- for n in range(0,100):
- for i in range(0,nLED):
- if i > 0:
- ledArray[i-1] = [0, 0, 0]
-
-
- else:
- ledArray[nLED-1] = [0, 0, 0]
-
- if i % 7 ==0:
- ledArray[i] = [100, 0, 0]
- if i % 7 ==1:
- ledArray[i] = [0, 100, 0]
- if i % 7 ==2:
- ledArray[i] = [0, 0, 100]
- if i % 7 ==3:
- ledArray[i] = [100, 100, 0]
- if i % 7 ==4:
- ledArray[i] = [100, 0, 100]
- if i % 7 ==5:
- ledArray[i] = [0, 100, 100]
- if i % 7 ==6:
- ledArray[i] = [100, 100, 100]
-
- print(ledArray)
- ws2812.write2812(spi, ledArray)
- time.sleep(0.05)
-
将上述代码,保存为test.py,以便后续执行。
在上述代码中,其逻辑如下:
- 先打开spi设备,使用:
spi = spidev.SpiDev()
spi.open(0,0)
-
再将所有的灯熄灭:
nLED=24
ledArray = [[0,0,0]]*nLED
ws2812.write2812(spi, ledArray)
-
然后循环,依次点亮下灯,并关闭上一课;根据循环的灯珠,来自动设定颜色
ws2812.write2812(spi, ledArray)的第二个参数,就是一个颜色数组:[r, g, b],取值为0-255
编写完成后,使用`python test.py执行`,就能点亮了灯环了。
最终的实际效果如下:
播放器加载失败: 未检测到Flash Player,请到 安装
1659406119560915
通过以上的代码,就能够控制这个炫彩灯环了。
如果进一步研究,你还可以考虑,根据简谱中的1234567,来设置点亮的灯珠个数,实现跟着音乐跳动,效果会更棒!
|