|
本帖最后由 lgs2007m 于 2023-2-19 20:38 编辑
首先感谢OpenWrt论坛HZFrodo、981213和其他大佬对红米AX6000 WS2812B(NeoPixels) LED的RGB驱动支持!!
mediatek: add LED support for Xiaomi Redmi Router AX6000 #11271
OpenWrt官方源码添加红米AX6000 LED支持的三个commit:
kernel: add driver package for WS2812B LEDs
mediatek: enable sel_clk for spi-mt65xx
mediatek: add LED support for Xiaomi Redmi AX6000
目前OpenWrt官方、X-Wrt、Lean等开源驱动的源码仓库已经支持该LED的RGB驱动,hanwckf闭源驱动源码仓库也支持了,237大佬的仓库暂时还未支持。
我自己搬运了hanwckf大佬仓库的LED驱动修改到237大佬的源码上,需要的可以试试我的云编译仓库:
https://github.com/lgs2007m/Actions-OpenWrt
最近看到恩山个别帖子标榜“炫彩LED”“幻彩接口”,这个就是添加LED驱动支持,只是在系统菜单下面有个LED配置界面,并不能实现RGB灯效,RGB颜色需要手动更改。
小米惯用配置:两个LED灯,一个状态指示灯status,一个网络指示灯network。
需要修改multi_intensity中RGB三个分量的值[0-255],来改变颜色。
- /sys/class/leds/rgb:network/multi_intensity
- /sys/class/leds/rgb:status/multi_intensity
复制代码
可以通过echo输出重定向来设置颜色,immortalwrt的话需要先输入ash再输入命令:
- # R G B 取值0-255
- echo "255 255 255" > /sys/class/leds/rgb:network/multi_intensity
- echo "255 255 255" > /sys/class/leds/rgb:status/multi_intensity
复制代码 可以将设置颜色的命令添加到本地启动脚本/etc/rc.local,开机即设置好颜色。
不过说到底还是静态改变颜色,我想动态改变颜色,就自己捣鼓了个lua脚本,用uloop定时器改变RGB值,能力只能到这里,效果如下面的gif图。
如果有大佬感兴趣,希望大佬可以开发个app来控制RGB灯效
我的简陋RGB灯效脚本my_led.lua,需要确认已安装libubox-lua软件包,然后ssh登录后直接运行下面代码,会生成文件/etc/config/my_led.lua。
然后使用nohup让脚本一直在后台运行,可以关闭shell了,脚本会一直循环改变两个LED灯的RGB值。也可以将命令添加到开机启动。
当然你也可以设置status和network灯常亮,更明显些。LED配置可以随意改状态,不影响颜色变化。
- nohup /etc/config/my_led.lua > /etc/config/my_led.log 2>&1 &
复制代码 想要关闭进程并设置白色可以输入下面命令:
- kill $(ps | grep 'lua /etc/config/my_led.lua' | grep -v 'grep' | head -n 1 | cut -d 'root' -f 1)
- echo "255 255 255" > /sys/class/leds/rgb:network/multi_intensity
- echo "255 255 255" > /sys/class/leds/rgb:status/multi_intensity
复制代码
SSH登录运行下面命令生成/etc/config/my_led.lua文件
- ash
- cat << "EOF" > /etc/config/my_led.lua
- #!/usr/bin/env lua
- require "uloop"
- --需要安装libubox-lua
- uloop.init()
- local timer
- local timer_set_ms=250 --250毫秒
- local status_R=255
- local status_G=255
- local status_B=255
- local status_flag=0 --flag=0:RGB分量减interval,flag=1:RGB分量加interval
- local status_case="R" --case=R:对R分量进行加减操作,case=G:对G分量进行加减操作,case=B:对B分量进行加减操作
- local status_one=0 --one=1:完成了一次255->0->255加减操作,可以换下一个分量操作了
- local status_interval=25 --rgb:status的RGB分量每次加减量,范围0-255
- local network_R=255
- local network_G=255
- local network_B=255
- local network_flag=0
- local network_case="G"
- local network_one=0
- local network_interval=25
- function change_value( value,flag,one,interval )
- if(flag == 1) then
- value=value+interval
- if(value >= 255) then
- value=255
- flag=0
- one=1
- end
- else
- value=value-interval
- if(value <= 0) then
- value=0
- flag=1
- end
- end
- return value,flag,one
- end
- function change_color()
- --控制rgb:status
- if(status_case == "R") then
- status_R,status_flag,status_one=change_value(status_R,status_flag,status_one,status_interval)
- if(status_one == 1) then
- status_one=0
- status_case="G"
- end
- elseif(status_case == "G") then
- status_G,status_flag,status_one=change_value(status_G,status_flag,status_one,status_interval)
- if(status_one == 1) then
- status_one=0
- status_case="B"
- end
- else
- status_B,status_flag,status_one=change_value(status_B,status_flag,status_one,status_interval)
- if(status_one == 1) then
- status_one=0
- status_case="R"
- end
- end
- --控制rgb:network
- if(network_case == "R") then
- network_R,network_flag,network_one=change_value(network_R,network_flag,network_one,network_interval)
- if(network_one == 1) then
- network_one=0
- network_case="G"
- end
- elseif(network_case == "G") then
- network_G,network_flag,network_one=change_value(network_G,network_flag,network_one,network_interval)
- if(network_one == 1) then
- network_one=0
- network_case="B"
- end
- else
- network_B,network_flag,network_one=change_value(network_B,network_flag,network_one,network_interval)
- if(network_one == 1) then
- network_one=0
- network_case="R"
- end
- end
- os.execute("echo "..status_R.." "..status_G.." "..status_B.." > /sys/class/leds/rgb:status/multi_intensity")
- os.execute("echo "..network_R.." "..network_G.." "..network_B.." > /sys/class/leds/rgb:network/multi_intensity")
- --os.execute("echo rgb:status "..status_R.." "..status_G.." "..status_B.." "..status_case.."")
- --os.execute("echo rgb:network"..network_R.." "..network_G.." "..network_B.." "..network_case.."")
- timer:set(timer_set_ms) --计时器设置时间
- end
- timer = uloop.timer(change_color) --运行change_color
- timer:set(timer_set_ms) --计时器设置时间
- uloop.run()
- EOF
- #给文件执行权限
- chmod +x /etc/config/my_led.lua
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
评分
-
查看全部评分
|