RGB LED HAT
| |||||||||||||||
| |||||||||||||||
器件介绍
WS2812B是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口、数据锁存信号、整形放大驱动电路,还包含有高精度的内部振荡器和12V高压可编程定电流控制部分,有效保证了像素点光的颜色高度一致。
数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术(见:数据传输协议),使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。
数据传输协议
数据传输时间( TH+TL=1.25µs±600ns)
T0H | 0码, 高电平时间 | 0.4µs | ±150ns |
T1H | 1码, 高电平时间 | 0.8µs | ±150ns |
T0L | 0码, 低电平时间 | 0.85µs | ±150ns |
T1L | 1码, 低电平时间 | 0.45µs | ±150ns |
数据传输方法
注: 其中 D1 为 MCU 端发送的数据, D2、 D3、 D4 为级联电路自动整形转发的数
颜色格式
颜色的格式分为很多种,常用的有RGB888、RGB565等等;
RGB888表示:R:红色(Red),G:绿色(Green),B:蓝色(Blue)。表示占8位数据。因此传输一个完整的颜色数据,需要24位。
对于WS2812B而言,他使用的就是就是这种格式,只不过他发送的颜色数据是G-R-B,所以我们的再发送的时候,需要把我们的RGB转化成GRB:
G7 | G6 | G5 | G4 | G3 | G2 | G1 | G0 |
R7 | R6 | R5 | R4 | R3 | R2 | R1 | R0 |
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
注: 高位先发, 按照 GRB 的顺序发送数据
树莓派使用
基础使用
树莓派打开终端,安装如下库:
sudo apt-get install python3-pip -y sudo pip3 install rpi_ws281x
下载示例程序,解压到指定目录,并运行示例程序:
wget https://www.waveshare.net/w/upload/b/b2/RGB_LED_HAT.zip unzip RGB_LED_HAT.zip sudo chmod 777 -R RGB_LED_HAT cd RGB_LED_HAT sudo python3 ws2812.py
运行这个示例程序,RGB LED会有颜色渐变的效果
如果使用的是RGB LED HAT (B),需要修改ws2812.py,不然灯的数量不全,如下:
如果显示颜色不对,请尝试在/boot/config.txt 文件中添加如下两个语句,重启生效。
由于RGB LED采用DMA控制,占用树莓派上的音频输出DMA通道,因此添加这两个语句会导致耳机接口不能使用。
hdmi_force_hotplug=1 hdmi_force_edid_audio=1
手机网页控制
确保能够基础使用的前提下,再执行如下命令
sudo apt-get install python3-bottle cd RGB_LED_HAT/web/ sudo python3 main.py
如果使用的是RGB LED HAT (B),需要修改main.py,把LED_COUNT修改成64
如上图,在手机浏览器地址栏内输入树莓派 ip 地址,端口号 8000。通过点击调色盘不同的位置,RGB LED会显示不同的颜色。“static”、“breath”、“flash”分别对应三种显示模式。
问题
1:如果出现错误 RuntimeError: "ws2811_init failed with code -3 (Hardware revision is not supported)"
<div class="tabbertab" title="资料" id="myresources"
答:卸载rpi_ws281x,手动下载源码,并编译安装
sudo pip uninstall rpi_ws281x git clone --recurse-submodules https://github.com/rpi-ws281x/rpi-ws281x-python cd rpi-ws281x-python/library/, sudo python setup.py install 如果是python3,将pip改为pip3,python改成python3即可 如果出现更新之后还是出现此错误,可以参考点这里
资料
文档
程序
数据手册
相关链接
FAQ