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