HonestQiao 发表于 2022-8-2 10:32

【国产RISC-V Linux板 昉·星光VisionFive试用报告】Python点亮炫彩灯环

<p>在之前的分享中,我讲过使用C语言,直接操作spi设备,来控制WS2812B灯珠,原文可见:<a href="https://bbs.eeworld.com.cn/thread-1207485-1-1.html">C语言编程控制WS2812B炫彩灯珠</a></p>

<p>这一次,我们使用Python语言来控制。</p>

<p>得益于Python的可扩展性,已经有很多爱好者,做出了各种WS2812B的控制模块,经过一番研究,我选择了ws2812-spi,其官网地址为:<a href="https://github.com/joosteto/ws2812-spi">joosteto/ws2812-spi: python routines to program the WS2812 RGB LED chips on the raspberry, using the hardware SPI MOSI. (github.com)</a></p>

<p>ws2812-spi模块,本来是给树莓派写的,但是在星光派上面,也能够正常使用。</p>

<p>&nbsp;</p>

<p>首先是接线,还是参考上次的接线:</p>

<p><img src="https://bbs.eeworld.com.cn/data/attachment/forum/202206/19/003312vfu2hreeeiciciki.png.thumb.jpg" /></p>

<p>但我这次用的是炫彩灯环:</p>

<p>&nbsp;不过接线方式完全一样,因为WS2812B系列,都是VCC、GND、DIN的。</p>

<p>同样注意,需要使用额外的电源,给WS1812B供电,不要用板载的5V。</p>

<p>&nbsp;</p>

<p>然后,要先安装下面的模块,以便python能够操作spi设备:</p>

<pre style="background:#555; padding:10px; color:#ddd !important;">
<code>git clone https://github.com/doceme/py-spidev.git
cd py-spidev
make
make install</code></pre>

<p>安装好以后,就可以下载ws2812-spi的代码了:</p>

<pre style="background:#555; padding:10px; color:#ddd !important;">
<code>git clone https://github.com/joosteto/ws2812-spi.git
cd ws2812-spi</code></pre>

<p>再编写一个下面的Python程序:</p>

<div class="parsedown-markdown">
<pre style="background:#555; padding:10px; color:#ddd !important;">
<code class="language-python">import spidev
import sys
import time

sys.path.append("./")
import ws2812

spi = spidev.SpiDev()
spi.open(0,0)

# write2812=write2812_pylist8

nLED=24
ledArray = []*nLED
print(ledArray)
ws2812.write2812(spi, ledArray)
time.sleep(1)

#write 4 WS2812's, with the following colors: red, green, blue, yellow
# ws2812.write2812(spi, [, , , ])

for n in range(0,100):
    for i in range(0,nLED):
      if i &gt; 0:
            ledArray =
            # ws2812.write2812(spi, ledArray)
            # time.sleep(0.5)
      else:
            ledArray =

      if i % 7 ==0:
            ledArray =
      if i % 7 ==1:
            ledArray =
      if i % 7 ==2:
            ledArray =
      if i % 7 ==3:
            ledArray =
      if i % 7 ==4:
            ledArray =
      if i % 7 ==5:
            ledArray =
      if i % 7 ==6:
            ledArray =

      print(ledArray)
      ws2812.write2812(spi, ledArray)
      time.sleep(0.05)
</code></pre>
</div>

<p>将上述代码,保存为test.py,以便后续执行。</p>

<p>&nbsp;</p>

<p>在上述代码中,其逻辑如下:</p>

<ol>
        <li>先打开spi设备,使用:
        <p>spi = spidev.SpiDev()</p>

        <p>spi.open(0,0)</p>
        </li>
        <li>
        <p>再将所有的灯熄灭:</p>

        <p>nLED=24</p>

        <p>ledArray = []*nLED</p>

        <p>ws2812.write2812(spi, ledArray)</p>
        </li>
        <li>
        <p>然后循环,依次点亮下灯,并关闭上一课;根据循环的灯珠,来自动设定颜色</p>
        ws2812.write2812(spi, ledArray)的第二个参数,就是一个颜色数组:,取值为0-255</li>
</ol>

<p>编写完成后,使用`python test.py执行`,就能点亮了灯环了。</p>

<p>&nbsp;</p>

<p>最终的实际效果如下:</p>

<p>813299d7ab8f094e6fca5f0c0f2b3f9b<br />
&nbsp;</p>

<p>通过以上的代码,就能够控制这个炫彩灯环了。</p>

<p>如果进一步研究,你还可以考虑,根据简谱中的1234567,来设置点亮的灯珠个数,实现跟着音乐跳动,效果会更棒!</p>

lugl4313820 发表于 2022-8-2 14:57

楼主的作品非常棒,创意非凡,感谢分享!

吾妻思萌 发表于 2022-8-2 19:06

<p>万板第一步皆是点灯
我还是喜欢喇叭唱歌</p>
页: [1]
查看完整版本: 【国产RISC-V Linux板 昉·星光VisionFive试用报告】Python点亮炫彩灯环