NB-IoT的基本架构与环境监测系统的应用设计*
2018-12-07,,,
,,,
(1.咸阳师范学院 计算机学院,咸阳 712000;2.苏州大学)
引 言
目前,制约物联网技术应用发展的主要原因有:移动蜂窝网承载物联网应用时,不能使物联网专网与公众网络相对隔离,由于接入容量的相互影响,单站的接入能力阻碍了物联网市场的发展;4G网络投入运营后,运营商减少了对2G、3G网络建设及优化工作,使得这些网络质量下降,后续应对物联网市场发展就更加困难;现有物联网通信模块依托移动核心网进行管理,对号码资源消耗过大。针对以上问题,运营商须尽快开发与现有移动蜂窝网络相隔离的低功耗广域网 (Low Power Wide Area,LPWA)[1]专网,并实现LPWA专网的全面覆盖,改变目前物联网应用对移动蜂窝网络的依赖,裁减大量无关功能,获得符合目标场景的性价比。
1 NB-IoT的产生及发展现状
窄带物联网(Narrow Band Internet of Things,简写NB-IoT)[2]是物联网领域一种新兴的技术,又称低功耗广域网(Low Power Wide Area)。它工作的上下行频段为180 kHz,以蜂窝通信技术为基础,可以在2 G或4 G网络上直接部署,降低了开发成本。
2015年9月3GPP[3]标准组织提出了一种新的窄带蜂窝通信技术—NB-IoT。2016年6月16日,国际组织3GPP在韩国釜山正式通过NB-IoT系列标准[4]。目前,NB-IoT技术协议核心已经制定完成,已初步完成了第一阶段测试,这标志着NB-IoT标准基本成熟,已初步具备商用条件。世界知名通信企业华为、爱立信等都宣布支持NB-IoT[5]。在国内,2017年5月无锡成为全国首个实现了NB-IoT全域覆盖的地级市[6];同年,上海、福州、杭州、广州4个城市启动了NB-IoT外场测试[7]。
NB-IoT的主要特点[8]包括:覆盖范围广,比现有网络覆盖面积扩大约100倍;容量大,一个扇区能够支持大约10万个连接;功耗低,NB-IoT终端采用两节AA电池供电待机可达10年;成本低,单个连接模块不超过3 美元。
2 NB-IoT基本架构
NB-IoT应用架构可以抽象为NB-IoT终端(UE)、NB-IoT信息邮局(MPO)、NB-IoT人机交互系统(HCI)三个组成部分。
2.1 NB-IoT终端
NB-IoT终端(Ultimate Equipment,UE)是一种以微控制器(MCU)为核心,包含其他电子装置,具有数据采集、控制、运算及基于NB-IoT通信等功能,适合于特定用途的软硬件实体,如NB-IoT燃气表、NB-IoT水表、NB-IoT交通灯、NB-IoT智能农业设备、NB-IoT机床控制系统等。
MCU负责数据采集、处理、分析,干预执行,以及与通信模组的板内通信连接,通信模组将MCU的板内连接转为NB-IoT通信,以便与远程服务器通信。UE还可以包含短距离无线通信机构,以便与其他物联网节点实现通信。UE内含手机卡(目前使用电子卡,也可以集成到通信模组中),这个卡通常叫“用户识别卡”,即SIM卡,它含有唯一的国际移动用户识别码[9]。UE用户通过这个号给信息邮局运营商缴费。
2.2 NB-IoT信息邮局
NB-IoT信息邮局(Mssage Post Office,MPO)是一种基于NB-IoT协议的信息传送系统[10],由NB-IoT基站(eNodeB)与NB-IoT管理服务器组成。它在NB-IoT终端(UE)与NB-IoT人机交互系统(HCI)之间起信息传送的作用,由信息运行商负责建立与维护。
NB-IoT基站由户外的铁塔、NB-IoT基站路由器等构成。铁塔是基站路由器支撑机构,作用是把NB-IoT基站路由器高高挂起,提高NB-IoT基站路由器的无线覆盖范围。从用户编程角度来看,编程者可以忽略NB-IoT基站这个中间过渡。信息邮局(MPO)中的管理服务器MS(Management Server)可以是一个实体服务器,也可以是分散的云服务器。对编程者来说,信息邮局就是具有信息侦听功能的固定IP地址与端口,需要向信息邮局运营商或第三方机构申请并付费使用。
2.3 NB-IoT人机交互系统
NB-IoT人机交互系统(Human Computer Interaction,HCI)是实现人与NB-IoT信息邮局(NB-IoT管理服务器)之间信息交互、信息处理与信息服务的软硬件系统。目标是使人们能够利用通用计算机(PC)、平板电脑、手机等设备,通过NB-IoT信息邮局获取NB-IoT终端UE的数据,并可实现对终端UE的控制等功能。从应用开发角度看,人机交互系统就是与信息邮局的固定IP地址与端口打交道,通过这个固定IP地址与端口实现与终端的信息交互。
3 基于NB-IoT的环境监测系统
3.1 硬件设计
基于NB-IoT的环境监测系统硬件由两块扩展板构成,扩展板A包含了一个32位ARM Cortex-M0+内核的KL36微控制器[11]、GPRS通信模块[12]、三色灯、SWD写入器接口、TTL串口(UART0)及两排对外接口。扩展板A实物图如图1所示。
图1 扩展板A实物图
(1)KL36微控制器
KL36微控制器不仅具备超低功耗的性能,还包含一套丰富的模拟、通信、定时和控制外设,适用于消费电子、工业计量等应用。同时,它提供了段式LCD控制器和多个灵活的低功率模式,包括新的计算模式,这个功能通过使外设采用异步停止模式,降低了动态功耗,而且具有稳定可靠的开发工具和软件。在本设计中,KL36提供了芯片温度的获取方法,即通过A/D转换器的26通道读取数值然后计算得到。
(2)模拟信号输入电路
模拟信号一般来自相应的传感器。例如要测量室内的温度,就需要温度传感器。但是,一般传感器将实际模拟信号转换成的电信号都比较弱,微控制器无法直接获得该信号,需要将其放大,然后经过A/D转换变为数字信号进行处理。目前许多微控制器内部包含A/D转换模块,实际应用时也可根据需要外接A/D转换芯片。
图2 A/D采样电路
在本设计中,将光敏(热敏)电阻接入图2的采样电路中,光敏(热敏)电阻与一个特定阻值的电阻串联,由于光敏(热敏)电阻会随着外界环境的变化而改变,因此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触摸片被触摸时会触发TSI响应事件,实现用户与硬件的交互。硬件通过TTL-USB串口[15]线与PC机相连,实现硬件与PC机的通信,SWD用于将程序写进硬件。
3.2 基于NB-IoT侦测软件的设计
(1)侦测软件设计的基本思想
侦听程序是人机交互系统中的一部分,是信息邮局与上层人机交互软件之间的通信媒介。根据软件分层的思想,将侦听程序分为网络通信层、数据处理层和应用层来进行设计。
网络通信层主要负责接收上行数据和发送下行数据。该层负责侦听本机端口,对接收到的上行数据包进行解析并校验,将正确的数据包存入接收数据队列,将出错的数据包存入错误接收数据队列,并触发接收数据事件。同时,该层将要发送的数据封装成帧并根据传送参数发送给指定设备。
数据处理层定义了帧信息类,即描述帧数据内包含信息的类,并提供实现帧数据与帧信息类的对象之间相互转换的方法。
应用层负责与上层交互软件的通信,根据不同的应用场景对应的不同解决方案来对信息作进一步处理。数据处理层与应用层都与传输的具体内容有关,与传输方式无关。
(2)侦测软件的设计
根据以上思想,设计的侦测程序结构框架如图3所示,主要的文件夹有4个,分别是01_Doc、02_NetworkComm、03_DataProc及04_Application。其中02_NetworkComm、03_DataProc和04_Application是侦听程序框架的主要文件夹,分别对应网络通信层、数据处理层以及应用层。
图3 侦测程序结构框架
(3)用户服务器程序设计
用户服务器的目的是接收终端通过转发服务器发来的数据。由于用户服务器的IP地址不固定,所以它必须在开始监听的时候主动连接管理服务器,并注册将要监听的IMSI号,该IMSI号和管理服务器的IP地址和端口号可以在“App.config”中进行配置。
① 信息发送核心代码(发送流程如图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);
//根据初始化是否成功决定是否发送数据
if(mflag) goto main_loop1; //初始化失败,LCD显示提示
//初始化成功
LCDShowRunMsg('H',1,3);
//LCD提示“H1-3”,表示UE初始化成功
getFrameData();
//动态获取当前实时数据
//UE模块发送数据
LCDShowRunMsg('H',1,4); //LCD提示“H1-4”,表示组帧提示
frameEncode(fd.data,264,mframe,&mframeLen); //组帧操作
LCDShowRunMsg('H',1,5); //LCD提示“H1-5”,表示开始发送
mflag = uecom_send(mframeLen,mframe);
if(mflag) goto main_loop2; //数据发送失败,LCD显示提示
LCDShowRunMsg('H',1,6);//LCD提示“H1-6”,表示发送成功
② 信息接收核心代码
// UE模块接收数据
LCDShowRunMsg('H',1,7);//LCD提示“H1-7”,表示发送成功
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 数据发送基本流程
用户服务器是基于C#程序实现的,使用封装好的UECom类可以很快实现需要的功能。监听端口可通过UECom类的UECom_Listen方法实现,注册IMSI可通过向管理服务器发送空数据实现。接收帧可通过UECom的接收数据事件实现,接收到的数据是去掉了帧头帧尾、校验码、IMSI号和帧长的有效数据。然后,按照定义的有效数据帧格式对帧进行解析即可。通过使用封装好的类,可以大大降低编程的难度。
3.3 系统测试
(1)发送数据(上行数据)测试
① 通过计算机、充电宝、手机充电器等提供的USB接口给监测硬件供电;红灯亮,LCD显示芯片温度“H0-xx.x”(见图5(a)),时间约10 s。接着LCD显示UE的15位SIM卡号(IMSI号),本次测试SIM号为:460040436505436(见图5(b)、图5(c))。由于LCD屏的尺寸限制,SIM号采用分两屏显示(间隔5 s),它将作为设备的唯一标识。
图5 上行数据测试
② 进入主循环,红灯每秒闪烁一次,LCD显示时间“hh.mm.ss”,每秒更新一次。在主循环运行过程中,若按下触摸按键(TSI),则LCD显示“E1-x”,x为TSI触摸次数。TSI每触摸3次或时间每隔120 s时,监测系统通过信息邮局MPO向人机交互系统HCI发送数据,LCD显示“H1-1007”表示数据发送成功(见图5(d))。若显示“F.”则失败,可能是基站信号较弱。
③ 在数据发送过程中,若能成功连接基站,则在LCD上显示“H1-1003”与“H1-1004”之间会显示提示“H1-xx”,其中xx为当前信号强度(百分比表示),信号强度在70以上时,通信较为流畅。
(2)下行数据测试
启动PC端程序,用户服务器软件将接收由基站发来的数据,并完成对数据的解析,在用户程序端可以查看光线强度、温度、时间、信号强度等信息(见图6)。对接收到的上行数据可做一定的修改,单击回发按钮,可将修改后的数据回发给基站,进而回传给监测系统(见图7),回发后若LCD显示“H1-1009”,表示下行数据成功。
图6 接收并解析数据
图7 回发数据成功