2895|1

324

帖子

5

TA的资源

纯净的硅(中级)

楼主
 

【国产RISC-V Linux板 昉·星光VisionFive试用报告】C语言编程控制WS2812B炫彩灯珠 [复制链接]

 

这次试用的这块RISC-V单板计算机上,为我们提供了40Pin接口,其中就有SPI接口。
今天要分享的,就是在Debian下,使用SPI来驱动ws2812B炫彩灯珠。

 

WS2812B可是个好东西,应用的场合非常之多:

节假日,很多商场、娱乐场所、小区等,都安装了这种炫彩灯带装点节日的气氛。

 

除了条带状的,下面这种点阵的也很常用:

商家可以在这种点阵上,输出图案或者文字来做宣传。

作为玩板子的宅男,在2月14日或者农历7月7日,给心爱的她做一个心形的炫彩灯板,一定能打动她。

 

此外,有不少开发板,也提供了一颗WS2812B灯珠,例如ESP32-C3上,比常见的LED可控性强多了。

 

WS2812B可以用于单颗、点阵、条带等,根据实际需要,可以任意定制。
因为,它是由一颗颗小灯珠给连起来的,可以用柔性材料给保护起来,防水防潮。

用得少的,可以单颗使用,用得多的,也可以上千颗使用,连连连就成。

 

今天的分享,咱们先不玩复杂的,先驱动WS2812B灯板上的第一颗。

 

第一步,我们要参考官方文档,启用SPI以便可以在后面的编程中使用:

成功启用后,登录系统,可以查看该设备的挂载点:


然后设置,需要设置其可被普通用户使用,否则可能遇到权限问题:

单颗WS2812B灯珠需要的电流不是很大,但是,后续可能要控制整个板子,那就需要不小的电流了。

40Pin虽然可以输出5V,但是其电流非常有限。所以,请使用单独的5V供电,不要使用40Pin的接口,避免产生副作用。
在我的实际使用中,我用了一个USB2TTL,把其中的5V用于给WS2812B供电。

 

参考官方中关于40Pin的说明,具体的连线如下:

仔细连好线,别连错了:

准备妥当,现在可以开始使用c语言,对spidev进行编程,从而通过spi控制WS2812B灯珠了。

查看了网上提供的WS2812B资料,可以了解到,要控制WS2812B的灯珠,需要让灯珠控制器收到24bits的数据,每8Bits为一组,分别用于控制GRB三种颜色。
但是控制设备发送数据的时候,确需要24bytes的数据,具体如下:


在上面的数据中,每24bytes数据,我分成了3行。

每一行,WS2812B自身的控制器收到后,会将每byte解析为0或者1,以上0x80解析为0,0xf8解析为1。
如果第一行,全部为0xf8,则最终为11111111,表示G的亮度为0xff,也就是255。
如果第一行,全部为0x80,则最终为00000000,表示G的亮度为0x00,也就是0,熄灭。
以上的0x80和0xf8为经验数值,大家可以查看网上的资料了解。

 

除了发送的数据,SPI还需要设置发送的速度,经验值为6.4MHz,也就是6400000。


通过学习Linux下spidev的编程,最终的代码如下:

上面的代码,看起来不少,重点不多:

  1. 把挂载点/dev/spi0.0打开,当作文件打开即可
  2. 设置各项参数,特别是速率
  3. 发送需要的数据

循环部分,就是交替发送并解码为[0,0,0]和[1,0,0]来控制第一颗灯珠GRB,从而形成亮灭效果了。


在上面定义的发送数据中:

前面说了,可以通过设置0x80和0xf8,来控制G的亮度。
同样的,还可以设置第二行、第三行,来控制GRB三中颜色的力度,从而达到炫彩的目的。
具体的颜色数目:255 * 255 * 255 = 16581375,160多万,真得很炫彩。

以上展示的,是控制第一颗灯珠,需要24bytes的数据;而发送2组24bytes数据,就可以控制两颗;以此类推,要控制更多的,就发送24倍数组bytes了。
下面的视频,就是控制了64颗,形成了简单流水灯的效果:

演示视频

 

最新回复

写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.   详情 回复 发表于 2022-6-19 16:13
点赞 关注
 
 

回复
举报

3

帖子

0

TA的资源

一粒金砂(中级)

沙发
 

写得很详细,很不错.写得很详细,很不错.写得很详细,很不错.

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表