鄭艷華++徐嘉順++朱耀臻
摘 要:現(xiàn)有的智能燈光控制系統(tǒng)主要有遙控器控制和手機App控制兩種方式,這些方式的用戶體驗較差。本設(shè)計的智能燈光控制系統(tǒng)利用廣泛普及的微信和智能手機,通過網(wǎng)絡(luò)和服務(wù)器來自主控制燈光。系統(tǒng)包括手機微信控制端,服務(wù)器和燈光控制端三部分。該智能燈光控制系統(tǒng)具有操作簡單、體驗愉悅、智能可靠等優(yōu)點。
關(guān)鍵詞:微信;智能燈光控制;WiFi;服務(wù)器;安卓單片機
中圖分類號:TN911;TP273 文獻標(biāo)識碼:A 文章編號:2095-1302(2016)12-0-03
0 引 言
目前,房間的燈大多通過實體按鈕開關(guān)來控制,且每個按鈕開關(guān)都可能分布在不同的位置。因此通過手動開關(guān)按鈕控制燈光的操作非常繁瑣,為用戶帶來諸多不便。隨著用戶體驗要求的提高,傳統(tǒng)的手動按鈕開關(guān)控制燈光將會被智能燈光控制取代[1-4]?,F(xiàn)階段的智能燈光控制主要分為兩種,一種是通過遙控器控制,另一種是通過手機App控制。不同地方的遙控器不盡相同,App的燈光控制要求每個地方的用戶都下載一個手機控制App,而這無疑增添了用戶的麻煩[5,6]。
本設(shè)計通過廣泛使用的微信對燈光進行智能控制,實現(xiàn)在手機上的微信客戶端輸入相關(guān)指令就能控制燈的開關(guān)及調(diào)節(jié)燈光亮度的效果。
1 智能燈光控制系統(tǒng)的設(shè)計
該智能燈光控制系統(tǒng)主要由手機微信控制端、服務(wù)器和燈光控制端組成。系統(tǒng)控制流程如下所示:
(1)微信用戶在公眾號中輸入控制指令,指令通過微信服務(wù)器經(jīng)URL進入自己搭建的服務(wù)器;
(2)服務(wù)器對指令進行解讀,合法指令將進入MySQL數(shù)據(jù)庫修改相應(yīng)的記錄值;
(3)WiFi模塊連接WiFi熱點并建立TCP連接后發(fā)送HTTP請求到服務(wù)器,服務(wù)器訪問MySQL數(shù)據(jù)庫獲取相應(yīng)的記錄值數(shù)據(jù)后返回給WiFi模塊;
(4)WiFi模塊通過串口通信將返回的數(shù)據(jù)發(fā)送給Arduino單片機,單片機對數(shù)據(jù)進行解析并以此控制燈光。
手機微信端、燈光控制端流程圖如圖1和圖2所示。
1.1 手機微信公眾號的開發(fā)
在開發(fā)模式下開發(fā)者能通過微信公眾號在自己搭建的服務(wù)器上使用自己的程序與用戶進行對話。首先需要在微信公眾平臺注冊賬號。在完成基本信息的填寫登記后可以選擇開通公眾號運營主體和類型,然后開通開發(fā)模式。要求開發(fā)者完成填寫服務(wù)器配置、驗證服務(wù)器地址的有效性和依據(jù)接口文檔實現(xiàn)業(yè)務(wù)邏輯3個步驟[6]。
在開發(fā)模式下,用戶在微信公眾號上發(fā)送的消息到達微信公眾號服務(wù)器后通過對接的URL傳到自己的服務(wù)器上,然后用自己的服務(wù)器處理消息,實現(xiàn)業(yè)務(wù)邏輯并達到設(shè)定的功能。如果開發(fā)者沒有服務(wù)器資源可以通過使用云平臺來搭建,也能非常簡單、快速的實現(xiàn)自己的服務(wù)器。
1.2 服務(wù)器的設(shè)計
服務(wù)器是在新浪云SAE平臺上搭建的,使用PHP嵌入式腳本語言。若要成為微信公眾號開發(fā)者并搭建服務(wù)器,首先需要在搭建的服務(wù)器上將微信服務(wù)器發(fā)送的GET請求攜帶的參數(shù)signature、timestamp、nonce、echostr進行簡單處理,且處理結(jié)果需滿足微信服務(wù)器的要求。搭建服務(wù)器的第二部分是在同一個應(yīng)用下新建一個名為hotel.php的文件。該新建文件也是WiFi模塊與MySQL數(shù)據(jù)庫之間溝通的橋梁。WiFi模塊通過TCP連接到服務(wù)器上后,發(fā)送HTTP請求到此文件上,此文件便會判斷HTTP請求是否合理,如果HTTP請求合理就連接到MySQL數(shù)據(jù)庫,查找燈光表下的所有記錄值,并將記錄值輸出發(fā)送給WiFi模塊。
微信用戶在公眾號里編輯的指令經(jīng)微信服務(wù)器封裝成XML格式數(shù)據(jù)包,通過URL發(fā)送到自己搭建的服務(wù)器上。服務(wù)器再從XML格式數(shù)據(jù)包中找出用戶發(fā)送的指令。用戶發(fā)送的消息封裝在某個參數(shù)里,我們將用戶消息提取出來并與預(yù)設(shè)的關(guān)鍵字比較。如果和預(yù)設(shè)關(guān)鍵字匹配就會執(zhí)行連接進入MySQL數(shù)據(jù)庫中修改相應(yīng)字段的記錄。
回復(fù)信息是對微信服務(wù)器發(fā)送消息的一次回復(fù)。信息的回復(fù)也要經(jīng)過將信息封裝成XML格式這一過程。封裝后的消息經(jīng)微信服務(wù)器處理后,就會將參數(shù)中的信息發(fā)送到用戶ID。
1.3 數(shù)據(jù)庫的設(shè)計
當(dāng)微信公眾號中有指令輸入時,就要更新數(shù)據(jù)庫中的數(shù)據(jù),即更改記錄中的值。當(dāng)對MySQL數(shù)據(jù)庫使用完畢后需要用函數(shù)mysql_close()關(guān)閉連接。例如建立共享型MySQL數(shù)據(jù)庫,表名為“燈光C”,在燈光C表中有4個字段分別為ID、燈光、VALUE、TIME。每個字段下都有五個記錄,ID為1、2、3、4、5的記錄代表著五個不同的燈;字段VALUE下的記錄值代表著燈光不同的開關(guān)狀態(tài);字段TIME代表燈最后狀態(tài)的改變時間,即字段VALUE下的記錄改變的時間。用戶發(fā)送的指令經(jīng)服務(wù)器的預(yù)設(shè)關(guān)鍵字匹配后就進入燈光C表中修改VALUE和TIME的值,如圖3所示。
1.4 燈光控制端的設(shè)計
燈光控制端主要包括WiFi模塊和Arduino單片機以及各種類型的燈和連線。
1.4.1 WiFi模塊設(shè)置
要使WiFi模塊連上互聯(lián)網(wǎng),首先使用USB轉(zhuǎn)TTL串口與esp8266連接,接好線后將USB轉(zhuǎn)TTL插入電腦的USB接口。然后運行串口調(diào)試工具sscom42,在串口選擇相應(yīng)端口和波特率后,點擊“打開串口”。WiFi模塊的波特率默認為115 200,而Arduino單片機不支持太高的波特率,所以使用設(shè)置模塊波特率的AT指令修改模塊的波特率為9 600。語法為AT+CIOBAUD=9 600。
在字符串輸入框中輸入“AT+RST”重啟模塊,然后輸入“AT+CWMODE=1”設(shè)置模塊為station客戶端模式,接著輸入“AT+CWJAP=WiFiwork”,“544544544””連接到無線路由器。若響應(yīng)為“OK”和“connect”,則說明成功連接上WiFi路由器。成功連接路由器后,WiFi模塊能記住一個已連接過的WiFi名稱與WiFi密碼,等下次重啟時發(fā)現(xiàn)該熱點就會自動連接。接著設(shè)置WiFi模塊為透傳模式,指令為“AT+CIPMODE=1”,透傳模式是將WiFi模塊接收到的數(shù)據(jù)原封不動的發(fā)送到Arduino單片機上去。接著輸入“AT+CIPSTART=‘TCP,1.13521003789.applinzi.com,80”指令建立TCP連接,與自己搭建的服務(wù)器建立起通訊連接。若響應(yīng)為“CONNECT OK”則說明和服務(wù)器成功建立TCP連接。建立連接后再輸入“AT+CIPSEND”就能發(fā)送HTTP請求到服務(wù)器。
發(fā)送“AT+CIPSEND”指令返回 “OK” 后,就說明可以發(fā)送HTTP請求消息了。若成功發(fā)送HTTP請求后WiFi模塊就能夠接收來自服務(wù)器端的響應(yīng)。通過串口通信將響應(yīng)數(shù)據(jù)傳遞到Arduino單片機上,Arduino單片機就會在HTTP響應(yīng)的數(shù)據(jù)中解析出控制各燈光開關(guān)狀態(tài)的字符。
1.4.2 Arduino單片機的設(shè)置
在Arduino編程中用analogWrite(pin, value)函數(shù)來控制燈光的狀態(tài)。pin代表數(shù)字管腳號,value代表PWM輸出的占空比,value值的范圍在0255之間,所對應(yīng)的占空比為0%100%。因此通過改變value值的大小來調(diào)節(jié)燈光亮度。
Arduino與WiFi模塊之間通過軟串口通信,使用代碼“SoftwareSerial WiFi(8,9);”定義數(shù)字I/O接口8、9號腳分別為軟串口通信的RX(接收)和TX(發(fā)送)。工作時,Arduino首先與WiFi模塊使用串口通信,將相應(yīng)的指令輸入到WiFi模塊中進行設(shè)置,使得WiFi模塊可以接入WiFi熱點進行聯(lián)網(wǎng)并發(fā)送HTTP請求。然后Arduino作為控制端,將WiFi模塊接收到的數(shù)據(jù)信息進行解析,從中找出控制相應(yīng)燈光開關(guān)狀態(tài)的字符并對燈光進行控制。
2 測試結(jié)果
單片機接入電源等待約10 s,WiFi模塊會啟動并自動連接WiFi熱點,然后建立TCP連接,發(fā)送HTTP請求。這時就可以通過微信公眾號編輯并發(fā)送指令來控制燈光的狀態(tài)。在微信公眾號端輸入特定指令格式才能成功控制燈光,指令發(fā)送后會收到服務(wù)器的自動回復(fù)。輸入“燈光名稱+開/關(guān)”控制燈具的開和關(guān);輸入“燈光名稱+數(shù)字(05)”調(diào)節(jié)燈光亮度。控制燈光亮滅和亮度調(diào)節(jié)的效果如圖4所示。微信輸入控制和系統(tǒng)自動回復(fù)如圖5所示。
亮度調(diào)節(jié)控制
由于網(wǎng)絡(luò)延遲和程序運行的原因,發(fā)送指令12 s后相應(yīng)燈光的狀態(tài)才會改變。通過串口監(jiān)視器可以觀察到,WiFi模塊每隔約1.3 s便能從服務(wù)器上循環(huán)獲取數(shù)據(jù)。
當(dāng)按下實體開關(guān)按鈕時,燈光的狀態(tài)也會改變,即開關(guān)控制與微信控制形成雙開關(guān)控制。由于開關(guān)使用了中斷函數(shù),而Arduino UNO r3 只有兩個引腳支持中斷函數(shù)的使用(D2和D3腳),其中一個引腳接燈光輸出,所以本設(shè)計中只使用一個開關(guān)對燈光調(diào)節(jié)進行控制示范。當(dāng)然,不使用中斷函數(shù)也可以通過開關(guān)控制燈光,不過燈光響應(yīng)控制時間會有延遲,延遲時間約為12 s。
3 結(jié) 語
文中利用微信設(shè)計了一種智能燈光控制系統(tǒng)。該系統(tǒng)由手機微信控制端、服務(wù)器端和燈光控制端三部分組成,實現(xiàn)了微信對燈光的智能控制,具有操作簡單、體驗愉悅、方便實用等優(yōu)點。但在安全性、操作界面等方面有待加強和提升。
參 考 文 獻
[1]弓盼,王嘉梅,孫善通.基于ZigBee-DALI協(xié)議的智能照明系統(tǒng)設(shè)計[J].現(xiàn)代電子技術(shù),2016,39(4):63-66.
[2]張曉彬,張.基于藍牙組網(wǎng)的燈光控制系統(tǒng)研究與設(shè)計[J].物聯(lián)網(wǎng)技術(shù),2015,5(8):22-24.
[3]項新建.基于CAN總線的燈光控制系統(tǒng)[J].照明工程學(xué)報,2004,15(2):28-30.
[4]李春雨,孫憲坤,陳濤.智能家居的燈光實時監(jiān)控系統(tǒng)設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2015,15(9):77-79.
[5]鐘志勇,何威俊,馮煜博.微信公眾平臺應(yīng)用開發(fā)實踐[M].北京:機械工業(yè)出版社,2013.
[6]楊塤,董燦,譚鋒.智慧教室燈光控制系統(tǒng)設(shè)計[J].物聯(lián)網(wǎng)技術(shù),2014,4(10):47-49.
[7]王潤民,王健.基于ZigBee的道路照明智能控制系統(tǒng)的設(shè)計[J].物聯(lián)網(wǎng)技術(shù),2014,4(12):56-58.
[8]聶佰玲,劉亞,李宇,等.基于微信控制的智能家居系統(tǒng)研究與設(shè)計[J].山西農(nóng)經(jīng),2016(2):97-98.