前段时间玩树莓派的时候突然发现个好玩的东西,WS2812,一个数字控制的全彩LED。
之前玩LED的时候都是四个引脚,RGB三个通道都得占一个引脚,如果做矩阵的话恶心死人,要加各种的锁存,所以一直没有用过多色LED矩阵。
偶然的机会,看到了网上一朋友用数字控制的全彩LED,只占用一个引脚就能控制三个颜色,更重要的是,如果做矩阵,也是一个引脚搞定!牛的一逼啊!
先给大家看看资料
很多种型号,我用的是比较小的那种,2020的封装,其他的引脚是一样的
VSS:供电引脚
VDD:信号电源接地引脚
DIN:控制数字输入引脚
DOUT:控制信号输出引脚
电源电压:+3.5~+5.5V
逻辑输入电压:-0.5~+0.5V
输入电流:1μA
LED特性
用的时候直接把她们串联起来,DOUT连接DIN,没试过上限多少,我的320个串联毫无压力,秒刷!网上有1024个串联的,刷新毫无压力。
操作的时候基本就是DIN引脚给输入数字信号:
T0H |
0码高电平时间 |
0.35us |
±150ns |
T0L |
0码低电平时间 |
0.9us |
±150ns |
T1H |
1码高电平时间 |
0.9us |
±150ns |
T1L |
1码低电平时间 |
0.35us |
±150ns |
RET |
帧单位,低电平时间 |
>50us |
有的等资料说>300us |
先给个复位信号,然后依次是每个灯的GRB数据,每个灯3个字节(24位,高位在前)
比如你又16个彩灯相连接,发数据的时候先发送一个复位信号,然后连续发送3×16字节的数据即可,中间不要发送其他内容,每位之间发送数据时间没有严格规定,但最好是一次性发完,发的时候把中断关了,否则有可能会出问题。
以上是硬件资料。
我用的是2020的封装,非常小2mm×2mm的,做出来20cm×8cm的板子上集成了320个LED,每个LED配一个电容,小两千个焊点。
每5平方毫米就6个焊点,手工焊是不可能了,所以聪明的我在开板子的时候就顺便开了张钢网,板子+钢网,一共127包邮。
回来后刷焊锡,然后就是痛苦的过程,要一个个把元件摆上去,摆放部分耗时3:30,中午饭都没顾上吃。
第一次搞的时候,摆了2行才发现,LED全都放翻了,于是乎,重新刷焊锡膏返工……
第二次搞了四行了,照顾孩子吃饭,结果一不小心蹭了一大块,已经没有挽救的必要了,重新刷焊锡膏……
第三次把自己关在小屋里,老老实实干了两个多小时,终于搞定……
为此买的焊锡台,220°上焊台,开始的时候做试验,卖家告诉我得430°才行,于是乎——就特么糊了!
焊完之后上机测试,发现第二行有个坏的……
返工,好在只有那一个LED是有问题的,更换之后全部点亮
测试程序用的是Arduino,有现成的库可用,FastLED,我博客中有这个库的解读,有兴趣的可以看看。
https://blog.csdn.net/suolong123/article/details/103768985
但是用Arduino显然无法带的动这么大块板子,UNO的内存不够用,需要换更牛叉的,于是乎,我看中了STM32,STM32F103ZET6,搭载RT-thread系统,跑的屌屌的。
上面的一块亚克力板是从广告店要的废品,本来是想买一小块的,但是人家是按平米卖的,整块板子2米×2米的,好几百,吓人啊……
某宝上买了几个小块的用,但是效果不好,需要的规格是:茶色/黑色透明板,单面磨砂,厚度2mm,差一点都不行,效果low的不能要。某宝只有透明不带磨砂的,要不就是不透明的,放上后看不出方格的效果,透过去直接看到灯,很难看。
亚力克板下面加个个光栅,否则看上去就是一片光,不是矩形块,颜色也比较模糊。
成品支持时钟、闹钟、收音机(RDA5807M模块)、天气、HTTP控制、蓝牙控制,板子提供了一个接口,可以通过蓝牙或者HTTP方式改变灯板显示内容,连接WIFI后可以自己拉取天气信息,和文章阅读量一类的数据。本来想加上蓝牙音箱的,但是能力有限,没玩过这个,就没加。也本来想通过蓝牙手柄控制灯板玩小游戏呢,但是后来没兴趣了,就没做。
费用部分:
光栅:在某宝找的未来工厂3D打印,30块钱,但得再加35的邮费。
PCB+钢网:127包邮到家,一共5块测试版。
LED:2020封装,320个(建议多买些冗余),某报价0.23元/个,共计76.3元。
电容:0603 104 100NF,400个7.8元
主板:STM32F103ZET6(F103其他型号的也行,当时抽风按照最大号的开的板),七七八八算下来56块左右。
基本就这些吧。
PCB板和光栅的3D文件可以免费共享给大家,有需要的留下邮箱。
代码有两个版本,一个是在RT-thread上写的,一版是Micropython写的,实现了LED库,支持基本绘图和英文显示。代码还在整理中,过段时间把源码GitHub分享给大家。