,,,
(1.咸陽師范學院 計算機學院,咸陽 712000;2.蘇州大學)
目前,制約物聯網技術應用發(fā)展的主要原因有:移動蜂窩網承載物聯網應用時,不能使物聯網專網與公眾網絡相對隔離,由于接入容量的相互影響,單站的接入能力阻礙了物聯網市場的發(fā)展;4G網絡投入運營后,運營商減少了對2G、3G網絡建設及優(yōu)化工作,使得這些網絡質量下降,后續(xù)應對物聯網市場發(fā)展就更加困難;現有物聯網通信模塊依托移動核心網進行管理,對號碼資源消耗過大。針對以上問題,運營商須盡快開發(fā)與現有移動蜂窩網絡相隔離的低功耗廣域網 (Low Power Wide Area,LPWA)[1]專網,并實現LPWA專網的全面覆蓋,改變目前物聯網應用對移動蜂窩網絡的依賴,裁減大量無關功能,獲得符合目標場景的性價比。
窄帶物聯網(Narrow Band Internet of Things,簡寫NB-IoT)[2]是物聯網領域一種新興的技術,又稱低功耗廣域網(Low Power Wide Area)。它工作的上下行頻段為180 kHz,以蜂窩通信技術為基礎,可以在2 G或4 G網絡上直接部署,降低了開發(fā)成本。
2015年9月3GPP[3]標準組織提出了一種新的窄帶蜂窩通信技術—NB-IoT。2016年6月16日,國際組織3GPP在韓國釜山正式通過NB-IoT系列標準[4]。目前,NB-IoT技術協議核心已經制定完成,已初步完成了第一階段測試,這標志著NB-IoT標準基本成熟,已初步具備商用條件。世界知名通信企業(yè)華為、愛立信等都宣布支持NB-IoT[5]。在國內,2017年5月無錫成為全國首個實現了NB-IoT全域覆蓋的地級市[6];同年,上海、福州、杭州、廣州4個城市啟動了NB-IoT外場測試[7]。
NB-IoT的主要特點[8]包括:覆蓋范圍廣,比現有網絡覆蓋面積擴大約100倍;容量大,一個扇區(qū)能夠支持大約10萬個連接;功耗低,NB-IoT終端采用兩節(jié)AA電池供電待機可達10年;成本低,單個連接模塊不超過3 美元。
NB-IoT應用架構可以抽象為NB-IoT終端(UE)、NB-IoT信息郵局(MPO)、NB-IoT人機交互系統(tǒng)(HCI)三個組成部分。
NB-IoT終端(Ultimate Equipment,UE)是一種以微控制器(MCU)為核心,包含其他電子裝置,具有數據采集、控制、運算及基于NB-IoT通信等功能,適合于特定用途的軟硬件實體,如NB-IoT燃氣表、NB-IoT水表、NB-IoT交通燈、NB-IoT智能農業(yè)設備、NB-IoT機床控制系統(tǒng)等。
MCU負責數據采集、處理、分析,干預執(zhí)行,以及與通信模組的板內通信連接,通信模組將MCU的板內連接轉為NB-IoT通信,以便與遠程服務器通信。UE還可以包含短距離無線通信機構,以便與其他物聯網節(jié)點實現通信。UE內含手機卡(目前使用電子卡,也可以集成到通信模組中),這個卡通常叫“用戶識別卡”,即SIM卡,它含有唯一的國際移動用戶識別碼[9]。UE用戶通過這個號給信息郵局運營商繳費。
NB-IoT信息郵局(Mssage Post Office,MPO)是一種基于NB-IoT協議的信息傳送系統(tǒng)[10],由NB-IoT基站(eNodeB)與NB-IoT管理服務器組成。它在NB-IoT終端(UE)與NB-IoT人機交互系統(tǒng)(HCI)之間起信息傳送的作用,由信息運行商負責建立與維護。
NB-IoT基站由戶外的鐵塔、NB-IoT基站路由器等構成。鐵塔是基站路由器支撐機構,作用是把NB-IoT基站路由器高高掛起,提高NB-IoT基站路由器的無線覆蓋范圍。從用戶編程角度來看,編程者可以忽略NB-IoT基站這個中間過渡。信息郵局(MPO)中的管理服務器MS(Management Server)可以是一個實體服務器,也可以是分散的云服務器。對編程者來說,信息郵局就是具有信息偵聽功能的固定IP地址與端口,需要向信息郵局運營商或第三方機構申請并付費使用。
NB-IoT人機交互系統(tǒng)(Human Computer Interaction,HCI)是實現人與NB-IoT信息郵局(NB-IoT管理服務器)之間信息交互、信息處理與信息服務的軟硬件系統(tǒng)。目標是使人們能夠利用通用計算機(PC)、平板電腦、手機等設備,通過NB-IoT信息郵局獲取NB-IoT終端UE的數據,并可實現對終端UE的控制等功能。從應用開發(fā)角度看,人機交互系統(tǒng)就是與信息郵局的固定IP地址與端口打交道,通過這個固定IP地址與端口實現與終端的信息交互。
基于NB-IoT的環(huán)境監(jiān)測系統(tǒng)硬件由兩塊擴展板構成,擴展板A包含了一個32位ARM Cortex-M0+內核的KL36微控制器[11]、GPRS通信模塊[12]、三色燈、SWD寫入器接口、TTL串口(UART0)及兩排對外接口。擴展板A實物圖如圖1所示。

圖1 擴展板A實物圖
(1)KL36微控制器
KL36微控制器不僅具備超低功耗的性能,還包含一套豐富的模擬、通信、定時和控制外設,適用于消費電子、工業(yè)計量等應用。同時,它提供了段式LCD控制器和多個靈活的低功率模式,包括新的計算模式,這個功能通過使外設采用異步停止模式,降低了動態(tài)功耗,而且具有穩(wěn)定可靠的開發(fā)工具和軟件。在本設計中,KL36提供了芯片溫度的獲取方法,即通過A/D轉換器的26通道讀取數值然后計算得到。
(2)模擬信號輸入電路
模擬信號一般來自相應的傳感器。例如要測量室內的溫度,就需要溫度傳感器。但是,一般傳感器將實際模擬信號轉換成的電信號都比較弱,微控制器無法直接獲得該信號,需要將其放大,然后經過A/D轉換變?yōu)閿底中盘栠M行處理。目前許多微控制器內部包含A/D轉換模塊,實際應用時也可根據需要外接A/D轉換芯片。

圖2 A/D采樣電路
在本設計中,將光敏(熱敏)電阻接入圖2的采樣電路中,光敏(熱敏)電阻與一個特定阻值的電阻串聯,由于光敏(熱敏)電阻會隨著外界環(huán)境的變化而改變,因此A/D采樣點的電壓也會隨之改變,A/D采樣點的電壓為:
(1)
式(1)中x是一個特定阻值,根據實際光敏或熱敏電阻的不同而加以選定。以熱敏電阻為例,假設熱敏電阻阻值增大,采樣點的電壓就會減小,A/D值也相應減小;反之,熱敏電阻阻值減小,采樣點的電壓就會增大,A/D值也相應增大。所以采用這種方法,MCU就會獲知外界溫度的變化。
A/D轉換驅動代碼如下:
① 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值轉換成溫度
④ printf(“%f”, temp);
//輸出的溫度
(3)擴展板提供的接口
擴展板A共有60個對外接口,其中包括4個5 V接口、2個3.3 V接口、8個GND接口和46個GPIO接口[13](見圖1)。這些GPIO接口與KL36引腳直接相連。其中支持LCD的引腳有30個,支持16位A/D轉換的引腳有19個(其中有3個支持差分輸入),支持TSI功能的引腳有16個,支持UART[14](TX、RX)的有8對,支持TPM的引腳有36個,支持SPI輸入輸出的引腳有10個。
擴展板B包含3排插針、LCD顯示屏、TSI觸摸片、光敏電阻、串口接口和SWD寫入口。顯示屏可顯示檢測的數據,TSI觸摸片被觸摸時會觸發(fā)TSI響應事件,實現用戶與硬件的交互。硬件通過TTL-USB串口[15]線與PC機相連,實現硬件與PC機的通信,SWD用于將程序寫進硬件。
(1)偵測軟件設計的基本思想
偵聽程序是人機交互系統(tǒng)中的一部分,是信息郵局與上層人機交互軟件之間的通信媒介。根據軟件分層的思想,將偵聽程序分為網絡通信層、數據處理層和應用層來進行設計。
網絡通信層主要負責接收上行數據和發(fā)送下行數據。該層負責偵聽本機端口,對接收到的上行數據包進行解析并校驗,將正確的數據包存入接收數據隊列,將出錯的數據包存入錯誤接收數據隊列,并觸發(fā)接收數據事件。同時,該層將要發(fā)送的數據封裝成幀并根據傳送參數發(fā)送給指定設備。
數據處理層定義了幀信息類,即描述幀數據內包含信息的類,并提供實現幀數據與幀信息類的對象之間相互轉換的方法。
應用層負責與上層交互軟件的通信,根據不同的應用場景對應的不同解決方案來對信息作進一步處理。數據處理層與應用層都與傳輸的具體內容有關,與傳輸方式無關。
(2)偵測軟件的設計
根據以上思想,設計的偵測程序結構框架如圖3所示,主要的文件夾有4個,分別是01_Doc、02_NetworkComm、03_DataProc及04_Application。其中02_NetworkComm、03_DataProc和04_Application是偵聽程序框架的主要文件夾,分別對應網絡通信層、數據處理層以及應用層。

圖3 偵測程序結構框架
(3)用戶服務器程序設計
用戶服務器的目的是接收終端通過轉發(fā)服務器發(fā)來的數據。由于用戶服務器的IP地址不固定,所以它必須在開始監(jiān)聽的時候主動連接管理服務器,并注冊將要監(jiān)聽的IMSI號,該IMSI號和管理服務器的IP地址和端口號可以在“App.config”中進行配置。
① 信息發(fā)送核心代碼(發(fā)送流程如圖4所示):
//UE模塊供電
LCDShowRunMsg('H',1,1);
//LCD提示“H1-1”,表示給UE供電
gpio_set(PTE_NUM|22,1); //UE模塊供電
Delay_ms(3000); //等待模塊開機,3 s
//UE模塊初始化
LCDShowRunMsg('H',1,2);
//LCD提示“H1-2”,表示開始初始化
mflag=uecom_init(mRetdata,data.serverIP,data.serverPort);
//根據初始化是否成功決定是否發(fā)送數據
if(mflag) goto main_loop1; //初始化失敗,LCD顯示提示
//初始化成功
LCDShowRunMsg('H',1,3);
//LCD提示“H1-3”,表示UE初始化成功
getFrameData();
//動態(tài)獲取當前實時數據
//UE模塊發(fā)送數據
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; //數據發(fā)送失敗,LCD顯示提示
LCDShowRunMsg('H',1,6);//LCD提示“H1-6”,表示發(fā)送成功
② 信息接收核心代碼
// UE模塊接收數據
LCDShowRunMsg('H',1,7);//LCD提示“H1-7”,表示發(fā)送成功
mflag = uecom_recv(&mframeLen,mframe);
if(mflag) goto main_loop3; //數據接收失敗,LCD顯示提示
LCDShowRunMsg('H',1,8);
//LCD提示“H1-8”,表示接收數據成功
frameDecode(mframe,fd.data,&mlen);
//解析幀數據,信息寫入結構體
LCDShowRunMsg('H',1,9);
//LCD提示“H1-9”,表示數據解析成功

圖4 數據發(fā)送基本流程
用戶服務器是基于C#程序實現的,使用封裝好的UECom類可以很快實現需要的功能。監(jiān)聽端口可通過UECom類的UECom_Listen方法實現,注冊IMSI可通過向管理服務器發(fā)送空數據實現。接收幀可通過UECom的接收數據事件實現,接收到的數據是去掉了幀頭幀尾、校驗碼、IMSI號和幀長的有效數據。然后,按照定義的有效數據幀格式對幀進行解析即可。通過使用封裝好的類,可以大大降低編程的難度。
(1)發(fā)送數據(上行數據)測試
① 通過計算機、充電寶、手機充電器等提供的USB接口給監(jiān)測硬件供電;紅燈亮,LCD顯示芯片溫度“H0-xx.x”(見圖5(a)),時間約10 s。接著LCD顯示UE的15位SIM卡號(IMSI號),本次測試SIM號為:460040436505436(見圖5(b)、圖5(c))。由于LCD屏的尺寸限制,SIM號采用分兩屏顯示(間隔5 s),它將作為設備的唯一標識。

圖5 上行數據測試
② 進入主循環(huán),紅燈每秒閃爍一次,LCD顯示時間“hh.mm.ss”,每秒更新一次。在主循環(huán)運行過程中,若按下觸摸按鍵(TSI),則LCD顯示“E1-x”,x為TSI觸摸次數。TSI每觸摸3次或時間每隔120 s時,監(jiān)測系統(tǒng)通過信息郵局MPO向人機交互系統(tǒng)HCI發(fā)送數據,LCD顯示“H1-1007”表示數據發(fā)送成功(見圖5(d))。若顯示“F.”則失敗,可能是基站信號較弱。
③ 在數據發(fā)送過程中,若能成功連接基站,則在LCD上顯示“H1-1003”與“H1-1004”之間會顯示提示“H1-xx”,其中xx為當前信號強度(百分比表示),信號強度在70以上時,通信較為流暢。
(2)下行數據測試
啟動PC端程序,用戶服務器軟件將接收由基站發(fā)來的數據,并完成對數據的解析,在用戶程序端可以查看光線強度、溫度、時間、信號強度等信息(見圖6)。對接收到的上行數據可做一定的修改,單擊回發(fā)按鈕,可將修改后的數據回發(fā)給基站,進而回傳給監(jiān)測系統(tǒng)(見圖7),回發(fā)后若LCD顯示“H1-1009”,表示下行數據成功。

圖6 接收并解析數據

圖7 回發(fā)數據成功
