在Orange Pi和Raspberry Pi上使用Python spidev控制WS2812

由于Linux非实时性系统的特性,对于时序要求比较苛刻的WS2812来说,无法通过自行控制gpio的高低电平来模拟微秒级的逻辑信号。为了模拟出WS2812所需要的波形,在这里使用SPI形式来控制WS2812。WS2812的文档,很多blog已经做了描述,此处不再重复,只讲如何实现。本文所使用的为Orange Pi Zero ,系统使用的是Armbian 4.19.38-sunxi

目前在Pypi上,对于树莓派通过spi控制WS2812的类库还是有的,但是却没有香橙派,所以此处我们自行实现。

通过阅读WS2812可以得知,他的数据传输速度为800kbps,逻辑1和逻辑0的时序见下图。

 为了用spi模拟出对应的波形,我们输入一个bit分成4份,根据时序波形,并利用误差,可以将一个逻辑0的高低电平时间比例为2:2,逻辑1的高低电平时间为1:3。所以我们使用的spi频率为800Khz*4=3.2Mhz。

如果我们想给灯传输一个二进制的“1”,意味着我们需要在spi中传输二进制的“1100”,即16进制的C;灯的“0”意味着spi的“1000”,即16进制的8,这样就可以满足ws2812对1码的波形要求。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值