(廣東工業(yè)大學(xué) 機(jī)電工程學(xué)院,廣州 510006)
目前,有線通信網(wǎng)絡(luò)已十分成熟,但對(duì)于網(wǎng)絡(luò)物理線路依賴程度高且其在偏遠(yuǎn)未覆蓋或設(shè)施損壞的區(qū)域卻不能使用,故無線網(wǎng)絡(luò)通訊迅速崛起,當(dāng)下的移動(dòng)通訊大多需基站支持,而無線自組網(wǎng)技術(shù)能夠在沒有固定基站的地方進(jìn)行通信[1]。
本設(shè)計(jì)利用自組網(wǎng)以及無線物聯(lián)網(wǎng)技術(shù),實(shí)現(xiàn)燈光照明系統(tǒng)的無線控制和遠(yuǎn)程網(wǎng)絡(luò)控制;該系統(tǒng)具有成本低、時(shí)延短、功耗低和網(wǎng)絡(luò)容量大等優(yōu)點(diǎn)[2],為智能照明開拓了一個(gè)新的發(fā)展方向。
無線自組網(wǎng)燈光控制系統(tǒng)原理如圖1所示,它包括一臺(tái)上位機(jī)、ZigBee無線自組網(wǎng)絡(luò)和燈光系統(tǒng)。其中,上位機(jī)連接ZigBee協(xié)調(diào)器,無線自組網(wǎng)模塊上傳的數(shù)據(jù)經(jīng)ZigBee協(xié)調(diào)器接收,并與上位機(jī)進(jìn)行通信;上位機(jī)控制命令也經(jīng)ZigBee協(xié)調(diào)器下發(fā)給無線自組網(wǎng)終端模塊[3]。ZigBee模塊包括主機(jī)模塊和從機(jī)模塊,由一個(gè)網(wǎng)絡(luò)協(xié)調(diào)器和若干個(gè)從機(jī)終端組成星型網(wǎng)絡(luò),網(wǎng)絡(luò)協(xié)調(diào)器與PC機(jī)相連,其既要負(fù)責(zé)自動(dòng)搜尋網(wǎng)絡(luò)中的終端節(jié)點(diǎn),又要從終端節(jié)點(diǎn)獲得PC機(jī)所需的數(shù)據(jù),實(shí)現(xiàn)終端節(jié)點(diǎn)與上位機(jī)之間的通信[4]。
圖1 自組網(wǎng)燈光控制系統(tǒng)示意圖
繼電器控制燈光電路如圖2所示,當(dāng)自組網(wǎng)終端的輸出信號(hào)為高電平時(shí),三極管導(dǎo)通,繼電器通電,其常閉觸點(diǎn)1閉合從而連接了燈具電源,燈具通電;若自組網(wǎng)終端的輸出信號(hào)為低電平,三極管不導(dǎo)通,繼電器斷電,燈具也斷電[5]。在本控制系統(tǒng)中,每個(gè)自組網(wǎng)終端控制一盞燈,終端加入網(wǎng)絡(luò)時(shí)由協(xié)調(diào)器為每盞燈自由分配一個(gè)ID,各個(gè)節(jié)點(diǎn)將收集到的數(shù)據(jù)通過無線發(fā)送到協(xié)調(diào)器,協(xié)調(diào)器將數(shù)據(jù)上傳給上位機(jī)。同樣,上位機(jī)的控制命令也通過協(xié)調(diào)器發(fā)送給各個(gè)自組網(wǎng)終端,從而控制燈光照明系統(tǒng)每一盞燈具的通斷電[6]。
圖2 繼電器控制燈光電路圖
無線自組網(wǎng)是自制的無線多跳網(wǎng)絡(luò),在沒有基礎(chǔ)網(wǎng)絡(luò)設(shè)施時(shí)仍可提供通信環(huán)境,自組網(wǎng)中的所有節(jié)點(diǎn)都能與其它節(jié)點(diǎn)保持動(dòng)態(tài)聯(lián)系,節(jié)點(diǎn)能自由移動(dòng),網(wǎng)絡(luò)中沒有固定的路由器,每個(gè)節(jié)點(diǎn)都具備路由功能,能夠路由發(fā)現(xiàn)并維護(hù)其它節(jié)點(diǎn)的路由信息;在無線覆蓋范圍局限的環(huán)境中,某些節(jié)點(diǎn)不能直接通信,而通過其它節(jié)點(diǎn)的轉(zhuǎn)發(fā)進(jìn)行數(shù)據(jù)通信[7-8]。本設(shè)計(jì)選用了型號(hào)為DL-LN33的無線自組網(wǎng)模塊,具體參數(shù)如表1所示。
表1 DL-LN33無線自組網(wǎng)模塊參數(shù)
DL-LN33無線自組網(wǎng)模塊上電后會(huì)自動(dòng)組網(wǎng),模塊工作時(shí),同附近的模塊自動(dòng)組成無線多跳網(wǎng)絡(luò),即對(duì)等網(wǎng)絡(luò),原理上不需要中心節(jié)點(diǎn),通過UART,微控制器MCU或者電腦即可告訴模塊目標(biāo)地址和待發(fā)送數(shù)據(jù),模塊選擇最優(yōu)的路徑,將信息傳輸給目標(biāo)模塊[9]。本設(shè)計(jì)選定一個(gè)模塊與路由器串口進(jìn)行有線連接后,作為中心節(jié)點(diǎn)給其他網(wǎng)絡(luò)范圍內(nèi)的模塊進(jìn)行數(shù)據(jù)傳輸。
使用路由型號(hào)為普聯(lián)TP-LINK-WR842N第四代版本,此架構(gòu)為多板分布式加冗余備份,能增強(qiáng)轉(zhuǎn)發(fā)能力,提高路由穩(wěn)定性,轉(zhuǎn)發(fā)芯片支持對(duì)報(bào)文兩三層線速轉(zhuǎn)發(fā),且多片交換芯片間可連接,形成交換矩陣網(wǎng)絡(luò),其原理如圖3所示。微處理器選用高通的QCA9533芯片,路由自帶UART串口輸出,原廠閃存ROM容量為4 M,原廠內(nèi)存RAM容量為16 M。
圖3 路由器原理圖
3.2.1 固件編譯與刷寫
切換到Ubuntu終端窗口,進(jìn)入命令行,輸入sudo-sH,輸入裝系統(tǒng)時(shí)設(shè)置的用戶密碼,切換到root,切換到root是為了安裝或升級(jí)部分必要的組件。切到root后,給系統(tǒng)安裝編譯固件需要使用到的依賴包,使用一條命令:
apt-get install g++ libncurses5-dev zlib1g-dev bison flex unzip autoconf gawk make gettext gcc binutils patch bzip2 libz-dev asciidoc subversion
命令中install后面的為各依賴包名稱,依賴包安裝好后,接下來下載固件源碼進(jìn)行編譯,直接使用固件的Imagebuilder進(jìn)行固件的快速生成,下載好Imagebuilder文件程序后,在Imagebuilder文件夾界面運(yùn)行終端,直接執(zhí)行make image命令即可在Imagebuilder的根目錄的bin/ar71xx目錄下找到所生成的固件,固件的格式是以.bin的后綴結(jié)尾如圖4所示。
圖4 固件的格式示意圖
使用網(wǎng)線連接路由lan口和電腦,瀏覽器打開網(wǎng)址192.168.1.1,進(jìn)入breed web恢復(fù)控制臺(tái),在頁面中固件一欄選擇本文已編譯出的固件上傳更新,利用uboot,以網(wǎng)頁web的形式進(jìn)行固件的刷寫,待路由刷寫完成并自動(dòng)啟動(dòng)完成后,可以通過網(wǎng)頁網(wǎng)址192.168.1.1對(duì)路由器進(jìn)行訪問,也可以使用Putty以SSH的形式登錄到路由的微型Linux系統(tǒng)下進(jìn)行固件刷寫[10]。
3.2.2 Linux串口調(diào)試
串口調(diào)試需要用軟件包minicom,因此本設(shè)計(jì)在Putty界面輸入命令:sudo apt-get install minicom,輸入路由默認(rèn)密碼admin自動(dòng)下載安裝,該流程需要路由器在聯(lián)網(wǎng)狀態(tài)下,本文把該路由器作為二級(jí)路由以wan口用網(wǎng)線連接到上一級(jí)路由的lan口,二者的網(wǎng)關(guān)是不一樣的。使用一個(gè)USB轉(zhuǎn)TTL的模塊TX、RX針分別與路由串口的RX、TX針用杜邦線連接,USB連接電腦,電腦打開SecurCRT軟件,打開外部串口,設(shè)置波特率為115 200[11],打開串口,回到Putty的SSH登錄頁面,終端輸入命令:
minicom—D /dev/ttyS0—b 115200
回車進(jìn)入minicom控制臺(tái),在控制臺(tái)輸入字符,如輸入字符“Hello”,對(duì)應(yīng)的字符即可在電腦端的SecurCRT界面上顯示,說明串口調(diào)試成功。
3.3.1 無線自組網(wǎng)模塊的PC端配置與調(diào)試
DL-LN33系列無線自組網(wǎng)模塊以十六進(jìn)制的格式用串口調(diào)試助手發(fā)送調(diào)試數(shù)據(jù)包,其配置與調(diào)試規(guī)則如表2、表3所示。
表2 讀取模塊信息數(shù)據(jù)包格式
表3 修改模塊信息數(shù)據(jù)包格式
模塊可以通過Pin4、Pin5號(hào)引腳做高低電平的輸出,具體的控制方式是:
0x11命令控制端口輸出高電平
0x10命令控制端口輸出低電平
對(duì)于既定已知IP地址的模塊,例如地址為0x01的模塊,使用十六進(jìn)制格式發(fā)送命令“FE 05 90 44 01 00 11 FF”即可對(duì)0x01模塊的Pin4引腳作高電平輸出。對(duì)于每一個(gè)無線自組網(wǎng)模塊,可以獲得兩個(gè)引腳的控制輸出。在模塊與所控制的設(shè)備在使用不同電源的情況下,需要讓模塊與所控設(shè)備作一個(gè)共地處理,否則可能會(huì)出現(xiàn)輸出電平無法控制的后果。Pin4、Pin5號(hào)引腳對(duì)應(yīng)TestTx和TestRx引腳,如圖5所示。
圖5 模塊引腳圖
3.3.2 無線自組網(wǎng)模塊的Openwrt路由端調(diào)試
路由器Linux端的調(diào)試是使用Putty登錄到路由器的后臺(tái)終端頁面。路由器上使用的串口號(hào)為“ttyS0”,按Linux的命令規(guī)則,向串口發(fā)送數(shù)據(jù)的命令為:
echo ‘xxx’ > yyy
其中xxx為需要發(fā)送的數(shù)據(jù),yyy為接收數(shù)據(jù)的設(shè)備號(hào)??刂泼顬椋?/p>
echo -en 'xFEx05x90x45x06x00x10xFF' > /dev/ttyS0
其中-en 選項(xiàng)為執(zhí)行命令后不返回信息、不換行,若使數(shù)據(jù)以十六進(jìn)制形式發(fā)送,只需在每一位數(shù)據(jù)前加上“x”即可進(jìn)行轉(zhuǎn)換。
在Openwrt中使用Lua語言實(shí)現(xiàn)Html語言的Web頁面布局,根據(jù)MVC架構(gòu)規(guī)則,在控制頁面中出現(xiàn)傳入?yún)?shù),因此建立一個(gè)配置文件來存放所傳入的參數(shù),而這個(gè)配置文件的目錄位置位于根目錄下的etc下的config文件夾中[12],本設(shè)計(jì)的燈光控制程序名為:lightcontrol。需要建立4個(gè)基礎(chǔ)文件及其目錄分別為:
1)/etc/config/lightcontrol,配置文件內(nèi)容。
格式為首行固定config lightcontrol,option后跟傳入的參數(shù)變量名,引號(hào)內(nèi)是對(duì)應(yīng)變量的值的內(nèi)容。
2)/usr/lib/lua/luci/controller/lightcontrol.lua,Controller控制器程序定義的配置文件的地址,以及在調(diào)用了model下的cbi內(nèi)的“l(fā)ightcontrol.lua”模塊,并將入口命名為“無線自組網(wǎng)燈光控制”,“1”為順序優(yōu)先級(jí)。
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四個(gè)html的模塊供調(diào)用使用。View下的html文件要求采用常規(guī)html網(wǎng)頁編程語言進(jìn)行編寫,html文件不需使用類似的開頭文件類型的標(biāo)簽,只需在<%+cbi/valueheader%><%+cbi/valuefooter%> 之間編寫常規(guī)html代碼即可。
對(duì)ImageBuilder目錄文件進(jìn)行重新編譯得到新的固件,并刷新路由當(dāng)前系統(tǒng),通過web登錄到路由器192.168.1.1后臺(tái)得到所設(shè)計(jì)的基于Openwrt路由的燈光控制web頁面。
在腳本的首行使用命令聲明該腳本需要用到的解析器以及解析器的位置,如:“#!/bin/bash”即說明該腳本需要用到根目錄下的bin目錄下的bash解析器。在聲明之后換行編寫需要執(zhí)行的命令。
在ImageBuilder的根目錄的bin文件夾內(nèi)新建文件夾存放各個(gè)頁面中所需要調(diào)用的腳本文件。
1)在單個(gè)燈光控制頁面中,按鈕按下就調(diào)用/bin/classroom中的test1腳本,首先,使用uci命令讀取配置文件lightcontrol里面變量名分別為color1和status1的值,把值分別存放在value1和value2的新的局部變量中,確保自組網(wǎng)模塊四為控制單個(gè)燈光的狀態(tài)。然后使用if語句對(duì)value1和value2的值進(jìn)行判斷,如果value1值為‘red’,value2值為‘低電平’,則在此使用uci命令將配置文件lightcontrol面變量名分別為color1和status1的值更改為‘green’和‘高電平’,同時(shí)向串口發(fā)送模塊命令,0x04無線自組網(wǎng)模塊的Pin4輸出高電平,實(shí)現(xiàn)同一個(gè)按鈕可以同時(shí)實(shí)現(xiàn)開和關(guān)的功能。對(duì)于color1的red和green的值,在html模塊中對(duì)color1的值進(jìn)行可讀取,并把讀取到的值作為html編程中font標(biāo)簽中的顏色參數(shù),以此來實(shí)現(xiàn)對(duì)反饋狀態(tài)的字體顏色的變化。如圖6所示。
圖6 單個(gè)燈光控制Web頁面
2)在情景模式控制頁面中,用到的修改配置文件的方式是model頁面參數(shù)改變并觸發(fā)保存應(yīng)用,對(duì)頁面的參數(shù)進(jìn)行選擇,如情景模式,點(diǎn)擊“保存設(shè)置”按鈕,即可修改配置文件中對(duì)應(yīng)變量的值,點(diǎn)擊“應(yīng)用設(shè)置”來調(diào)用/bin/meetingroom 中預(yù)先編寫好的可執(zhí)行腳本。
腳本通過讀取配置文件信息,使用if語句進(jìn)行狀態(tài)判斷,從而按需求實(shí)現(xiàn)燈光控制。
3)在定時(shí)循環(huán)開關(guān)控制頁面中,實(shí)現(xiàn)的是對(duì)指定燈光的定時(shí)開關(guān)。定時(shí)循環(huán)開關(guān),在預(yù)先設(shè)定好的時(shí)間段內(nèi),實(shí)現(xiàn)使特定的燈光重復(fù)開關(guān)的功能,時(shí)間段以秒起步,小時(shí)封頂。代碼中主要通過判斷預(yù)設(shè)參數(shù)來重新調(diào)用預(yù)設(shè)的循環(huán)腳本,其中使用的是while循環(huán)。
sleep關(guān)鍵字作為延時(shí)功能,將讀取到的預(yù)設(shè)的時(shí)間作為sleep的參數(shù),實(shí)現(xiàn)在一個(gè)循環(huán)中延時(shí),如圖7所示。
圖7 情景模式控制Web頁面
定時(shí)循環(huán)開關(guān)控制頁面的定時(shí)開/關(guān),區(qū)別與定時(shí)循環(huán)開關(guān)功能,該選項(xiàng)的時(shí)間設(shè)定是絕對(duì)時(shí)間,表示在指定時(shí)間點(diǎn)進(jìn)行動(dòng)作,其中可傳入的參數(shù)有周、月、日、時(shí)、分、秒。Openwrt的計(jì)劃任務(wù)可以按照指定的時(shí)間去執(zhí)行指定的命令。計(jì)劃任務(wù)的配置文件位置位于/etc/crontabs/root下,本設(shè)計(jì)在Shell腳本中把預(yù)設(shè)的時(shí)間參數(shù)整合成一條計(jì)劃任務(wù)命令,將該命令寫入到/etc/crontabs/root中,把編寫好的定時(shí)開關(guān)的腳本命令為warm_on,放置到目錄/bin/shine_time/下,如圖8所示。
圖8 定時(shí)循環(huán)開關(guān)Web頁面
在model頁面模塊中的按鈕控件的function函數(shù)中設(shè)置在點(diǎn)擊按鈕時(shí)需要執(zhí)行的命令,該執(zhí)行命令為執(zhí)行預(yù)先編寫好的特定目錄下的Shell控制腳本文件。
設(shè)計(jì)至此,已實(shí)現(xiàn)通過路由Web頁面對(duì)無線自組網(wǎng)模塊的控制,從而實(shí)現(xiàn)對(duì)燈光系統(tǒng)的無線遙控。
無線遙控僅限于路由器局域網(wǎng)內(nèi)的控制,如果離開的局域網(wǎng),便無法實(shí)現(xiàn)對(duì)燈光的控制。為了解決這個(gè)問題,使用開源的內(nèi)網(wǎng)穿透軟件,脫離局域網(wǎng)也能實(shí)現(xiàn)遠(yuǎn)程控制的功能。
服務(wù)器中轉(zhuǎn)訪問是本地設(shè)備經(jīng)由公網(wǎng)上的服務(wù)器轉(zhuǎn)發(fā)實(shí)現(xiàn)對(duì)遠(yuǎn)程設(shè)備路由器控制頁面的訪問。本文采用 “云服務(wù)器”+openwrt路由器+frp(內(nèi)網(wǎng)穿透軟件)實(shí)現(xiàn)這個(gè)功能。
在根目錄下新建一個(gè)名為frps的文件夾,把下載好的frp軟件中的frps和frps.ini文件拖拽到文件夾中,雙擊frps.ini,修改配置,將bind_port通信端口號(hào)設(shè)置為7000,并且把使用http訪問頁面的vhost_http_port端口號(hào)隨意設(shè)置為7007。
使用Putty遠(yuǎn)程登錄服務(wù)器管理終端頁面,使用cd命令進(jìn)入frps文件夾,先使用chmod命令給兩個(gè)文件賦予權(quán)限,即:
chmod 777 frps
chmod 777 frps.ini
再使用nohup命令執(zhí)行frps服務(wù)端程序,并保持在后臺(tái)運(yùn)行,即:
nohup ./frps -c ./frps.ini
運(yùn)行結(jié)果如圖9所示。
圖9 運(yùn)行結(jié)果圖
至此,在遠(yuǎn)程Linux下配置frp的服務(wù)端完成。
使用Winscp登錄到192.168.1.1本地路由系統(tǒng)文件目錄,在根目錄下新建frpc文件夾,把frp軟件中的frpc和frpc.ini拖拽到文件夾中,雙擊打開frpc.ini,將服務(wù)地址更改為我們的云服務(wù)器公網(wǎng)地址,服務(wù)端口同步為7 000,添加一個(gè)web命令塊,type類型為http,本地端口local_port設(shè)置為80,custom_domian為域名。
配置保存后,運(yùn)行Putty登錄本地路由系統(tǒng)終端頁面,使用cd命令進(jìn)入frpc文件夾,給文件賦予可執(zhí)行權(quán)限后,執(zhí)行命令:
./frpc -c ./frpc.ini
即可連接到云服務(wù)器,在網(wǎng)址中使用公網(wǎng)地址加http端口號(hào),即實(shí)現(xiàn)遠(yuǎn)程登錄路由頁面并實(shí)現(xiàn)遠(yuǎn)程燈光控制。
使用內(nèi)網(wǎng)穿透遠(yuǎn)程連接服務(wù)器,可實(shí)現(xiàn)外網(wǎng)遠(yuǎn)程控制,為解決調(diào)試中需手動(dòng)輸入執(zhí)行連接命令的麻煩,本設(shè)計(jì)編寫了Shell執(zhí)行腳本用于路由器開機(jī)后便自動(dòng)執(zhí)行連接服務(wù)器的操作,步驟為:在系統(tǒng)開機(jī)后,使用ping命令檢測(cè)路由器本身是否已經(jīng)連接互聯(lián)網(wǎng),如未連接互聯(lián)網(wǎng),則不執(zhí)行操作;如已連接互聯(lián)網(wǎng),則首先執(zhí)行連接服務(wù)器的命令,等待三秒后對(duì)地址47.103.1.231:7007進(jìn)行檢測(cè)是否連通,如已連通,則停止操作。如未連通,繼續(xù)返回執(zhí)行連接命令。對(duì)于連接服務(wù)器與否,也在web控制頁面中給出狀態(tài)反饋。
為了避免系統(tǒng)誤判將未連接當(dāng)成已連接,而導(dǎo)致無法遠(yuǎn)程訪問的現(xiàn)象,本設(shè)計(jì)特意在控制頁面中上方添加專門為手動(dòng)連接服務(wù)器的按鈕,其原理是在燈控操作按鈕的基礎(chǔ)上,修改其所執(zhí)行的命令。
設(shè)計(jì)制作軟硬件實(shí)物之后,對(duì)該燈光控制系統(tǒng)進(jìn)行了調(diào)試檢驗(yàn),包括單個(gè)燈光的網(wǎng)頁開關(guān)控制、燈光組的情景模式開關(guān)控制和定時(shí)模式下時(shí)長(zhǎng)、指定時(shí)間、指定燈光類型的開關(guān)調(diào)節(jié),以及遠(yuǎn)程頁面訪問控制等。測(cè)試結(jié)果表明,所設(shè)計(jì)的系統(tǒng)能夠?qū)崿F(xiàn)燈光組的控制和調(diào)節(jié)需求,整個(gè)系統(tǒng)運(yùn)行穩(wěn)定,實(shí)時(shí)性好,操作方便,滿足設(shè)計(jì)要求。該燈光系統(tǒng)的遠(yuǎn)程控制臺(tái)界面如圖10所示。
圖10 遠(yuǎn)程頁面訪問控制
本設(shè)計(jì)使用Openwrt路由器串口輸出控制無線自組網(wǎng)模塊,通過模塊控制繼電器來控制燈光系統(tǒng)。在路由器控制方面,設(shè)計(jì)Web控制頁面以及使用Shell腳本語言作為控制程序,并且Web和Shell兩者相聯(lián)系形成一個(gè)完整的控制系統(tǒng)。在遠(yuǎn)程控制方面,采用開源的FRP內(nèi)網(wǎng)穿透軟件,分別在遠(yuǎn)程服務(wù)器和本地服務(wù)器配置好FRP軟件,從而將本地控制頁面映射到遠(yuǎn)程服務(wù)器上,實(shí)現(xiàn)遠(yuǎn)程的頁面訪問控制。該系統(tǒng)具有智能化、功耗低、成本低、時(shí)延短等優(yōu)點(diǎn),在燈光照明系統(tǒng)中具有較大應(yīng)用價(jià)值。