,,,
(1.咸陽師范學(xué)院 計(jì)算機(jī)學(xué)院,咸陽 712000;2.蘇州大學(xué))
目前,制約物聯(lián)網(wǎng)技術(shù)應(yīng)用發(fā)展的主要原因有:移動(dòng)蜂窩網(wǎng)承載物聯(lián)網(wǎng)應(yīng)用時(shí),不能使物聯(lián)網(wǎng)專網(wǎng)與公眾網(wǎng)絡(luò)相對隔離,由于接入容量的相互影響,單站的接入能力阻礙了物聯(lián)網(wǎng)市場的發(fā)展;4G網(wǎng)絡(luò)投入運(yùn)營后,運(yùn)營商減少了對2G、3G網(wǎng)絡(luò)建設(shè)及優(yōu)化工作,使得這些網(wǎng)絡(luò)質(zhì)量下降,后續(xù)應(yīng)對物聯(lián)網(wǎng)市場發(fā)展就更加困難;現(xiàn)有物聯(lián)網(wǎng)通信模塊依托移動(dòng)核心網(wǎng)進(jìn)行管理,對號(hào)碼資源消耗過大。針對以上問題,運(yùn)營商須盡快開發(fā)與現(xiàn)有移動(dòng)蜂窩網(wǎng)絡(luò)相隔離的低功耗廣域網(wǎng) (Low Power Wide Area,LPWA)[1]專網(wǎng),并實(shí)現(xiàn)LPWA專網(wǎng)的全面覆蓋,改變目前物聯(lián)網(wǎng)應(yīng)用對移動(dòng)蜂窩網(wǎng)絡(luò)的依賴,裁減大量無關(guān)功能,獲得符合目標(biāo)場景的性價(jià)比。
窄帶物聯(lián)網(wǎng)(Narrow Band Internet of Things,簡寫NB-IoT)[2]是物聯(lián)網(wǎng)領(lǐng)域一種新興的技術(shù),又稱低功耗廣域網(wǎng)(Low Power Wide Area)。它工作的上下行頻段為180 kHz,以蜂窩通信技術(shù)為基礎(chǔ),可以在2 G或4 G網(wǎng)絡(luò)上直接部署,降低了開發(fā)成本。
2015年9月3GPP[3]標(biāo)準(zhǔn)組織提出了一種新的窄帶蜂窩通信技術(shù)—NB-IoT。2016年6月16日,國際組織3GPP在韓國釜山正式通過NB-IoT系列標(biāo)準(zhǔn)[4]。目前,NB-IoT技術(shù)協(xié)議核心已經(jīng)制定完成,已初步完成了第一階段測試,這標(biāo)志著NB-IoT標(biāo)準(zhǔn)基本成熟,已初步具備商用條件。世界知名通信企業(yè)華為、愛立信等都宣布支持NB-IoT[5]。在國內(nèi),2017年5月無錫成為全國首個(gè)實(shí)現(xiàn)了NB-IoT全域覆蓋的地級市[6];同年,上海、福州、杭州、廣州4個(gè)城市啟動(dòng)了NB-IoT外場測試[7]。
NB-IoT的主要特點(diǎn)[8]包括:覆蓋范圍廣,比現(xiàn)有網(wǎng)絡(luò)覆蓋面積擴(kuò)大約100倍;容量大,一個(gè)扇區(qū)能夠支持大約10萬個(gè)連接;功耗低,NB-IoT終端采用兩節(jié)AA電池供電待機(jī)可達(dá)10年;成本低,單個(gè)連接模塊不超過3 美元。
NB-IoT應(yīng)用架構(gòu)可以抽象為NB-IoT終端(UE)、NB-IoT信息郵局(MPO)、NB-IoT人機(jī)交互系統(tǒng)(HCI)三個(gè)組成部分。
NB-IoT終端(Ultimate Equipment,UE)是一種以微控制器(MCU)為核心,包含其他電子裝置,具有數(shù)據(jù)采集、控制、運(yùn)算及基于NB-IoT通信等功能,適合于特定用途的軟硬件實(shí)體,如NB-IoT燃?xì)獗?、NB-IoT水表、NB-IoT交通燈、NB-IoT智能農(nóng)業(yè)設(shè)備、NB-IoT機(jī)床控制系統(tǒng)等。
MCU負(fù)責(zé)數(shù)據(jù)采集、處理、分析,干預(yù)執(zhí)行,以及與通信模組的板內(nèi)通信連接,通信模組將MCU的板內(nèi)連接轉(zhuǎn)為NB-IoT通信,以便與遠(yuǎn)程服務(wù)器通信。UE還可以包含短距離無線通信機(jī)構(gòu),以便與其他物聯(lián)網(wǎng)節(jié)點(diǎn)實(shí)現(xiàn)通信。UE內(nèi)含手機(jī)卡(目前使用電子卡,也可以集成到通信模組中),這個(gè)卡通常叫“用戶識(shí)別卡”,即SIM卡,它含有唯一的國際移動(dòng)用戶識(shí)別碼[9]。UE用戶通過這個(gè)號(hào)給信息郵局運(yùn)營商繳費(fèi)。
NB-IoT信息郵局(Mssage Post Office,MPO)是一種基于NB-IoT協(xié)議的信息傳送系統(tǒng)[10],由NB-IoT基站(eNodeB)與NB-IoT管理服務(wù)器組成。它在NB-IoT終端(UE)與NB-IoT人機(jī)交互系統(tǒng)(HCI)之間起信息傳送的作用,由信息運(yùn)行商負(fù)責(zé)建立與維護(hù)。
NB-IoT基站由戶外的鐵塔、NB-IoT基站路由器等構(gòu)成。鐵塔是基站路由器支撐機(jī)構(gòu),作用是把NB-IoT基站路由器高高掛起,提高NB-IoT基站路由器的無線覆蓋范圍。從用戶編程角度來看,編程者可以忽略NB-IoT基站這個(gè)中間過渡。信息郵局(MPO)中的管理服務(wù)器MS(Management Server)可以是一個(gè)實(shí)體服務(wù)器,也可以是分散的云服務(wù)器。對編程者來說,信息郵局就是具有信息偵聽功能的固定IP地址與端口,需要向信息郵局運(yùn)營商或第三方機(jī)構(gòu)申請并付費(fèi)使用。
NB-IoT人機(jī)交互系統(tǒng)(Human Computer Interaction,HCI)是實(shí)現(xiàn)人與NB-IoT信息郵局(NB-IoT管理服務(wù)器)之間信息交互、信息處理與信息服務(wù)的軟硬件系統(tǒng)。目標(biāo)是使人們能夠利用通用計(jì)算機(jī)(PC)、平板電腦、手機(jī)等設(shè)備,通過NB-IoT信息郵局獲取NB-IoT終端UE的數(shù)據(jù),并可實(shí)現(xiàn)對終端UE的控制等功能。從應(yīng)用開發(fā)角度看,人機(jī)交互系統(tǒng)就是與信息郵局的固定IP地址與端口打交道,通過這個(gè)固定IP地址與端口實(shí)現(xiàn)與終端的信息交互。
基于NB-IoT的環(huán)境監(jiān)測系統(tǒng)硬件由兩塊擴(kuò)展板構(gòu)成,擴(kuò)展板A包含了一個(gè)32位ARM Cortex-M0+內(nèi)核的KL36微控制器[11]、GPRS通信模塊[12]、三色燈、SWD寫入器接口、TTL串口(UART0)及兩排對外接口。擴(kuò)展板A實(shí)物圖如圖1所示。
圖1 擴(kuò)展板A實(shí)物圖
(1)KL36微控制器
KL36微控制器不僅具備超低功耗的性能,還包含一套豐富的模擬、通信、定時(shí)和控制外設(shè),適用于消費(fèi)電子、工業(yè)計(jì)量等應(yīng)用。同時(shí),它提供了段式LCD控制器和多個(gè)靈活的低功率模式,包括新的計(jì)算模式,這個(gè)功能通過使外設(shè)采用異步停止模式,降低了動(dòng)態(tài)功耗,而且具有穩(wěn)定可靠的開發(fā)工具和軟件。在本設(shè)計(jì)中,KL36提供了芯片溫度的獲取方法,即通過A/D轉(zhuǎn)換器的26通道讀取數(shù)值然后計(jì)算得到。
(2)模擬信號(hào)輸入電路
模擬信號(hào)一般來自相應(yīng)的傳感器。例如要測量室內(nèi)的溫度,就需要溫度傳感器。但是,一般傳感器將實(shí)際模擬信號(hào)轉(zhuǎn)換成的電信號(hào)都比較弱,微控制器無法直接獲得該信號(hào),需要將其放大,然后經(jīng)過A/D轉(zhuǎn)換變?yōu)閿?shù)字信號(hào)進(jìn)行處理。目前許多微控制器內(nèi)部包含A/D轉(zhuǎn)換模塊,實(shí)際應(yīng)用時(shí)也可根據(jù)需要外接A/D轉(zhuǎn)換芯片。
圖2 A/D采樣電路
在本設(shè)計(jì)中,將光敏(熱敏)電阻接入圖2的采樣電路中,光敏(熱敏)電阻與一個(gè)特定阻值的電阻串聯(lián),由于光敏(熱敏)電阻會(huì)隨著外界環(huán)境的變化而改變,因此A/D采樣點(diǎn)的電壓也會(huì)隨之改變,A/D采樣點(diǎn)的電壓為:
(1)
式(1)中x是一個(gè)特定阻值,根據(jù)實(shí)際光敏或熱敏電阻的不同而加以選定。以熱敏電阻為例,假設(shè)熱敏電阻阻值增大,采樣點(diǎn)的電壓就會(huì)減小,A/D值也相應(yīng)減??;反之,熱敏電阻阻值減小,采樣點(diǎn)的電壓就會(huì)增大,A/D值也相應(yīng)增大。所以采用這種方法,MCU就會(huì)獲知外界溫度的變化。
A/D轉(zhuǎn)換驅(qū)動(dòng)代碼如下:
① adc_init(MUXSEL_A, AD_SINGLE,16,SAMPLE32);
//初始化A通道
② advalue=adc_read(26);
//讀取通道26,每次采集32次硬件濾波
③ floatVTemp, temp
VTemp=(advalue * 3300)>>16;
temp=25-(VTemp-719)/1.715;
//將讀取到的A/D值轉(zhuǎn)換成溫度
④ printf(“%f”, temp);
//輸出的溫度
(3)擴(kuò)展板提供的接口
擴(kuò)展板A共有60個(gè)對外接口,其中包括4個(gè)5 V接口、2個(gè)3.3 V接口、8個(gè)GND接口和46個(gè)GPIO接口[13](見圖1)。這些GPIO接口與KL36引腳直接相連。其中支持LCD的引腳有30個(gè),支持16位A/D轉(zhuǎn)換的引腳有19個(gè)(其中有3個(gè)支持差分輸入),支持TSI功能的引腳有16個(gè),支持UART[14](TX、RX)的有8對,支持TPM的引腳有36個(gè),支持SPI輸入輸出的引腳有10個(gè)。
擴(kuò)展板B包含3排插針、LCD顯示屏、TSI觸摸片、光敏電阻、串口接口和SWD寫入口。顯示屏可顯示檢測的數(shù)據(jù),TSI觸摸片被觸摸時(shí)會(huì)觸發(fā)TSI響應(yīng)事件,實(shí)現(xiàn)用戶與硬件的交互。硬件通過TTL-USB串口[15]線與PC機(jī)相連,實(shí)現(xiàn)硬件與PC機(jī)的通信,SWD用于將程序?qū)戇M(jìn)硬件。
(1)偵測軟件設(shè)計(jì)的基本思想
偵聽程序是人機(jī)交互系統(tǒng)中的一部分,是信息郵局與上層人機(jī)交互軟件之間的通信媒介。根據(jù)軟件分層的思想,將偵聽程序分為網(wǎng)絡(luò)通信層、數(shù)據(jù)處理層和應(yīng)用層來進(jìn)行設(shè)計(jì)。
網(wǎng)絡(luò)通信層主要負(fù)責(zé)接收上行數(shù)據(jù)和發(fā)送下行數(shù)據(jù)。該層負(fù)責(zé)偵聽本機(jī)端口,對接收到的上行數(shù)據(jù)包進(jìn)行解析并校驗(yàn),將正確的數(shù)據(jù)包存入接收數(shù)據(jù)隊(duì)列,將出錯(cuò)的數(shù)據(jù)包存入錯(cuò)誤接收數(shù)據(jù)隊(duì)列,并觸發(fā)接收數(shù)據(jù)事件。同時(shí),該層將要發(fā)送的數(shù)據(jù)封裝成幀并根據(jù)傳送參數(shù)發(fā)送給指定設(shè)備。
數(shù)據(jù)處理層定義了幀信息類,即描述幀數(shù)據(jù)內(nèi)包含信息的類,并提供實(shí)現(xiàn)幀數(shù)據(jù)與幀信息類的對象之間相互轉(zhuǎn)換的方法。
應(yīng)用層負(fù)責(zé)與上層交互軟件的通信,根據(jù)不同的應(yīng)用場景對應(yīng)的不同解決方案來對信息作進(jìn)一步處理。數(shù)據(jù)處理層與應(yīng)用層都與傳輸?shù)木唧w內(nèi)容有關(guān),與傳輸方式無關(guān)。
(2)偵測軟件的設(shè)計(jì)
根據(jù)以上思想,設(shè)計(jì)的偵測程序結(jié)構(gòu)框架如圖3所示,主要的文件夾有4個(gè),分別是01_Doc、02_NetworkComm、03_DataProc及04_Application。其中02_NetworkComm、03_DataProc和04_Application是偵聽程序框架的主要文件夾,分別對應(yīng)網(wǎng)絡(luò)通信層、數(shù)據(jù)處理層以及應(yīng)用層。
圖3 偵測程序結(jié)構(gòu)框架
(3)用戶服務(wù)器程序設(shè)計(jì)
用戶服務(wù)器的目的是接收終端通過轉(zhuǎn)發(fā)服務(wù)器發(fā)來的數(shù)據(jù)。由于用戶服務(wù)器的IP地址不固定,所以它必須在開始監(jiān)聽的時(shí)候主動(dòng)連接管理服務(wù)器,并注冊將要監(jiān)聽的IMSI號(hào),該IMSI號(hào)和管理服務(wù)器的IP地址和端口號(hào)可以在“App.config”中進(jìn)行配置。
① 信息發(fā)送核心代碼(發(fā)送流程如圖4所示):
//UE模塊供電
LCDShowRunMsg('H',1,1);
//LCD提示“H1-1”,表示給UE供電
gpio_set(PTE_NUM|22,1); //UE模塊供電
Delay_ms(3000); //等待模塊開機(jī),3 s
//UE模塊初始化
LCDShowRunMsg('H',1,2);
//LCD提示“H1-2”,表示開始初始化
mflag=uecom_init(mRetdata,data.serverIP,data.serverPort);
//根據(jù)初始化是否成功決定是否發(fā)送數(shù)據(jù)
if(mflag) goto main_loop1; //初始化失敗,LCD顯示提示
//初始化成功
LCDShowRunMsg('H',1,3);
//LCD提示“H1-3”,表示UE初始化成功
getFrameData();
//動(dòng)態(tài)獲取當(dāng)前實(shí)時(shí)數(shù)據(jù)
//UE模塊發(fā)送數(shù)據(jù)
LCDShowRunMsg('H',1,4); //LCD提示“H1-4”,表示組幀提示
frameEncode(fd.data,264,mframe,&mframeLen); //組幀操作
LCDShowRunMsg('H',1,5); //LCD提示“H1-5”,表示開始發(fā)送
mflag = uecom_send(mframeLen,mframe);
if(mflag) goto main_loop2; //數(shù)據(jù)發(fā)送失敗,LCD顯示提示
LCDShowRunMsg('H',1,6);//LCD提示“H1-6”,表示發(fā)送成功
② 信息接收核心代碼
// UE模塊接收數(shù)據(jù)
LCDShowRunMsg('H',1,7);//LCD提示“H1-7”,表示發(fā)送成功
mflag = uecom_recv(&mframeLen,mframe);
if(mflag) goto main_loop3; //數(shù)據(jù)接收失敗,LCD顯示提示
LCDShowRunMsg('H',1,8);
//LCD提示“H1-8”,表示接收數(shù)據(jù)成功
frameDecode(mframe,fd.data,&mlen);
//解析幀數(shù)據(jù),信息寫入結(jié)構(gòu)體
LCDShowRunMsg('H',1,9);
//LCD提示“H1-9”,表示數(shù)據(jù)解析成功
圖4 數(shù)據(jù)發(fā)送基本流程
用戶服務(wù)器是基于C#程序?qū)崿F(xiàn)的,使用封裝好的UECom類可以很快實(shí)現(xiàn)需要的功能。監(jiān)聽端口可通過UECom類的UECom_Listen方法實(shí)現(xiàn),注冊IMSI可通過向管理服務(wù)器發(fā)送空數(shù)據(jù)實(shí)現(xiàn)。接收幀可通過UECom的接收數(shù)據(jù)事件實(shí)現(xiàn),接收到的數(shù)據(jù)是去掉了幀頭幀尾、校驗(yàn)碼、IMSI號(hào)和幀長的有效數(shù)據(jù)。然后,按照定義的有效數(shù)據(jù)幀格式對幀進(jìn)行解析即可。通過使用封裝好的類,可以大大降低編程的難度。
(1)發(fā)送數(shù)據(jù)(上行數(shù)據(jù))測試
① 通過計(jì)算機(jī)、充電寶、手機(jī)充電器等提供的USB接口給監(jiān)測硬件供電;紅燈亮,LCD顯示芯片溫度“H0-xx.x”(見圖5(a)),時(shí)間約10 s。接著LCD顯示UE的15位SIM卡號(hào)(IMSI號(hào)),本次測試SIM號(hào)為:460040436505436(見圖5(b)、圖5(c))。由于LCD屏的尺寸限制,SIM號(hào)采用分兩屏顯示(間隔5 s),它將作為設(shè)備的唯一標(biāo)識(shí)。
圖5 上行數(shù)據(jù)測試
② 進(jìn)入主循環(huán),紅燈每秒閃爍一次,LCD顯示時(shí)間“hh.mm.ss”,每秒更新一次。在主循環(huán)運(yùn)行過程中,若按下觸摸按鍵(TSI),則LCD顯示“E1-x”,x為TSI觸摸次數(shù)。TSI每觸摸3次或時(shí)間每隔120 s時(shí),監(jiān)測系統(tǒng)通過信息郵局MPO向人機(jī)交互系統(tǒng)HCI發(fā)送數(shù)據(jù),LCD顯示“H1-1007”表示數(shù)據(jù)發(fā)送成功(見圖5(d))。若顯示“F.”則失敗,可能是基站信號(hào)較弱。
③ 在數(shù)據(jù)發(fā)送過程中,若能成功連接基站,則在LCD上顯示“H1-1003”與“H1-1004”之間會(huì)顯示提示“H1-xx”,其中xx為當(dāng)前信號(hào)強(qiáng)度(百分比表示),信號(hào)強(qiáng)度在70以上時(shí),通信較為流暢。
(2)下行數(shù)據(jù)測試
啟動(dòng)PC端程序,用戶服務(wù)器軟件將接收由基站發(fā)來的數(shù)據(jù),并完成對數(shù)據(jù)的解析,在用戶程序端可以查看光線強(qiáng)度、溫度、時(shí)間、信號(hào)強(qiáng)度等信息(見圖6)。對接收到的上行數(shù)據(jù)可做一定的修改,單擊回發(fā)按鈕,可將修改后的數(shù)據(jù)回發(fā)給基站,進(jìn)而回傳給監(jiān)測系統(tǒng)(見圖7),回發(fā)后若LCD顯示“H1-1009”,表示下行數(shù)據(jù)成功。
圖6 接收并解析數(shù)據(jù)
圖7 回發(fā)數(shù)據(jù)成功