趙翠芹,施運應(yīng),潘 潔,趙家祺,韋 魏
(1.河池學(xué)院 計算機與信息工程學(xué)院,廣西 宜州 546300;2.呈貢區(qū)洛龍街道辦事處黨政辦公室,云南 昆明 650500)
互聯(lián)網(wǎng)技術(shù)的廣泛應(yīng)用改變了人們的生活方式。從最初的信息共享、郵件發(fā)送、聊天到如今的購物、日常消費、貿(mào)易交易等,“互聯(lián)網(wǎng)+”的世界體系已經(jīng)建立。但這些遠遠不夠,除人之外的物體也需要傳遞、共享信息。物體苦于無生命無嘴巴,想要傳遞信息,就必須先獲取信息,然后通過通信手段進行傳輸。傳感器充當了物體的“神經(jīng)元”,完成物體信息采集的使命,從而使物體有了“生命”;物體借助蜂窩網(wǎng)絡(luò),RFID,WiFi,藍牙,ZigBee,LoRa,SigFox和NB-IoT等通信技術(shù)把獲取到的信息傳遞出去,這些通信技術(shù)充當了網(wǎng)絡(luò)層的“神經(jīng)中樞”和“大腦”[1],從而使物體有了“嘴巴”。隨著IoT技術(shù)的快速發(fā)展,入網(wǎng)終端設(shè)備已經(jīng)從手機、電腦躍升到了普通物體。
IoT概念始于1999年,經(jīng)過10年醞釀,到2009年IoT被正式列為中國五大新興戰(zhàn)略性產(chǎn)業(yè)之一[2]。至此,IoT行業(yè)可謂“枯木逢春”,進入了“火樹銀花”式的爆發(fā)期。各大企業(yè)、高校和科研院所紛紛站隊IoT,爭取IoT技術(shù)的話語權(quán)。該趨勢可從各種IoT科技的并購浪潮中略窺一二。滴滴、Uber合作發(fā)力車聯(lián)網(wǎng);日本軟銀以320億美元收購英國ARM,高通以470億美元收購荷蘭NXP。并購層出不窮,有了IoT二維碼之后,人們過上了掃碼登錄、掃碼付款、掃碼上網(wǎng)、掃碼進店、掃描上車等“碼”上行動的生活。雙十一“剁手黨”們樂此不疲地買買買,海量交易帶來巨大的物流壓力,若在包裹上附上IoT標簽,則可利用IoT自動識別技術(shù)準確無誤地快速分揀包裹。如果說WiFi技術(shù)打通了網(wǎng)絡(luò)連接的最后一英寸,那么共享單車則解決了人們出行的最后一公里,無人超市、無人駕駛、智能家居等新概念、新產(chǎn)品層出不窮。從概念到落地生根,再到今天的遍地開花,IoT已經(jīng)進入到人們生活的方方面面[3]。
智能家居作為IoT在家具行業(yè)的實際應(yīng)用,已經(jīng)引起了商家的高度關(guān)注[4]。本文針對智能家居應(yīng)用場景設(shè)計了一個智能家居系統(tǒng)。該系統(tǒng)采用TI公司設(shè)計的SoC芯片作為主控芯片,其內(nèi)核為8051的CC2530單片機,開發(fā)環(huán)境為IAR Embedded Workbench,開發(fā)語言為C語言。系統(tǒng)組建了具有1個協(xié)調(diào)器和3個終端節(jié)點的WSN。終端節(jié)點帶有人體傳感器、溫濕度傳感器、光敏傳感器和紅外反射傳感器,分別采集相應(yīng)環(huán)境溫度、濕度、光照等數(shù)據(jù)。終端節(jié)點采集數(shù)據(jù)后,通過ZigBee技術(shù)實時傳遞給協(xié)調(diào)器;協(xié)調(diào)器接收多終端數(shù)據(jù),并區(qū)分信息來自哪個終端,然后通過串口將數(shù)據(jù)發(fā)送給上位機。在PC端使用Visual Studio 2017軟件環(huán)境、C語言開發(fā)了一個用戶界面框架IoT平臺,該界面簡單易操作。實現(xiàn)了通過ZigBee技術(shù)來感知環(huán)境情況,進而控制家用設(shè)備的目的,使人們的生活充滿了智慧。
系統(tǒng)由WSN,串口和PC端IoT平臺組成,架構(gòu)如圖1所示。協(xié)調(diào)器下面有2個終端,每個終端連接的外設(shè)有溫濕度傳感器、光敏傳感器、紅外反射傳感器和人體傳感器。終端將傳感器采集到的數(shù)據(jù)經(jīng)過模數(shù)轉(zhuǎn)換后發(fā)送給協(xié)調(diào)器;協(xié)調(diào)器通過串口把接收到的終端數(shù)據(jù)轉(zhuǎn)發(fā)給上位機,最后通過上位機軟件將數(shù)據(jù)展示在用戶界面。
硬件部分主要包括ZigBee節(jié)點的核心板、傳感器等。ZigBee節(jié)點選用TI公司生產(chǎn)的51結(jié)構(gòu)的CC2530F256RHAR芯片作為CPU。傳感器電路原理圖如圖2所示。
圖2 (a)為光敏傳感器的電路原理圖。U2為光敏感單元,是一個純電阻元件。U2端與3.3 V直流電壓相連接,另一端經(jīng)過RC低通濾波電路后與CC2530連接。有光源照射時,U2的電阻大概為1~15 kΩ;無光源照射時,U2的電阻值大約為1~2 MΩ,可根據(jù)電路元件參數(shù)值計算出輸入到CC2530的電壓。
圖2(b)為紅外放射傳感器的電路原理圖。U1為紅外反射元件TLP521-1。1,2腳為發(fā)射端,3,4腳為接收端。發(fā)射端導(dǎo)通發(fā)射紅外光,在受到人體遮擋時反射,接收端接到紅外光信號導(dǎo)通,管腳3輸出高電平,導(dǎo)致三極管Q1導(dǎo)通,OUT端輸出高電平,LED燈亮。當有人體經(jīng)過紅外反射傳感器時,OUT端輸出高電平,小燈亮;無人體經(jīng)過時,OUT端輸出低電平,小燈滅。電路中的R1和R2是限流電阻,保護LED燈不被損壞。簡言之,紅外反射傳感器檢測到有人,電器自動打開;檢測到無人時,電器自動關(guān)閉,是一個真正的節(jié)能專家,用于點燈、防盜報警等設(shè)備。
圖2(c)為溫濕度傳感器DHT11電路連接圖。
軟件設(shè)計主要包括WSN協(xié)議棧應(yīng)用程序編程和上位機IoT平臺開發(fā)兩部分。
WSN系統(tǒng)在IAR Embedded Workbench軟件下開發(fā),借助ZStack-CC2530-2.5.1a協(xié)議?;A(chǔ)編寫應(yīng)用層源碼。為了更快更好地進行系統(tǒng)開發(fā),需要理清協(xié)議棧的運行機理和應(yīng)用層源碼的實現(xiàn)過程。
3.1.1 協(xié)議棧運行機理
ZigBee協(xié)議棧中提供了較多集成函數(shù)供開發(fā)者使用。如果對協(xié)議棧的機理和核心函數(shù)有一個清晰的認識,那么在項目開發(fā)過程中,就可以充分利用協(xié)議棧提供的函數(shù)實現(xiàn)項目功能。協(xié)議棧工作機理如下[3]:
操作系統(tǒng)抽象層(OSAL)的入口為文件ZMain.c中的main函數(shù)。在main函數(shù)里,系統(tǒng)初始化函數(shù)osal_init_system (),啟動系統(tǒng)osal_start_system()函數(shù)。osal_init_system()函數(shù)調(diào)用任務(wù)初始化函數(shù)osalInitTasks(),osalInitTasks()函數(shù)負責給每個任務(wù)分配一個任務(wù)號taskID。osal_start_system()函數(shù)可調(diào)用osal_run_system()函數(shù)。追蹤osal_run_system函數(shù)后,協(xié)議棧中有三個核心變量,分別是保存任務(wù)總個數(shù)的tasksCnt,指向事件表首地址的指針tasksEvent和tasksArr。tasksArr是一個數(shù)組,數(shù)組里的每項都是一個函數(shù)指針,指向事件處理函數(shù)。任務(wù)事件處理函數(shù)添加在tasksArr數(shù)組的末尾,應(yīng)用層初始化函數(shù)添加在osalInitTasks函數(shù)末尾。tasksArr數(shù)組的下標和osalInitTasks函數(shù)里的taskID一一對應(yīng)。osal_run_system函數(shù)的功能是不斷查看事件表,如果有事件發(fā)生,就處理執(zhí)行相應(yīng)的任務(wù)事件處理函數(shù)。
3.1.2 應(yīng)用層程序流程
WSN中有協(xié)調(diào)器和終端節(jié)點,紅外反射傳感器接P0_5,溫濕度傳感器接P0_7,光敏傳感器接P0_1,人體傳感器接P1_1,從這四個端口獲取數(shù)據(jù)。節(jié)點的工作流程如圖3所示。整個工作流程主要分為任務(wù)初始化函數(shù)和任務(wù)事件處理函數(shù)。
節(jié)點上電復(fù)位后,在初始化函數(shù)中定義具有SimpleDescriptionFormat_t簡單描述格式的節(jié)點描述符、串口結(jié)構(gòu)體變量,配置串口參數(shù)、I/O口的方向寄存器、狀態(tài)寄存器和輸入輸出模式寄存器等。協(xié)調(diào)器上電初始化后組建網(wǎng)絡(luò),并以AddrBroadcast廣播模式發(fā)送網(wǎng)絡(luò)信息給終端節(jié)點。當有終端節(jié)點入網(wǎng),并有外來消息時,采用osal_msg_receive函數(shù)接收消息隊列中的消息,并對接收到的消息進行強制類型轉(zhuǎn)換,轉(zhuǎn)換為afIncomingMSGPacket_t類型指針,并對消息頭進行判斷。如果是AF_INCOMING_MSG_CMD無線數(shù)據(jù),則調(diào)用接收消息處理函數(shù)進行處理;如果是網(wǎng)絡(luò)狀態(tài)ZDO_STATE_CHANGE發(fā)生改變,則開啟相應(yīng)的定時器;如果是串口指令CMD_SERIAL_MSG,則按串口指令做相應(yīng)操作。在接收消息處理函數(shù)中,根據(jù)接收消息的clusterId來區(qū)分信號來自哪個終端,并用osal_memcpy()函數(shù)把終端號和數(shù)據(jù)復(fù)制到緩沖區(qū),通過串口函數(shù)HalUARTWrite()把數(shù)據(jù)發(fā)送給PC機。終端節(jié)點主要負責數(shù)據(jù)采集,紅外反射傳感器和人體傳感器可直接采用數(shù)字方式獲取數(shù)據(jù),只需讀取相應(yīng)IO口的狀態(tài)即可得到所需數(shù)據(jù)。光敏傳感器獲取數(shù)據(jù)需要模數(shù)轉(zhuǎn)換器將模擬數(shù)據(jù)轉(zhuǎn)換為數(shù)字數(shù)據(jù),設(shè)置ADC輸入通道ADCCFG = 0x02,使用單次轉(zhuǎn)換,參考電壓為電源電壓3.3 V,對P0_1采樣,配置寄存器ADCCON3= 0x81。DHT11以單總線方式與CC2530進行數(shù)據(jù)傳輸,需傳輸?shù)臄?shù)據(jù)有40位,具體實現(xiàn)流程如圖4所示。
圖3 節(jié)點工作流程
上位機IoT平臺采用C語言在Visual Studio 2017軟件環(huán)境中開發(fā)。為了給使用者提供一個方便易操作的界面,窗口界面添加了ComboBox組合框,Label標簽,PictureBox控件,GroupBox,Button按鈕和TextBox文本框等控件,設(shè)置了控件的相應(yīng)name屬性值和Text屬性值,編寫對應(yīng)控件的回調(diào)函數(shù),就可以把串口中獲取到的數(shù)據(jù)展示在用戶界面中。數(shù)據(jù)從串口中獲取,需要添加System.IO.Ports和System.Data名稱空間。System.IO.Ports中提供了SerialPort類,該類實現(xiàn)了串口資源操作相關(guān)功能。用SerialPort()構(gòu)造函數(shù)初始化一個實例,接著調(diào)用SerialPort方法GetPortNames()獲取當前計算機串口名稱數(shù)組,并配置與協(xié)調(diào)器端相同的串口參數(shù)。利用串口的ReadChar()方法讀取、解析串口數(shù)據(jù),展示在用戶界面。
圖4 溫濕度數(shù)據(jù)采集流程
硬件電路如圖5所示。該電路由1個協(xié)調(diào)器和3個終端節(jié)點組成。協(xié)調(diào)器上電后進行組網(wǎng),并以廣播方式向外發(fā)送消息。終端節(jié)點上電后加入網(wǎng),并以單播方式把采集到的數(shù)據(jù)周期性地上報給協(xié)調(diào)器。PC端打開串口調(diào)試助手,設(shè)置串口相關(guān)參數(shù),如圖6所示,點擊“打開串口”即可收到數(shù)據(jù)。串口接收的數(shù)據(jù)是字符串數(shù)組,需要解析,如串口接收到“T1DR01DG061LW20CS21%”,字符數(shù)組下標0~2分別代表終端節(jié)點號數(shù)據(jù)頭、終端編號和終端節(jié)點號數(shù)據(jù)尾部;數(shù)組下標3~6分別代表人體傳感器數(shù)據(jù)頭、人體傳感器是否檢測到有人、紅外反射傳感器監(jiān)控的電器狀態(tài)和數(shù)據(jù)尾部;數(shù)組下標7~11分別代表光敏傳感器數(shù)據(jù)頭、光照強度和數(shù)據(jù)尾;數(shù)組下標12~15分別代表溫度傳感器數(shù)據(jù)頭、溫度數(shù)據(jù)和數(shù)據(jù)尾;數(shù)組下標16~19分別代表濕度傳感器數(shù)據(jù)頭、濕度數(shù)據(jù)和數(shù)據(jù)尾。經(jīng)數(shù)據(jù)解析后,將所獲取數(shù)據(jù)展示在用戶界面,如圖7所示。
圖5 硬件電路連接
圖6 串口接收數(shù)據(jù)
圖7 用戶界面數(shù)據(jù)顯示
本文在TI公司ZigBee協(xié)議棧工程項目的基礎(chǔ)上,搭建了一個智能家居IoT系統(tǒng)。通過終端設(shè)備采集數(shù)據(jù),并定時發(fā)送數(shù)據(jù)給協(xié)調(diào)器,協(xié)調(diào)器最終將接收到的數(shù)據(jù)轉(zhuǎn)發(fā)給PC機。PC端采用結(jié)合了Java和C++優(yōu)勢的C語言開發(fā)了一個IoT數(shù)據(jù)展示平臺,把遠程終端采集到的數(shù)據(jù)展示在用戶界面,用戶可根據(jù)界面顯示數(shù)據(jù),了解監(jiān)控場景的溫濕度、光照和家電狀態(tài)等情況。該系統(tǒng)具有操作簡單、成本低和功耗低等特點,具有一定的使用價值。
[1]郎為民.大話物聯(lián)網(wǎng)[M].北京:人民郵電出版社,2011.
[2]趙翠芹.應(yīng)用需求牽引“物聯(lián)網(wǎng)導(dǎo)論”課程教學(xué)改革[J].電腦知識與技術(shù),2016,12(17):148-149.
[3]王小強,歐陽駿,黃寧淋.ZigBee無線傳感器網(wǎng)絡(luò)設(shè)計與實現(xiàn)[M].北京:化學(xué)工業(yè)出版社,2015.
[4]穆鵬.ZigBee與藍牙組合通信方式在智能家居系統(tǒng)中的應(yīng)用研究[D]. 南京:南京理工大學(xué),2017.
[5]孫俊杰,張偉,劉洋.一種智能家居系統(tǒng)的實現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2015,5(2):74-75.
[6]張為方,張倫寧,尹子悅,等.物聯(lián)網(wǎng)技術(shù)在智能家居控制系統(tǒng)中的應(yīng)用[J].物聯(lián)網(wǎng)技術(shù),2015,5(8):52-53,56.
[7]魯玉軍,劉振.ZigBee技術(shù)在智能家居系統(tǒng)中的應(yīng)用[J].物聯(lián)網(wǎng)技術(shù),2017,7(4):40-43.
[8]潘子輝,沈蘇彬,吳振宇.一種基于ZigBee的智能家居自動服務(wù)提供方法[J].計算機技術(shù)與發(fā)展,2018 (1):200-204.