17. RGB LED
发布时间:2026-11-05 | 浏览:1
RGB LED 是一种常见的多彩发光二极管(LED),通过组合红色(Red)、绿色(Green)和蓝色(Blue)三种 基本颜色的不同亮度,可以显示几乎所有的颜色。
如下图是野火三色RGB灯模块,其它内容可以参考其规格手册:
鲁班猫扩展板板载1个RGB LED接口:
以鲁班猫1为例,扩展板的GPIO23、GPIO24对应鲁班猫1的GPIO_C2、GPIO_C3:
17.1. GPIO翻转驱动 ¶
因为灯珠的时序为纳秒级,对于使用IO翻转的方式来说,在应用层不能满足时序的要求,因此须在驱动层通过写寄存器的方式来翻转IO电平。 RK356x和RK3588系列所使用的WS2812驱动源码均为同一个:lubancat_rk_code_storage/expansion_board/ws2812/gpio/driver/ws2812_drv.c
可参考《嵌入式Linux驱动开发实战指南—基于LubanCat RK系列板卡》文档,自行编译驱动文件, 编译前,需在驱动源码ws2812_drv.c中根据目标芯片打开对应宏体:
编译源码使用的Makefile在:lubancat_rk_code_storage/expansion_board/ws2812/gpio/driver/Makefile, 编译前,需要根据实际情况修改内核路径和交叉编译工具链:
将编译好的.ko文件拷贝到板卡,输入如下命令安装驱动:
17.1.1. c代码测试 ¶
C测试代码为:lubancat_rk_code_storage/expansion_board/ws2812/gpio/ws2812_app.c
本例以鲁班猫1为例,测试前需要将ws2812_app.c的data引脚修改为实际的引脚:
将ws2812_app.c传到板卡,执行如下命令编译和运行程序:
例如执行上面命令的效果为设置第一个RGB灯颜色为红色:
设置第二个RGB灯颜色为绿色:
利用GPIO翻转来驱动WS2812,精度会受CPU频率、任务调度、中断干扰等因素的影响,容易出现控制不稳定的情况。 因此使用SPI的方式驱动会更稳定,且易于扩展到多平台。
17.2.1. c代码测试 ¶
C测试代码为:lubancat_rk_code_storage/expansion_board/ws2812/spi/main.c
以鲁班猫1为例,执行如下命令修改/boot/uEnv/uEnv.txt,开启SPI插件:
开启插件后,重启开发板生效。测试前需要根据实际情况修改main.c中的SPI接口:
将main.c所在的整个文件夹传到板卡,执行以下命令编译和运行程序: