夏素霞,卜祥軒,顧聞浩
(1.北京郵電大學(xué)世紀(jì)學(xué)院 計(jì)算機(jī)科學(xué)與技術(shù)系,北京 102101;2. 北京郵電大學(xué)世紀(jì)學(xué)院 通信工程系,北京 102101)
物聯(lián)網(wǎng)專業(yè)是一門交叉學(xué)科,涉及計(jì)算機(jī)、通信技術(shù)、電子技術(shù)、測控技術(shù)等專業(yè)基礎(chǔ)知識以及管理學(xué)、軟件開發(fā)等多方面知識。截至2019年底,我國開設(shè)物聯(lián)網(wǎng)工程專業(yè)的院校共有514所,其中包括南開大學(xué)、東南大學(xué)、北京郵電大學(xué)等傳統(tǒng)的985/211院校,但95%以上都是地方本科院校和民辦院校等應(yīng)用型高校。各校都專門為這個新興專業(yè)制定了相應(yīng)的人才培養(yǎng)方案。以地方應(yīng)用型院?!本┦突W(xué)院2019年新增設(shè)的物聯(lián)網(wǎng)工程專業(yè)為例,其所搭建的物聯(lián)網(wǎng)專業(yè)智能家居實(shí)驗(yàn)室配有電視、電冰箱、風(fēng)扇、開關(guān)、調(diào)光燈、指紋鎖、RFID節(jié)點(diǎn)、傳感器節(jié)點(diǎn)、控制節(jié)點(diǎn)、紅外發(fā)射接收節(jié)點(diǎn)、協(xié)調(diào)器、網(wǎng)關(guān)、路由器、網(wǎng)絡(luò)攝像機(jī)、PC機(jī)、ipad;還搭建了物聯(lián)網(wǎng)技術(shù)及應(yīng)用實(shí)驗(yàn)室,其中設(shè)有以Cortex A8網(wǎng)關(guān)為核心的異構(gòu)網(wǎng)絡(luò)系統(tǒng)、多種傳感器模型和無線組網(wǎng)模式,可實(shí)現(xiàn)多種聯(lián)網(wǎng)架構(gòu)。實(shí)驗(yàn)系統(tǒng)中包含了感知層、傳輸層和應(yīng)用層的能力訓(xùn)練,但各個知識點(diǎn)系統(tǒng)都是設(shè)置好的,更多的是驗(yàn)證實(shí)驗(yàn),且缺乏綜合感知層、傳輸層和應(yīng)用層的能力訓(xùn)練項(xiàng)目。羅方燕等闡述了實(shí)踐系統(tǒng)的設(shè)置情況,提出在第五學(xué)期開設(shè)“物聯(lián)網(wǎng)綜合項(xiàng)目”,主要是將前面所學(xué)的內(nèi)容進(jìn)行綜合應(yīng)用,實(shí)現(xiàn)簡易的物聯(lián)網(wǎng)系統(tǒng),可以進(jìn)行數(shù)據(jù)采集、處理、存儲和瀏覽等;還介紹了學(xué)校相應(yīng)的實(shí)驗(yàn)系統(tǒng),但未涉及綜合實(shí)訓(xùn)系統(tǒng)。其他學(xué)者在對物聯(lián)網(wǎng)專業(yè)實(shí)踐教學(xué)體系的研究中,提出物聯(lián)網(wǎng)專業(yè)屬于工程類專業(yè),實(shí)踐教學(xué)體系的設(shè)計(jì)要立足于培養(yǎng)學(xué)生的工程能力和工程素養(yǎng)。在現(xiàn)有的智能家居等應(yīng)用中,一般采用直連模式,聯(lián)入云端服務(wù)器的雙向應(yīng)用不多。本系統(tǒng)的架構(gòu)是基于云端應(yīng)用和數(shù)據(jù)采集的物聯(lián)網(wǎng)專業(yè)實(shí)訓(xùn)案例,可以更好地幫助學(xué)生掌握感知層、傳輸層和應(yīng)用層開發(fā)的能力。
系統(tǒng)的硬件部分,也就是水表的主體部件,相當(dāng)于物聯(lián)網(wǎng)中的感知層,如圖1所示。主要設(shè)備有定時(shí)器、流速傳感器、繼電器、電磁閥、液晶顯示屏、功能鍵盤、微控制器和通信芯片。主要完成水流量測定、設(shè)備防拆卸保護(hù)、水流開關(guān)控制、流量數(shù)據(jù)存儲以及與上位管理機(jī)的通信。設(shè)備防拆卸保護(hù)主要為了防止用戶惡意拆卸和改動水表,如水表被拆卸則會切斷電源,通過改變EPROM中的存儲標(biāo)志,使得被拆卸的水表通過外加電源也無法實(shí)現(xiàn)程序運(yùn)行,保護(hù)了智能水表的數(shù)據(jù)安全;硬件系統(tǒng)采用有源系統(tǒng),有源模塊采用電池、電源雙供電,如遇突發(fā)停電等情況也能照常供水;流量數(shù)據(jù)存儲在EPROM存儲區(qū),如遇到緊急斷網(wǎng)等情況,單片機(jī)將水流數(shù)據(jù)存儲在EPROM中,網(wǎng)絡(luò)恢復(fù)后將數(shù)據(jù)發(fā)送給管理機(jī)。如果長時(shí)間斷網(wǎng),可能會導(dǎo)致EPROM中存儲數(shù)據(jù)溢出,系統(tǒng)通斷模塊將強(qiáng)行關(guān)閉水表,等待網(wǎng)絡(luò)恢復(fù)后,彈出數(shù)據(jù)完成同步后,再通過通斷模塊啟動水表正常開啟功能。
圖1 硬件實(shí)物和電路結(jié)構(gòu)圖
系統(tǒng)的傳輸層共兩層:第一層為單片機(jī)(下稱“終端”)與上位管理機(jī)(下稱“管理機(jī)”)的局域網(wǎng)通信,也稱為感知層的通信;第二層是管理機(jī)與應(yīng)用服務(wù)器的互聯(lián)網(wǎng)通信。遠(yuǎn)程應(yīng)用服務(wù)器通過與公網(wǎng)連接管理機(jī),與管理機(jī)同步數(shù)據(jù),包括用戶的水費(fèi)和用水量等信息。感知層通信采用ESP8266模塊通過WiFi鏈接AP,再由AP與管理機(jī)通信。感知層通信為主從式通信,管理機(jī)向終端發(fā)送指令,終端執(zhí)行。如需要終端上報(bào)用水量數(shù)據(jù),管理機(jī)會向單片機(jī)發(fā)送抄表指令,終端收到后會將數(shù)據(jù)上報(bào)至管理機(jī)。如需更新數(shù)據(jù)、控制閥門通斷狀態(tài)等,管理機(jī)會發(fā)送相應(yīng)的指令報(bào)文,終端收到后會執(zhí)行。
在終端開發(fā)過程中,用Arduino開發(fā)工具對ESP8266進(jìn)行編程,通過程序預(yù)設(shè)ESP8266需要連接的WiFi以及管理機(jī)的IP和端口號;并對其功能進(jìn)行配置,使得ESP8266上電后能自動連接服務(wù)器,如果連接服務(wù)器失敗則通過串口向單片機(jī)報(bào)告,如果連接成功則等待服務(wù)器發(fā)送數(shù)據(jù)和指令后將從串口收到的單片機(jī)內(nèi)容封裝傳送給單片機(jī)。
管理機(jī)的數(shù)據(jù)信息經(jīng)過整理后,形成用戶用水?dāng)?shù)據(jù)上傳到應(yīng)用服務(wù)器,存儲在數(shù)據(jù)庫中,系統(tǒng)的應(yīng)用層將讀取數(shù)據(jù)庫中的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)處理、存儲、分析等功能的軟件平臺。本系統(tǒng)應(yīng)用層利用Flutter開發(fā)工具實(shí)現(xiàn)移動端數(shù)據(jù)處理、存儲、分析、查詢等功能的APP應(yīng)用程序。通過APP用戶可以實(shí)時(shí)查詢自己的用水信息、階梯水量、繳費(fèi)信息等;自來水公司可以對用水?dāng)?shù)據(jù)進(jìn)行分析、對欠費(fèi)用戶進(jìn)行信息提醒等。Flutter開發(fā)工具具有跨平臺的特性,開發(fā)的APP工具可以融合IOS和安卓移動系統(tǒng)。應(yīng)用層的APP設(shè)計(jì)可以實(shí)現(xiàn)在互聯(lián)網(wǎng)端查詢、修改、展示感知層數(shù)據(jù),是物聯(lián)網(wǎng)技術(shù)中數(shù)據(jù)應(yīng)用的重要內(nèi)容。
高效且穩(wěn)定的硬件設(shè)計(jì)是保證水表系統(tǒng)可靠性的重要前提,本設(shè)計(jì)主要包括圍繞微控制器的主控設(shè)計(jì)和圍繞霍爾傳感器的探頭設(shè)計(jì)。
控制系統(tǒng)采用的STC15F2K60S2系列單片機(jī)是單時(shí)鐘/機(jī)器周期的單片機(jī),是高速、高可靠、低功耗、超強(qiáng)抗干擾的新一代8051單片機(jī);采用STC第八代加密技術(shù),無法解密;指令代碼完全兼容傳統(tǒng)8051,但速度快8~12倍;3路CCP/PWM/PCA、8路高速10位A/D轉(zhuǎn)換(30萬次/秒),內(nèi)置2 KB大容量SRAM、2組超高速異步串行通信端口UART1/UART2、1組高速同步串行通信端口SPI,針對多串行口通信、電機(jī)控制、強(qiáng)干擾場合。
微控制器最小系統(tǒng)由微控制器、電源電路和存儲構(gòu)成。STC15F2K60S2的工作電壓為5 V,為滿足系統(tǒng)可依靠內(nèi)部緊湊電源獨(dú)立運(yùn)行的需求,設(shè)計(jì)了可通過二極管自動選擇的雙供電方案,分別為由4節(jié)可充電電池供電和由12 V圓口接口向可充電電池供電的降壓供電方案。7 V電源接入時(shí)二極管截止,電池不會為設(shè)備供電,同時(shí)電源為電池反向充電。
單片機(jī)及其他芯片的供電引腳接5 V電源,接地引腳接電源負(fù)極。單片機(jī)P10、P11口設(shè)置為串口,交叉連接ESP8266芯片的串口,以此實(shí)現(xiàn)單片機(jī)與ESP8266芯片通信。單片機(jī)P2口連接顯示屏幕數(shù)據(jù)口,實(shí)現(xiàn)單片機(jī)與屏幕的數(shù)據(jù)通信,同時(shí)P33、P34、P35分別連接顯示屏幕的E(片選)、RW(讀寫模式切換)、RS(命令數(shù)據(jù)),控制單片機(jī)與顯示屏幕的通信過程。P32連接霍爾傳感器,用于檢測水流量。P17管腳用于控制電磁閥門通斷。P0口用于接外殼,實(shí)現(xiàn)防拆卸功能。主板電路如圖2所示。
圖2 主板電路
水流采集模塊包含渦輪和霍爾傳感器,水管中流過一定量的水,渦輪就會帶動霍爾傳感器軸轉(zhuǎn)動一周,霍爾傳感器會輸出一個正弦波信號,經(jīng)過比較器形成一組方波。渦輪設(shè)計(jì)精密時(shí)方波數(shù)量與用水量成正比,更能精準(zhǔn)計(jì)算水流量。
水流通斷模塊采用繼電器控制電磁閥門設(shè)計(jì),電磁閥門由閥座、電磁線圈和關(guān)閉件組成。電源關(guān)閉時(shí)關(guān)閉件插入閥座中,水流截止;電源打開時(shí),電流通過電磁線圈產(chǎn)生電磁力,使關(guān)閉件從閥座中脫離,則水流開啟。由于電磁閥門開啟時(shí)需要較強(qiáng)的吸力,采用12 V電源為開啟時(shí)的電磁閥門供電,由被單片機(jī)控制的繼電器控制12 V電源通斷。單片機(jī)可以控制繼電器開合,繼電器可控制電磁閥開關(guān),電磁閥可控制水流通斷。因此本模塊可使單片機(jī)控制水流通斷。
顯示模塊采用LCD1602,它由字符型液晶顯示屏(LCD)、控制驅(qū)動主電路HD44780和擴(kuò)展驅(qū)動電路HD44100以及少量電阻、電容元件和結(jié)構(gòu)件等裝配在PCB板上而組成。顯示容量為16×2個字符,字符尺寸為2.95 mm×4.35 mm(寬×高),它能夠顯示英文字母、阿拉 伯?dāng)?shù)字,滿足日常用戶讀取水費(fèi)需要。
系統(tǒng)按鍵模塊按照微控制器I/O口下降沿中斷觸發(fā)模式設(shè)計(jì),共設(shè)有3個獨(dú)立功能按鍵供用戶使用。功能分別為開關(guān)水流、切換顯示費(fèi)用/水量、切換顯示月用水量/周用水量。
系統(tǒng)EPROM采用片內(nèi)EPROM,用于存儲用戶用水量以及與管理機(jī)通信的秘鑰。用戶無法提取單片機(jī)與管理機(jī)的通信秘鑰,單片機(jī)破解難度大,安全系數(shù)較高。
系統(tǒng)軟件使用 Keil-MDK集成開發(fā)環(huán)境編寫。該環(huán)境支持軟件的編寫、編譯、鏈接和調(diào)試,操作簡單且功能強(qiáng)大。系統(tǒng)軟件功能以底層相互獨(dú)立的功能程序?yàn)榛A(chǔ)。各功能程序分別編寫完成后通過調(diào)用構(gòu)建完整的抄表系統(tǒng)。系統(tǒng)軟件各基礎(chǔ)功能見表1所列。
表1 系統(tǒng)軟件各基礎(chǔ)功能
所有驅(qū)動程序均以硬件原理或通信協(xié)議為基礎(chǔ)、以系統(tǒng)最優(yōu)調(diào)用該模塊為原則進(jìn)行編寫。以水流采集程序?yàn)槔?,水流傳感器通過霍爾傳感器將水流量轉(zhuǎn)化為方波,單片機(jī)則通過外部下降沿中斷讀取方波數(shù)量,以此計(jì)量出用水量。在防拆卸報(bào)警程序中,設(shè)備外殼的暗線首尾通過杜邦線連接單片機(jī)的管腳,一個管腳發(fā)送偽隨機(jī)數(shù),另一個管腳接收,如接收到的數(shù)值與發(fā)送的不符,則程序可判定為外殼被非法用戶強(qiáng)制拆卸,向主程序返回?cái)?shù)值(被拆卸代碼)。
本程序采用中斷完成多線程運(yùn)行程序,圖3為主線程流程。主線程中的核心功能主要包括外包裝完好測試、單片機(jī)水流采集和緩存、管理機(jī)與單片機(jī)的數(shù)據(jù)交換。上述核心功能分別通過以下三個線程完成。
圖3 主線程流程
(1)判斷設(shè)備外包裝線程
本線程通過定時(shí)器中斷完成,功能為判斷外包裝是否完好。如發(fā)生非法改動,則會進(jìn)行設(shè)備禁用操作,清除EPROM中的通信密鑰,并且強(qiáng)制宕機(jī)。系統(tǒng)通過單片機(jī)P0口的低四位,產(chǎn)生偽隨機(jī)數(shù),若被拆卸,高四位無法收到低四位發(fā)送的偽隨機(jī)數(shù),則判斷外殼被破壞。此時(shí)單片機(jī)調(diào)用故障函數(shù),讓單片機(jī)進(jìn)入故障狀態(tài)。
(2)水流采集線程
本線程通過外部中斷完成。單片機(jī)上電初始化后,創(chuàng)建一個長整數(shù)型變量用于計(jì)量水流量,在下降沿中斷程序中該變量自加一,變量值存入EPROM后,該變量清零。
(3)管理機(jī)數(shù)據(jù)獲取線程
本線程通過串口中斷完成。ESP8266收到服務(wù)器發(fā)送的信息后,會通過串口將命令以字符串的形式發(fā)送給單片機(jī)。單片機(jī)串口收到每一個字符后,會觸發(fā)串口中斷;單片機(jī)通過串口將數(shù)據(jù)發(fā)送給ESP8266,再由ESP8266通過網(wǎng)絡(luò)將數(shù)據(jù)發(fā)送給服務(wù)器。WiFi芯片將上位管理機(jī)發(fā)送的指令及數(shù)據(jù)解密,并將解密指令轉(zhuǎn)碼后發(fā)送給單片機(jī),指令分為長指令和短指令,短指令為1字節(jié),長指令為3~20字節(jié)。單片機(jī)接收到1字節(jié)數(shù)據(jù)后觸發(fā)串口中斷,若為短指令,立即觸發(fā)指令對應(yīng)函數(shù);若為長指令,中斷程序?qū)⒔邮盏降闹噶畲鎯υ诮邮贞?duì)列中,收到結(jié)束標(biāo)志即處理隊(duì)列中信息,如收到更新數(shù)據(jù)指令,單片機(jī)將根據(jù)指令中的信息更新用戶的日用水量、周用水量,并將新數(shù)據(jù)顯示在屏幕上。
本系統(tǒng)涉及水表數(shù)據(jù)與上位管理機(jī)的內(nèi)網(wǎng)通信及管理機(jī)與Web應(yīng)用服務(wù)器的互聯(lián)網(wǎng)通信??衫肗B-IoT模塊將數(shù)據(jù)發(fā)送到移動NB-IoT基站,并將水表數(shù)據(jù)通過NB-IoT模塊上傳到Web服務(wù)器實(shí)現(xiàn)智能水表與服務(wù)器雙向通信。這種連接方式實(shí)驗(yàn)成本較高。采用雙網(wǎng)卡設(shè)置,即上位管理機(jī)在通信過程中起著連接內(nèi)外網(wǎng)的網(wǎng)關(guān)作用,因此上位管理機(jī)需要安裝兩塊網(wǎng)卡。管理機(jī)在內(nèi)網(wǎng)中發(fā)揮Socket服務(wù)器的作用,在廣域網(wǎng)相當(dāng)于Web應(yīng)用服務(wù)器終端設(shè)備。圖4為通信結(jié)構(gòu)。
圖4 通信結(jié)構(gòu)
內(nèi)網(wǎng)段可以按小組分配網(wǎng)段和管理機(jī),內(nèi)網(wǎng)段ESP8266進(jìn)行單片機(jī)和管理機(jī)的雙向通信。采用STA模式通過路由器連接局域網(wǎng),通過設(shè)置使ESP8266上電后連接無線路由器,單片機(jī)通過串口連接ESP8266,ESP8266模塊內(nèi)編寫程序處理與單片機(jī)相連的串口發(fā)來的數(shù)據(jù),通過TCP協(xié)議將數(shù)據(jù)發(fā)送給網(wǎng)絡(luò)上的管理機(jī),并將從管理機(jī)接收到的數(shù)據(jù)通過串口發(fā)送給單片機(jī)。
系統(tǒng)主要由單片機(jī)、管理機(jī)構(gòu)成,設(shè)備需要連接到同一個管理機(jī)的Socket服務(wù)器,由Socket服務(wù)器轉(zhuǎn)發(fā)數(shù)據(jù),以實(shí)現(xiàn)兩個設(shè)備間的通信。單片機(jī)連接網(wǎng)絡(luò)進(jìn)行通信,是通過將ESP8266模塊與路由器WiFi或者其他設(shè)備的WiFi進(jìn)行連接來實(shí)現(xiàn)的。將管理機(jī)作為Socket服務(wù)器,單片機(jī)的ESP8266模塊作為客戶端連接到Socket服務(wù)器,即連接到服務(wù)器的IP地址和端口號,讓兩個設(shè)備連接到同一個網(wǎng)絡(luò)中。分別編寫客戶端通信程序下載到ESP8266模塊與管理機(jī)Socket服務(wù)端通信程序?qū)崿F(xiàn)數(shù)據(jù)透傳。
本系統(tǒng)設(shè)置單片機(jī)的ESP8266模塊作為客戶端。開發(fā)環(huán)境為ESP8266開發(fā)板、Win7和Arduino。在電腦中下載Arduino開發(fā)工具并且配置ESP8266的開發(fā)環(huán)境以及串口轉(zhuǎn)換器的驅(qū)動。
根據(jù)現(xiàn)實(shí)通信環(huán)境配置WiFi的SSID和password、服務(wù)器的IP和端口;ESP8266上電后進(jìn)行初始化,嘗試連接WiFi和服務(wù)器。連接成功后,ESP8266周期性循環(huán)檢測網(wǎng)絡(luò)狀態(tài),如發(fā)生異常,通過串口向單片機(jī)報(bào)告,并周期性掃描串口與網(wǎng)絡(luò)報(bào)文。如果從服務(wù)器收到TCP報(bào)文,則將數(shù)據(jù)解封裝后通過串口發(fā)送給單片機(jī);如果從串口接收到數(shù)據(jù),則將其封裝為TCP報(bào)文發(fā)送給管理機(jī)。
服務(wù)器端的通信程序安裝在管理機(jī)上。本系統(tǒng)采用Python開發(fā)工具。服務(wù)器開啟線程后先完成數(shù)據(jù)庫連接;通過Socket開啟TCP端口;等待客戶端連接后,服務(wù)器周期性向客戶端發(fā)送抄表指令,并接收客戶端上報(bào)的報(bào)文,將報(bào)文解封裝后寫入數(shù)據(jù)庫中;讀出數(shù)據(jù)庫中需要與客戶端同步的數(shù)據(jù),并通過報(bào)文的形式下發(fā)給客戶端,如周用水量、月用水量等。圖5為客戶端與服務(wù)器端的通信流程。
圖5 客戶端與服務(wù)器端的通信流程
本設(shè)計(jì)在管理機(jī)上設(shè)置了Tomcat作為移動端APP的后端Web服務(wù)器。由于目前移動端操作系統(tǒng)有IOS和Android兩種,基于一種操作系統(tǒng)開發(fā)的APP無法在另一個系統(tǒng)的移動端使用。本系統(tǒng)采用Flutter工具開發(fā)的基于移動端的APP應(yīng)用程序,可以融合Android和IOS系統(tǒng),克服了目前市場上的APP須分平臺開發(fā)的弊端。
APP應(yīng)用程序包含了水流量折線圖展示以及實(shí)時(shí)水流量數(shù)據(jù)、周用水量數(shù)據(jù)、月用水量數(shù)據(jù)、周用水費(fèi)數(shù)據(jù)、月用水費(fèi)數(shù)據(jù)、水流量測量時(shí)間數(shù)據(jù)等信息的查詢功能;也可以對水表進(jìn)行開關(guān)操作。以實(shí)時(shí)水流量監(jiān)測為例,在啟動傳感器進(jìn)行水流量數(shù)據(jù)采集的同時(shí),數(shù)據(jù)也會顯示在實(shí)時(shí)水流量折線圖中。點(diǎn)擊水流量詳情可以看到每秒鐘更新的水流量數(shù)據(jù),業(yè)主可以根據(jù)此功能監(jiān)測自己的水表情況。實(shí)時(shí)水流量監(jiān)測實(shí)現(xiàn)界面如圖6所示。
圖6 實(shí)時(shí)水流量監(jiān)測界面
本文設(shè)計(jì)了基于智能水表的物聯(lián)網(wǎng)系統(tǒng)綜合訓(xùn)練的自制教學(xué)設(shè)備,在學(xué)院創(chuàng)新團(tuán)隊(duì)訓(xùn)練中發(fā)揮了很大的作用,并得到改進(jìn),獲得了北京市“互聯(lián)網(wǎng)+”創(chuàng)新創(chuàng)業(yè)大賽三等獎。在項(xiàng)目開發(fā)過程中,可以將項(xiàng)目先分解為多個子系統(tǒng),訓(xùn)練學(xué)生電路設(shè)計(jì)、單片機(jī)控制編程、網(wǎng)絡(luò)設(shè)計(jì)和數(shù)據(jù)庫設(shè)計(jì)等能力,最后進(jìn)行系統(tǒng)綜合訓(xùn)練。這樣可以更有效地使學(xué)生理解和掌握物聯(lián)網(wǎng)系統(tǒng)三層結(jié)構(gòu)中的核心要素,達(dá)到綜合訓(xùn)練學(xué)生專業(yè)能力的目標(biāo)。