盧 超
(陜西理工大學物理與電信工程學院,陜西 漢中 723000)
隨著互聯網技術的不斷發展,智能家居的出現為人們享受生活提供了一個廣闊的平臺。無線傳輸技術被廣泛應用到具有遠程控制功能的智能LED照明系統中,通過手機APP遠程控制終端設備的應用越來越多。目前,主流的無線傳輸技術主要有NRF905或者NRF2401等短距離無線通信、Zigbee技術、藍牙、GSM和WiFi等。WiFi技術具有速度快、可靠性高的特點,可以方便組建網絡,對于普通的家庭照明控制,它是實現無線智能照明系統的較好的解決方案[1,2]。設計一個基于WiFi的智能LED照明控制系統,實現移動終端遠程控制智能家居中的LED燈,具有很好的市場應用價值。
系統設計主要分為三個部分:手機客戶端、服務器和基于WiFi的無線模塊客戶端。
1)手機客戶端:編寫一個手機APP程序,通過TCP/IP協議連接到Internet網絡;設計UI界面,設計人性化交互操作界面,通過APP程序發送數據給服務器。
2)服務器:接收手機客戶端發送來的數據,對發送來的數據進行存儲,然后將手機客戶端發送來的數據發送給基于WiFi的無線模塊客戶端。
3)基于WiFi的無線模塊客戶端:根據設計要求,基于WiFi的無線模塊選用HF-LPB100WiFi模塊,采用Cortex-M3內核的ARM作為主控芯片,控制WiFi模塊。通過TCP/IP協議連接服務器,然后接收手機客戶端發送來的數據,識別后通過控制繼電器來實現控制LED的通斷、色度和亮度[3],系統總體設計如圖1所示。

圖1 系統框圖
1)LED電路。為了實現LED的色度控制,選用RGB紅綠藍七彩色LED燈珠,控制器的P2口接地控制所有LED的通斷,P1口控制藍色LED,P3口控制綠色LED,P4口控制紅色LED。通過P1、P3和P4三原色合成七種顏色,設計中通過一個GPIO和三個PWM可實現控制整個LED輸出不同的顏色和亮度。
2)USB轉UART電路。為了調試方便,調試時將數據收發通過串口調試助手進行測試,選用FT232實現USB到串口UART接口的轉換,圖2所示為USB轉UART的電原理圖。
3)HF-LPB100電路。WiFi模塊采用HF-LPB100模塊,HF-LPB100集成802.11b/g/n,單片機控制裝置很容易接入WiFi無線網絡,實現物聯網控制與管理。HF-LPB100尺寸僅23.1 mm×32.8 mm×2.7 mm,配備了一個內置PCB天線、外置天線連接器。HF-LPB100的無線模塊可以配置成一個無線STA(即無線站點,是一個無線網絡的終端),也可以配置成AP(無線接入點,是一個無線網絡的中心節點)。HF-LPB100模塊支持串口透明傳輸模式,實現串口即插即用,僅需要配置必要的參數,上電后模塊自動連接到默認的無線網絡和服務器[4,5]。

圖2 USB轉UART電原理圖
設計中,模塊采用3.3 V供電,通過ARM普通的GPIO控制口作為輸入輸出,SPI接口用于Jlink下載程序調試,PWM輸出不同占空比的脈沖,HF-LPB100電原理圖如圖3所示。

圖3 HF-LPB100電原理圖
軟件設計分為三個部分:HF-LPB100模塊客戶端軟件設計,手機客戶端的Android軟件設計和服務器軟件設計。具體實現是通過HF-LPB100客戶端發送LED的屬性狀態給服務器,服務器接收后保存并轉發給Android客戶端,Android客戶端發送控制信號給服務器,并轉發給Hf-LPB100模塊客戶端,客戶端接收到數據后識別控制LED的通斷、色度和亮度。
HF-LPB100模塊客戶端軟件設計采用KEIL MDK開發工具,包括μVision4集成開發環境和RealView編譯器,支持ARM7、ARM9和Cortex-M3/M1/M0內核處理器,有處理器自動配置啟動代碼,集成了Flash燒寫模塊,Simulation設備模擬功能和性能分析功能。手機客戶端的Android軟件設計采用開源性的Eclipse,基于Java的集成開發平臺。Eclipse提供了一套標準的插件給開發者,包括Java開發工具。服務器軟件設計采用VC++6.0,基于Windows操作系統的可視化集成開發環境[6]。
調試軟件采用SecureCRT和SocketTool。SecureCRT支持SSH,包括SSH1和SSH2終端仿真程序,可以登錄UNIX或Linux服務器主機,登錄后可以遠程操作服務器主機,同時支持Telnet和Rlogin協議。SocketTool調試軟件是一個可以進行網絡的TCP/UDP通信調試工具,集成了TCP的服務器/客戶端,和UDP的服務器/客戶端,以及UDP廣播/組播,可以建立服務器或者客戶端,支持發送和接收十六進制的顯示,支持漢字以及發送[7-10]。
HF-LPB100模塊客戶端軟件設計思路是:SDK先連接服務器,監聽是否有客戶端連接服務器,如果有客戶端連接服務器,服務器告知SDK有客戶端連接了服務器,這時SDK將采集的LED的通斷狀態,LED的色度值和亮度值發送給服務器器,由服務器發送給Android客戶端,Android客戶端收到SDK發放回來的數據,進行分離識別處理后,把LED的通斷狀態在按鍵上顯示,把色度值在滑動條上顯示,把亮度值在滑動條上顯示,控制完畢后,關閉軟件,等待下一次在打開軟件時,上一次控制保留的數據會顯示在Android手機上[11-14]。圖4所示為HF-LPB100模塊軟件設計流程圖,判斷HF-LPB100模塊客戶端是否連接網絡,連接后發送LED的狀態,進入阻塞式等待狀態,當接收到數據時,識別并判斷發送來的數據是控制通斷的還是控制色度亮度的,實現遠程控制。

圖4 HF-LPB100模塊軟件設計流程圖
手機客戶端Android軟件主要是菜單設計,菜單包括首頁、通斷、色度、亮度和幫助。首頁中添加一個按鍵,按鍵監聽器監聽是否按鍵按下,將結果發送給服務器,實現遠程控制;通斷中放置一個連接服務器按鈕和六個按鍵,連接服務器按鈕第一次按下后,會自動連接服務器,六個按鍵對應六組LED,分別設置LED的應用場景為:客廳、臥室、陽臺、廚房、衛生間和餐廳,通過按鍵控制對應的LED通斷,為了人機交互人性化,當LED打開時,按鍵會切換亮LED圖片,使用戶可以通過圖片示意,清楚地看出LED的通斷,另外設置了一個設置按鈕,用于對IP和端口號存儲,輸入IP和端口號后,點擊保存按鈕,下次再進入后就不用再修改IP和端口號,直接可以點擊連接服務器按鈕,方便使用;色度中放的是六個滑動條,通過觸摸滾動滑動條可以調節LED的色度;亮度中放的是六個滑動條,通過觸摸滾動滑動條可以調節LED的亮度;滑動條的值是0~100,滑動條監聽器用于監聽滑動時間,每次滑動停止將數據發送給服務器;幫助菜單是APP的使用說明,點擊按鈕,讀取指定位置的txt文件,顯示在屏幕上。系統開始工作時,服務器先要發送客戶端LED的通斷狀態和LED的色度、亮度,手機接收到服務器發送來的數據,進行分析處理,并初始化LED的通斷按鈕的狀態和滑動條的初始化值,這樣每次打開軟件,手機都會顯示LED的信息,在重新控制的時候,LED的屬性不會錯亂。圖5所示為手機客戶端APP軟件設計流程圖,首先是放置一個菜單,進入設置界面,輸入IP和端口號保存,連接服務器,沒有連接時重新連接,連接成功后,等待接收WiFi客戶端發送來的狀態,顯示在UI界面上,點擊按鍵發送通斷信號,觸摸滾動滑動條調節色度、亮度值,發送后,在UI中顯示客戶端連接服務器的狀態和LED的開關狀態,APP軟件運行界面如圖6所示。

圖5 手機客戶端APP軟件設計流程圖
內網到外網的的連接,通過花生殼軟件和服務器做了一個地址映射,配置一個域名和端口號,手機Android客戶端可以通過這個域名和端口號使用外網連接搭建的服務器[15]。

圖6 APP運行界面
在TCP和UDP協議中為了識別通信實體中進行通信的進程,通過協議端口實現,端口使用了一個16位的數字表示,包括一些數據結構和I/O緩沖區,應用綁定后,傳輸層端口的數據端口是通過系統調用來實現。套接字用于通信的進程,將有共有特性的套接字綜合在一起,在同一個區域的套接字進行數據交換,套接字的兩種類型:流式套接字和數據報套接字。流式套接字是一種基于TCP協議的網絡連接,是面向對象的可靠的網絡數據通行方式,在通信過程中,數據時無差錯的傳輸,接收數據時按順序接收;數據報套接字是一種基于UDP協議的網絡連接,是無連接的網絡數據通行方式,在通信的過程中,數據包是以獨立的方式發送的,不提供錯誤保證。服務器軟件設計主要包含基于TCP(面向連接)的Socket編程和基于UDP(面向無連接)的socket編程[16-19]。
基于TCP(面向連接)的Socket編程創建服務器的順序如下:
①加載所需要的套接字庫;②創建所需要的套接字;③將所需要的套接字綁定到一個IP和端口上;④將所需要套接字設為監聽模式,準備接收客戶端的請求到來;⑤等待客戶端請求的到來;當請求帶來時,接收連接請求,返回一個新的,對應于和本次相同連接的套字,當請求沒有到來時,繼續監聽模式,準備接收客戶端的請求到來;⑥用返回的套接字和客戶端進行通信,包括發送接收數據;⑦返回套接字,等待另一個客戶端通信請求;⑧關閉所需要的套接字。
基于TCP(面向連接)的Socket編程創建服務器的順序創建客戶端的順序如下:
①加載所需要的套接字庫;②創建所需要的套接字;③客戶端向服務器發送連接請求,請求連接服務器;④客戶端要和服務器端進行通信,包括數據的發送和接收;⑤關閉所需要的套接字。
基于UDP(面向無連接)的socket編程創建服務器端順序如下:
①加載所需要的套接字庫;②創建所需要的套接字;③將所需要的套接字綁定到一個IP和端口上;④服務器等待接收客戶端的數據;⑤關閉所需要的套接字。
基于UDP(面向無連接)的socket編程創建客戶端的順序如下:
①加載所需要的套接字庫;②創建所需要的套接字;③客戶端向服務器發送數據,包括數據的發送和接受;④關閉所需要的套接字。
圖7所示為服務器軟件的系統框圖,服務器獲取到客戶端的輸入流,將輸入流中的數據放入輸出流中發送。

圖7 服務器軟件系統框圖
設計中,數據傳輸主要包括三個部分:手機客戶端和服務器網絡建立連接后進行的數據傳輸;HF-LPB100模塊客戶端與服務器建立連接并進行數據傳輸;手機客戶端與服務器、HF-LPB100客戶端與服務器之間組網并進行數據傳輸。Android開發中主要用USB數據線在Eclipse中的lagcat中輸出日志來調試,HF-LPB100WiFi模塊數據傳輸中主要通過串口調試要顯示的數據,在ARM的編程中,通過Jlink單步、全速、跳出、進入來調試。
測試HF-LPB100模塊發送數據給服務器,前提是要和服務器建立連接,將要發送的數據放入BUFF中,發送給服務器,通過透傳的方式,在串口中打印BUFF中的數據,只有發送的BUFF數據正確,才可以確定服務器接收的數據正確。測試HF-LPB100模塊接收來自服務器的數據,通過在sockettool的發送區中寫入要發送的內容,點擊發送按鈕,將數據發送給HF-LPB100模塊,判斷接收數據是否正確。
Android編程中測試是否和服務器建立連接,利用sockettool建立一個服務器,Android手機主動和服務器建立連接,建立連接后用USB數據線通過日志的形式在Eclipse中打印出來,同時在sockettool也可以看到客戶端的IP和端口號。Android手機測試發送和接收可以控制LED通斷,調節LED色度、亮度的控件,并添加監聽器,通過點擊UI中的控件測試發送數據給服務器,通過服務器保存和轉發。
服務器的測試可以直接打印在控制臺上進行查看數據。服務器發送接收數據測試完成后,添加線程,監聽端口是否與客戶端與之建立連接,判斷是哪個客戶端后,對數據進行轉發保存。
HF-LPB100模組客戶端與服務器可以建立連接并可以正確收發數據,Android手機客戶端可以與服務器建立連接并可以正確收發數據,服務器也可以正常收發數據,三個部分單獨調試成功后,進行系統聯調,服務器先監聽端口是否有客戶端連接,并識別是哪個客戶端,當時手機客戶端時,服務器會將LED的屬性發送給Android客戶端,Android客戶端接收到服務器發送來的數據后,在UI界面中告訴使用者,LED的開關狀態、色度、亮度,當使用者點擊了UI控件后,發送數據給服務器,服務器接收數據并保存,同時將數據轉發給HF-LPB100模塊客戶端,HF-LPB100模塊客戶端接收到數據后識別控制信號是控制開關,還是調節色度或亮度的,然后通過ARM中的GPIO控制LED的狀態,PWM調節LED色度、亮度。
HF-LPB100模塊客戶端發送LED的屬性值,包括LED的色度,亮度和通斷給服務器,經服務器保存并轉發后,發送給Android客戶端,Android客戶端將接收到的數據顯示在UI界面上,提供一個交互式的人機交互界面,智能LED系統設計了六組LED,其中包括:客廳、臥室、陽臺、廚房、衛生間和餐廳,以客廳為例,測試數據如表1所示。

表1 測試數據
字符串中,open0代表打開LED,open1代表關閉LED,color_livingroom#17代表客廳LED的色度值為17,brightness_livingroom#90代表客廳LED的亮度值為90。通過觀察LED的狀態,可以看出和設定值相一致,完成控制功能。選取其中一組數據:亮-藍紅色-很亮,open0,color_livingroom#17,brightness_livingroom#90。退出服務器后,再次打開APP,連接網絡后,HF-LPB100模塊客戶端會發送數據給服務器,并轉發給Android客戶端,Android客戶端接收到的數據如表2所示。

表2 Android客戶端接收初始狀態數據分析
當APP再次打開后,接收到open0,color_livingroom#17,brightness_livingroom#90數據,LED的顯示為亮-藍紅色-很亮,在UI界面上顯示正常。由此可以說明,服務器保存了上一次的設置,存儲功能正常。
本文設計了一個的智能LED照明控制系統,采用Cortex-M3內核的ARM作為主控單片機,WiFi模塊采用支持串口透明傳輸模式的HF-LPB100模塊,選用RGB紅綠藍三種LED燈珠,通過單片機I/O口控制繼電器來實現LED的通斷,利用PWM可控制LED輸出不同的顏色和亮度。在Android環境下編寫一個APP,通過TCP/IP協議連接網絡,采用花生殼軟件中地址映射生成的域名和端口號訪問自己搭建的服務器,實現了通過觸摸按鍵控制智能LED的通斷,通過滑動條調節控制LED的色度和亮度。系統布置了客廳、臥室、陽臺、廚房、衛生間和餐廳六個場景設計六組LED,在內網和外網中測試功能均正常,可應用于智能家居系統。