Funpack3-5
——板卡一 任务二:基于BBB的远程灯控
一、项目介绍
本项目依托于Funpack3-5活动,使用BeagleBoneBlack开发板作为平台,基于Linux系统,利用node-red开源库,实现了一套远程灯控系统。该系统可以通过网络远程访问网页,控制BBB板载的LED的开关、闪烁及闪烁强度。
项目内容:
1、开发一网页并部署在BBB板卡上。
2、开发一套控制BBB板载LED开关及闪烁强度的程序。
3、实现跨越局域网控制
应用场景
本项目为一远程灯控系统的简易demo,可以同时控制多个灯光的开关、闪烁及闪烁强度。其既可以在百米及以下范围内,使用电缆通信运行;也可以拓展至千米级别,利用光纤通信运行。同时,基于openp2p,利用通信基础设施,也可以脱离局域网,在更大范围上实现远程控制,亦或作为备份,提高系统的运行可靠性。基于此,本项目有望在小到教学楼的阶梯教室内的整体灯控,大到城市级别的照明控制等提供参考。
二、总体架构
图2.1
系统总体架构如图2.1,系统工作在两级网络架构下。客户可以通过局域网访问BBB的网页;也可以借助openP2P,实现跨越局域网的访问。基于USB虚拟网络的网页访问,作为调试手段,在此并未标出。客户端系统不限,但本项目仅测试安卓和Windows11 X86-64的部分环境。
三、BBB软件
在刚上手BBB的时候,意外发现BBB新版系统有一名为node-red的网页无法打开,调研发现这是一个面向图形化的网页开发及嵌入式系统控制的开源程序,具有开发简单,一次开发,到处使用等优点,因此尝试将其作为本项目的基础。
3.1 环境安装
前文提到,在最新版系统镜像里,node-red是无法打开的,需要手动配置环境。node-red官网上有相关教程,但是过长时间未更新,需要参照教程更改一些参数才能使用。这部分我在知乎有完整的文章,可以参考,此处仅放部分重要步骤。https://zhuanlan.zhihu.com/p/739354656
1、更新BBB的系统。
sudo apt update && sudo apt full-upgrade
2、安装curl
sudo apt-get install curl
3、利用curl安装node和npm
curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y build-essential nodejs
4、检查node和npm是否安装成功
node -v
npm -v
5、安装node-red及其与BBB相关的软件包
sudo npm i -g --unsafe-perm node-red
sudo npm install -g --unsafe-perm beaglebone-io johnny-five node-red-contrib-gpio
6、开启node-red
sudo node-red-pi
3.2 BBB软件架构
图3.2
BBB的软件架构如图3.2,使用3个控件分别控制灯的亮灭、灯的闪烁、闪烁强度。控制控件状态改变时,传递数值至函数模块。函数模块根据接受的数值控制LED行为。
3.3 BBB软件实现
node-red整体思想类似FPGA程序设计,整体是一个巨大的循环,函数模块中没有循环函数。需要‘set’后,在下一轮前重新‘get’。利用接收数值的topic字段判断数值来源,进而执行相关操作。
闪烁部分利用开关控制脉冲产生,脉冲经由计数器,根据闪烁强度控件数值判断LED的亮灭。status控制LED的开关,如果关闭该开关控件,则LED不会亮起。
var lightness=flow.get("lightness");
var cnt=flow.get("cnt");
var state=flow.get("state");
if(!cnt)
{
cnt=0;
state=0;
ligntnes=0;
}
switch (msg.topic)
{
case "status":
state=msg.payload;
break;
case "light":
lightness=msg.payload;
break;
}
if((cnt>=(10-lightness))&&state)
{
msg.payload=true;
}
else
{
msg.payload=false;
}
cnt=cnt+1;
if(cnt>12)
{
cnt=1;
}
flow.set("cnt",cnt);
flow.set("lightness",lightness);
flow.set("state",state);
return msg;
四、最终效果
具体效果请参考视频,此处放出上位机截图。
五、展望
由于linux系统本身并非实时操作系统,BBB所使用的TI的芯片性能也并不强大。所以,本项目的LED会有间歇性的非正常闪烁,导致设计时的呼吸灯效果无法实现,仅能简单闪烁。如果能调用板载的pru,本项目的效果会更上一层楼。