基于无线自组网的灯光照明控制系统设计

2020-06-29 12:13
计算机测量与控制 2020年6期
关键词:固件串口路由

(广东工业大学 机电工程学院,广州 510006)

0 引言

目前,有线通信网络已十分成熟,但对于网络物理线路依赖程度高且其在偏远未覆盖或设施损坏的区域却不能使用,故无线网络通讯迅速崛起,当下的移动通讯大多需基站支持,而无线自组网技术能够在没有固定基站的地方进行通信[1]。

本设计利用自组网以及无线物联网技术,实现灯光照明系统的无线控制和远程网络控制;该系统具有成本低、时延短、功耗低和网络容量大等优点[2],为智能照明开拓了一个新的发展方向。

1 无线自组网灯光照明控制系统的组成

无线自组网灯光控制系统原理如图1所示,它包括一台上位机、ZigBee无线自组网络和灯光系统。其中,上位机连接ZigBee协调器,无线自组网模块上传的数据经ZigBee协调器接收,并与上位机进行通信;上位机控制命令也经ZigBee协调器下发给无线自组网终端模块[3]。ZigBee模块包括主机模块和从机模块,由一个网络协调器和若干个从机终端组成星型网络,网络协调器与PC机相连,其既要负责自动搜寻网络中的终端节点,又要从终端节点获得PC机所需的数据,实现终端节点与上位机之间的通信[4]。

图1 自组网灯光控制系统示意图

继电器控制灯光电路如图2所示,当自组网终端的输出信号为高电平时,三极管导通,继电器通电,其常闭触点1闭合从而连接了灯具电源,灯具通电;若自组网终端的输出信号为低电平,三极管不导通,继电器断电,灯具也断电[5]。在本控制系统中,每个自组网终端控制一盏灯,终端加入网络时由协调器为每盏灯自由分配一个ID,各个节点将收集到的数据通过无线发送到协调器,协调器将数据上传给上位机。同样,上位机的控制命令也通过协调器发送给各个自组网终端,从而控制灯光照明系统每一盏灯具的通断电[6]。

图2 继电器控制灯光电路图

2 无线自组网技术

无线自组网是自制的无线多跳网络,在没有基础网络设施时仍可提供通信环境,自组网中的所有节点都能与其它节点保持动态联系,节点能自由移动,网络中没有固定的路由器,每个节点都具备路由功能,能够路由发现并维护其它节点的路由信息;在无线覆盖范围局限的环境中,某些节点不能直接通信,而通过其它节点的转发进行数据通信[7-8]。本设计选用了型号为DL-LN33的无线自组网模块,具体参数如表1所示。

表1 DL-LN33无线自组网模块参数

DL-LN33无线自组网模块上电后会自动组网,模块工作时,同附近的模块自动组成无线多跳网络,即对等网络,原理上不需要中心节点,通过UART,微控制器MCU或者电脑即可告诉模块目标地址和待发送数据,模块选择最优的路径,将信息传输给目标模块[9]。本设计选定一个模块与路由器串口进行有线连接后,作为中心节点给其他网络范围内的模块进行数据传输。

3 路由器设计

3.1 硬件设置

使用路由型号为普联TP-LINK-WR842N第四代版本,此架构为多板分布式加冗余备份,能增强转发能力,提高路由稳定性,转发芯片支持对报文两三层线速转发,且多片交换芯片间可连接,形成交换矩阵网络,其原理如图3所示。微处理器选用高通的QCA9533芯片,路由自带UART串口输出,原厂闪存ROM容量为4 M,原厂内存RAM容量为16 M。

图3 路由器原理图

3.2 软件设计

3.2.1 固件编译与刷写

切换到Ubuntu终端窗口,进入命令行,输入sudo-sH,输入装系统时设置的用户密码,切换到root,切换到root是为了安装或升级部分必要的组件。切到root后,给系统安装编译固件需要使用到的依赖包,使用一条命令:

apt-get install g++ libncurses5-dev zlib1g-dev bison flex unzip autoconf gawk make gettext gcc binutils patch bzip2 libz-dev asciidoc subversion

命令中install后面的为各依赖包名称,依赖包安装好后,接下来下载固件源码进行编译,直接使用固件的Imagebuilder进行固件的快速生成,下载好Imagebuilder文件程序后,在Imagebuilder文件夹界面运行终端,直接执行make image命令即可在Imagebuilder的根目录的bin/ar71xx目录下找到所生成的固件,固件的格式是以.bin的后缀结尾如图4所示。

图4 固件的格式示意图

使用网线连接路由lan口和电脑,浏览器打开网址192.168.1.1,进入breed web恢复控制台,在页面中固件一栏选择本文已编译出的固件上传更新,利用uboot,以网页web的形式进行固件的刷写,待路由刷写完成并自动启动完成后,可以通过网页网址192.168.1.1对路由器进行访问,也可以使用Putty以SSH的形式登录到路由的微型Linux系统下进行固件刷写[10]。

3.2.2 Linux串口调试

串口调试需要用软件包minicom,因此本设计在Putty界面输入命令:sudo apt-get install minicom,输入路由默认密码admin自动下载安装,该流程需要路由器在联网状态下,本文把该路由器作为二级路由以wan口用网线连接到上一级路由的lan口,二者的网关是不一样的。使用一个USB转TTL的模块TX、RX针分别与路由串口的RX、TX针用杜邦线连接,USB连接电脑,电脑打开SecurCRT软件,打开外部串口,设置波特率为115 200[11],打开串口,回到Putty的SSH登录页面,终端输入命令:

minicom—D /dev/ttyS0—b 115200

回车进入minicom控制台,在控制台输入字符,如输入字符“Hello”,对应的字符即可在电脑端的SecurCRT界面上显示,说明串口调试成功。

3.3 无线自组网模块控制命令

3.3.1 无线自组网模块的PC端配置与调试

DL-LN33系列无线自组网模块以十六进制的格式用串口调试助手发送调试数据包,其配置与调试规则如表2、表3所示。

表2 读取模块信息数据包格式

表3 修改模块信息数据包格式

模块可以通过Pin4、Pin5号引脚做高低电平的输出,具体的控制方式是:

0x11命令控制端口输出高电平

0x10命令控制端口输出低电平

对于既定已知IP地址的模块,例如地址为0x01的模块,使用十六进制格式发送命令“FE 05 90 44 01 00 11 FF”即可对0x01模块的Pin4引脚作高电平输出。对于每一个无线自组网模块,可以获得两个引脚的控制输出。在模块与所控制的设备在使用不同电源的情况下,需要让模块与所控设备作一个共地处理,否则可能会出现输出电平无法控制的后果。Pin4、Pin5号引脚对应TestTx和TestRx引脚,如图5所示。

图5 模块引脚图

3.3.2 无线自组网模块的Openwrt路由端调试

路由器Linux端的调试是使用Putty登录到路由器的后台终端页面。路由器上使用的串口号为“ttyS0”,按Linux的命令规则,向串口发送数据的命令为:

echo ‘xxx’ > yyy

其中xxx为需要发送的数据,yyy为接收数据的设备号。控制命令为:

echo -en 'xFEx05x90x45x06x00x10xFF' > /dev/ttyS0

其中-en 选项为执行命令后不返回信息、不换行,若使数据以十六进制形式发送,只需在每一位数据前加上“x”即可进行转换。

4 基于Openwrt路由的灯光控制Web页面的设计

4.1 Web页面布局

在Openwrt中使用Lua语言实现Html语言的Web页面布局,根据MVC架构规则,在控制页面中出现传入参数,因此建立一个配置文件来存放所传入的参数,而这个配置文件的目录位置位于根目录下的etc下的config文件夹中[12],本设计的灯光控制程序名为:lightcontrol。需要建立4个基础文件及其目录分别为:

1)/etc/config/lightcontrol,配置文件内容。

格式为首行固定config lightcontrol,option后跟传入的参数变量名,引号内是对应变量的值的内容。

2)/usr/lib/lua/luci/controller/lightcontrol.lua,Controller控制器程序定义的配置文件的地址,以及在调用了model下的cbi内的“lightcontrol.lua”模块,并将入口命名为“无线自组网灯光控制”,“1”为顺序优先级。

3)/usr/lib/lua/luci/model/cbi/lightcontrol.lua。

4)/usr/lib/lua/luci/view/admin_system分别建立了lightcontrol1.htm、lightcontrol2.htm、lightcontrol3.htm、lightcontrol4.htm四个html的模块供调用使用。View下的html文件要求采用常规html网页编程语言进行编写,html文件不需使用类似的开头文件类型的标签,只需在<%+cbi/valueheader%><%+cbi/valuefooter%> 之间编写常规html代码即可。

对ImageBuilder目录文件进行重新编译得到新的固件,并刷新路由当前系统,通过web登录到路由器192.168.1.1后台得到所设计的基于Openwrt路由的灯光控制web页面。

4.2 Shell控制脚本语言

在脚本的首行使用命令声明该脚本需要用到的解析器以及解析器的位置,如:“#!/bin/bash”即说明该脚本需要用到根目录下的bin目录下的bash解析器。在声明之后换行编写需要执行的命令。

4.3 编写控制脚本

在ImageBuilder的根目录的bin文件夹内新建文件夹存放各个页面中所需要调用的脚本文件。

1)在单个灯光控制页面中,按钮按下就调用/bin/classroom中的test1脚本,首先,使用uci命令读取配置文件lightcontrol里面变量名分别为color1和status1的值,把值分别存放在value1和value2的新的局部变量中,确保自组网模块四为控制单个灯光的状态。然后使用if语句对value1和value2的值进行判断,如果value1值为‘red’,value2值为‘低电平’,则在此使用uci命令将配置文件lightcontrol面变量名分别为color1和status1的值更改为‘green’和‘高电平’,同时向串口发送模块命令,0x04无线自组网模块的Pin4输出高电平,实现同一个按钮可以同时实现开和关的功能。对于color1的red和green的值,在html模块中对color1的值进行可读取,并把读取到的值作为html编程中font标签中的颜色参数,以此来实现对反馈状态的字体颜色的变化。如图6所示。

图6 单个灯光控制Web页面

2)在情景模式控制页面中,用到的修改配置文件的方式是model页面参数改变并触发保存应用,对页面的参数进行选择,如情景模式,点击“保存设置”按钮,即可修改配置文件中对应变量的值,点击“应用设置”来调用/bin/meetingroom 中预先编写好的可执行脚本。

脚本通过读取配置文件信息,使用if语句进行状态判断,从而按需求实现灯光控制。

3)在定时循环开关控制页面中,实现的是对指定灯光的定时开关。定时循环开关,在预先设定好的时间段内,实现使特定的灯光重复开关的功能,时间段以秒起步,小时封顶。代码中主要通过判断预设参数来重新调用预设的循环脚本,其中使用的是while循环。

sleep关键字作为延时功能,将读取到的预设的时间作为sleep的参数,实现在一个循环中延时,如图7所示。

图7 情景模式控制Web页面

定时循环开关控制页面的定时开/关,区别与定时循环开关功能,该选项的时间设定是绝对时间,表示在指定时间点进行动作,其中可传入的参数有周、月、日、时、分、秒。Openwrt的计划任务可以按照指定的时间去执行指定的命令。计划任务的配置文件位置位于/etc/crontabs/root下,本设计在Shell脚本中把预设的时间参数整合成一条计划任务命令,将该命令写入到/etc/crontabs/root中,把编写好的定时开关的脚本命令为warm_on,放置到目录/bin/shine_time/下,如图8所示。

图8 定时循环开关Web页面

4.4 编写控件的触发功能

在model页面模块中的按钮控件的function函数中设置在点击按钮时需要执行的命令,该执行命令为执行预先编写好的特定目录下的Shell控制脚本文件。

设计至此,已实现通过路由Web页面对无线自组网模块的控制,从而实现对灯光系统的无线遥控。

5 基于frp内网穿透技术的远程控制

无线遥控仅限于路由器局域网内的控制,如果离开的局域网,便无法实现对灯光的控制。为了解决这个问题,使用开源的内网穿透软件,脱离局域网也能实现远程控制的功能。

5.1 申请临时阿里云ECS作为远程控制中转站

服务器中转访问是本地设备经由公网上的服务器转发实现对远程设备路由器控制页面的访问。本文采用 “云服务器”+openwrt路由器+frp(内网穿透软件)实现这个功能。

5.2 Linux下配置服务端frp server(frps)

在根目录下新建一个名为frps的文件夹,把下载好的frp软件中的frps和frps.ini文件拖拽到文件夹中,双击frps.ini,修改配置,将bind_port通信端口号设置为7000,并且把使用http访问页面的vhost_http_port端口号随意设置为7007。

使用Putty远程登录服务器管理终端页面,使用cd命令进入frps文件夹,先使用chmod命令给两个文件赋予权限,即:

chmod 777 frps

chmod 777 frps.ini

再使用nohup命令执行frps服务端程序,并保持在后台运行,即:

nohup ./frps -c ./frps.ini

运行结果如图9所示。

图9 运行结果图

至此,在远程Linux下配置frp的服务端完成。

5.3 本地Linux下配置客户端frp client(frpc)并执行连接

使用Winscp登录到192.168.1.1本地路由系统文件目录,在根目录下新建frpc文件夹,把frp软件中的frpc和frpc.ini拖拽到文件夹中,双击打开frpc.ini,将服务地址更改为我们的云服务器公网地址,服务端口同步为7 000,添加一个web命令块,type类型为http,本地端口local_port设置为80,custom_domian为域名。

配置保存后,运行Putty登录本地路由系统终端页面,使用cd命令进入frpc文件夹,给文件赋予可执行权限后,执行命令:

./frpc -c ./frpc.ini

即可连接到云服务器,在网址中使用公网地址加http端口号,即实现远程登录路由页面并实现远程灯光控制。

5.4 配置frp开机启动及手动连接功能

使用内网穿透远程连接服务器,可实现外网远程控制,为解决调试中需手动输入执行连接命令的麻烦,本设计编写了Shell执行脚本用于路由器开机后便自动执行连接服务器的操作,步骤为:在系统开机后,使用ping命令检测路由器本身是否已经连接互联网,如未连接互联网,则不执行操作;如已连接互联网,则首先执行连接服务器的命令,等待三秒后对地址47.103.1.231:7007进行检测是否连通,如已连通,则停止操作。如未连通,继续返回执行连接命令。对于连接服务器与否,也在web控制页面中给出状态反馈。

为了避免系统误判将未连接当成已连接,而导致无法远程访问的现象,本设计特意在控制页面中上方添加专门为手动连接服务器的按钮,其原理是在灯控操作按钮的基础上,修改其所执行的命令。

6 实验结果与分析

设计制作软硬件实物之后,对该灯光控制系统进行了调试检验,包括单个灯光的网页开关控制、灯光组的情景模式开关控制和定时模式下时长、指定时间、指定灯光类型的开关调节,以及远程页面访问控制等。测试结果表明,所设计的系统能够实现灯光组的控制和调节需求,整个系统运行稳定,实时性好,操作方便,满足设计要求。该灯光系统的远程控制台界面如图10所示。

图10 远程页面访问控制

7 结束语

本设计使用Openwrt路由器串口输出控制无线自组网模块,通过模块控制继电器来控制灯光系统。在路由器控制方面,设计Web控制页面以及使用Shell脚本语言作为控制程序,并且Web和Shell两者相联系形成一个完整的控制系统。在远程控制方面,采用开源的FRP内网穿透软件,分别在远程服务器和本地服务器配置好FRP软件,从而将本地控制页面映射到远程服务器上,实现远程的页面访问控制。该系统具有智能化、功耗低、成本低、时延短等优点,在灯光照明系统中具有较大应用价值。

猜你喜欢
固件串口路由
尼康旗舰Z9升级新固件延长高速连拍时间
基于国产化IT 基础设施的通用固件安全模型研究
数据通信中路由策略的匹配模式
基于EM9000工控板高性能双串口通信模型设计与实现
一种用于6LoWPAN的多路径路由协议
OSPF外部路由引起的环路问题
MCS—51单片机中的多串口通讯技术的应用
英特尔发布免费固件引擎
提取ROM固件中的APP
微机串口的测试诊断