基于NB-IoT的水土保持监测系统设计
2022-03-30罗义凯胡延苏闫茂德杨盼盼
罗义凯,胡延苏,闫茂德,杨盼盼
(长安大学 电子与控制工程学院,西安 710064)
0 引言
近年来,我国水土流失问题非常严重,我国的国土面积占据世界土地总面积的6.8%,但是我国的水土流失面积却占了世界的14.2%[1]。我国的水土流失状况表现为3个特点:面积大,范围广、强度大,侵蚀重、成因复杂,区域差异明显[2]。水土流失的危害大的来说主要有以下两个方面:一方面表现在耕地面积被毁坏,水土流失会导致江河水经常干涸,而其旁边的耕地更是难以载种植物,进而丧失农业生产能力,若按照现在的水土流失速度推算,再过50年中国将会有很多河流及耕地丧失殆尽,这不仅会让人们失去赖以生存的基础,而且会威胁国家粮食安全;另一方面表现在削弱生态系统功能,因为水土流失和生态恶化互为因果,水土流失不仅会加剧水源污染,还会导致防风固沙能力减弱,加剧沙尘暴等等[3]。
NB-IoT窄带物联网是万物互联网络的一个重要分支[4]。它算是近年来IoT领域的一个新兴技术,它产生的主要原因在于为了解决传统的2G/3G/4G(GPRS)网络不能满足物联网终端设备低功耗、低成本的问题[5]。它构建于蜂窝网络、只消耗大约180KHz的带宽,在使用NB-IoT时,它还有一个非常方便的功能,它可以将数据直接上传到云端。而且它可以直接部署于GSM网络、UMTS网络或LTE网络,可以降低部署成本、实现平滑升级[6]。
方天纵等利用3S技术,以天津市蓟县水土流失监测实践为例调用小流域数据进行项目规划和初步设计等,并根据初设,运用计算机辅助项目监测和管理[7];文斌等研究了基于组件式GIS的小流域水土保持信息系统的设计与实现,并且讨论了GIS在水土保持中的应用、系统功能设计、数据库设计以及小流域水土保持信息系统的系统架构设计等[8];以上的研究成果对提升我国的水土保持监测信息化水平有着积极的作用,但在实际应用中还存在着诸多问题;一方面是有关数据传输的问题,传感器设备在向后端传输的数据多杂冗余,而且经常发生数据缺失现象,并未对数据进行有效的处理;另一方面产品多集中于物联网的物理层与网络层层面,对上端业务层的支持不够,未能与云服务技术结合,数据分析计算能力相对薄弱,导致产品的市场竞争力下降,大大限制了市场拓展空间[9]。蜂窝窄带物联网(NB-IoT,narrow band internet of things)的出现,为水土保持智能传感终端的低功耗、高可靠以及低成本部署提供了有效的解决途径。鉴于此,本文以水土保持综合管理系统的智能化、管理可视化为应用背景,探索通用NB-IoT终端设计和应用方法,具体研究内容包括:
1)完成基于NB-IoT的水土保持终端设计和应用层协议,实现不同类型产品的可靠数据传输和互联互通操作;
2)采用华为云平台,设计水土保持综合管理系统,采用建筑模型(BIM)和地理信息(GIS)相结合的可视化手段,对水土保持终端的各项运行参数进行实时监控和多维度显示[10]。
1 系统结构及原理
图1为基于NB-IoT的水土保持监测系统结构框图。如图所示,该监测系统由传感器节点、数据采集节点和应用服务器构成。
图1 系统结构框图
1)传感器节点:传感器节点通过RS485取电,并将数据通过RS485总线,采用SDI-12协议传送至数据采集节点[11]。传感器节点间彼此独立。
传感器节点包含环境传感器和GPS传感器,环境传感器根据需求采集或定期采集环境参数(如大气温度、大气湿度、光照量、风力、风向等)和土体参数(如土体质量、土体渗漏量、土体温度、水份、电导、水势等);GPS传感器提供每个传感器节点的位置信息,便于后期的产品监测和故障维护。模块采用被广泛使用的标准的NMEA-0183协议格式,通过串口与主控模块进行数据交换[12]。
2)数据采集节点:如图2所示,数据采集节点集成有以太网通信模块,NB-IoT通信模块和数据存储模块。同时它还连接有太阳能电池板和充电电池组或与市电直接连接,可以为其它模块供电。
图2 数据采集节点结构框图
数据采集节点收集到所有传感器信息后,添加该监测点的设备信息,继而将数据二次打包,进行传输。
3)应用服务器:数据采集节点采用冗余方法进行传输:一方面,为保证数据的安全性,通过TCP/IP协议发送至本地服务器[13];同时,通过NB-IoT模块发送至云端服务器。这样便可以通过华为云端物联网平台时刻监测到水土的具体信息。同时,华为云端操作界面可以设置很多的功能,能够生成数据曲线,并且可以生成许多对比表格,当监测的数据出现明显问题时,能够及时进行危险报警,同时它还可以保存历史数据,以便以后的分析应用。
2 系统硬件设计
2.1 主控模块
主控制器作为系统运行的大脑,选型尤其重要。根据水土保持监测系统的实际需求以及对低功耗的要求,在本设计中选择了STM32L431RCT6作为主控制器芯片。
STM32L4系列属于超低功耗MCU,它还具有专有的超低漏电流技术和优化设计,在20~125 ℃内具有业内最低的电流波动,可以保证高温下极低的功耗,在最底功耗模式并且维持SRAM数据的情况下,它实现了业内最低的170 nA的电流消耗。而且从低功耗模式的唤醒动作非常快,即使是停止模式下,唤醒时间也是低至3.5 s[14]。在确定了主控器的MCU型号之后,相应的开发平台也就确定下来了,在本设计中还是采用了熟悉的Keil MDK-Arm μ Vision5,并使用ST-link对MCU进行烧录。
2.2 环境传感器模块
环境传感器测量一个区域范围内的环境参数和土体参数,涉及到的传感器类型和数量众多。为方便起见,本文仅以最常见的温湿度传感器为例说明。
本设计选用的是DHT11温湿度传感器,它可以对温度、湿度信息进行复合检测并统一输出校准后的数字信号。在能耗方面,当温度25 ℃,供电为5 V时,测量电流在0.5~2.5 mA范围内,待机电流在100~150 μA范围内,符合系统低功耗的性能取向,同时此模块还具有高可靠性和长期稳定性等优势。
除了供电与接地引脚外,DHT11温湿度传感器只用一根DATA引脚即可与MCU传递数据,因此只需要对这一I/O接口进行设置即可实现对传感器的初始化操作。
图3 DHT11初始化流程图
要实现对温湿度数据的读取,首先应该了解DHT-11传感器模组自带的8位单片机所出输出的数字信号的结构。传感器模组一次完整的数据传输包含 40 位字,高位先被传出,其中湿度高8位表示整数,低8位表示湿度小数;温度也是一样的表示方法,共16位;最后8位为校验和。为了便于程序读取与存储数据,创建了如下所示的结构体:
typedef struct
{
uint8_t humi_high8bit; //原始数据:湿度高8位
uint8_t humi_low8bit; //原始数据:湿度低8位
uint8_t temp_high8bit; //原始数据:温度高8位
uint8_t temp_low8bit; //原始数据:温度低8位
uint8_t check_sum; //校验和
float humidity; //实际湿度
float temperature; //实际温度
}DHT11_Data_TypeDef;
2.3 地理信息采集模块
本设计中选用了NE0-7N GPS模块来实现地理信息的采取。此模块采用被广泛使用的标准的NMEA-0183协议格式,通过串口与主控模块进行数据交换。
GPS模块的主要任务为对GPS模组所传回的标准定位信息数据帧进行解析。在模块冷启动完成稳定工作后,定位模块会通过串口,采用 ASCII 码向 MCU 传输如下几种帧信息:
表1 定位信息数据帧
其中,GPRMC为推荐定位信息(recommended minimum specific GPS/transit data)因此本设计中通过读取GPRMC的帧信息来获得位置数据。
2.4 NB-IoT窄带物联网通信模块
NB非常利于远距离、低频率传输,而且传输过程中丢包率非常低,因此非常适用于水土保持监控系统中的远程数据传输[15]。
本设计中选用了移远通信生产的LTE BC35-G NB-IoT模组,此模组通过串口与主控模块相连。这款无线通信模块具有高性能、低功耗、多频段等技术优势,支持B1、B3、B8、B5、B20、B28 多个频段。且此模块在设计上兼容移远通信 GSM/GPRS系列的M35 模块和LPWA系列的BC95模块,可以方便客户快速、灵活地进行产品设计和升级。此外,模块采用了省电技术,耗流在省电模式(PSM)下低至3 μA,符合系统对低功耗的需求。
** 函数名称 :NB_SendMsgToServer
** 说明 :NB发送消息到服务器
** 参数 :*msg,要发送的数据(String形式)
** 返回值:无
************************************************
void NB_SendMsgToServer(unit8_t *msg)
{
memset(cmdSend,0,sizeof(cmdsend));
uint8_t len = 0;
char msgLen[4] = {0};
len = strlen((const char*)msg)/2;
DecToString(len, msglen);
strcat(cmdSend. "AT+NMGS=");
stract(cmdSend. ",");
stract(cmdSend, (const char *)msg);
stract(cmdSend, " ");
NB_SendCmd((unit8_t*)cmdSend,(unit8_t *)"OK"
DefaultTimeout,1);
}
AT命令是控制通讯模块执行动作的代码,所有通信相关的功能函数都以此为基础,结构上包含前缀AT,后面跟随不同的控制语句。通过串口向终端设备发送指令即可控制模块执行相应功能,在此基础上,对AT指令进行封装,形成有具体功能的函数:例如初始化入网、发送指令、设置服务器、接收数据、发送数据等。
3 系统软件设计
软件设计可以大体分为本地终端的MDK工程和云平台配置两部分内容。本地终端的MDK工程,主要作用是通过单片机控制终端整体,执行设定好的数据采集与数据上报功能;通过正确配置云平台,开发相对应的编解码插件,部署前端用户界面等工作,可以将终端上报的数据直观的展现给用户, 形成水土保持监测的数据服务中心,为用户提供实时的准确数据信息。因此,只有同时做好硬件端和云端的软件设计与对接,才能实现本系统的功能。
3.1 通讯及通讯协议
前文已经介绍了数据在系统内部的传输,那么这些数据在传输过程中遵循着一些传输协议。其中主要有SDI-12协议、SPI协议以及NMEA-0813协议等。下图为数据传输图:
SDI-12通讯协议即串行数字接口,是一种基于微处理器的智能化传感器系统[16]。SDI-12接口总线使用三芯电缆:一根为串行数据线,双向半双工通信;一根为12V供电线,向传感器供电;一根为地线,即作为电源的回路又作为数据信号线的回路。SDI-12串行数据二进制值为1,对应电压范围为-0.5~1.10 V;串行数据二进制值为0,对应电压范围为3.5~5.5 V;规定通讯波特率为1 200 bps;
SPI协议是一个同步的数据总线。SPI总线包括4条逻辑线,如下:MISO:主机输入,从机输出(数据来自从机);MOSI:主机输出,从机输入(数据来自主机);SCLK:串行时钟信号,由主机产生发送给从机;SS:片选信号,由主机发送,以控制与哪个从机通信,通常是低电平有效信号[17]。
NMEA-0813协议采用ASCLL码来传递GPS定位信息,我们称之为帧,帧格式如下:aacc,ddd,ddd,…,ddd*hh[18];
图4 数据传输图
3.2 主程序流程设计-本地终端MDK工程
主程序部分是整个终端软件部分的核心,统一协调调动其他具体功能函数,执行硬件端的自动采集、上报任务。下面按照程序实际执行的顺序介绍这一部分的软件设计。
1)初始化:主要包括对闪存、缓存、时钟源、NVIC和底层硬件的初始化设置、系统时钟配置、GPIO接口设置、3个串口的初始化、通信模块初始化、传感器初始化,最后,设置远程CDP服务器的接收IP与端口。
2)采集温湿度数据:初始化结束后便进入了程序的主循环过程。首先是调用温湿度传感器数据读取函数,通过串口向上位机回报数据;其次,清理数据存放接口处的内存,防止对接下来的数据记录造成干扰,将读取到的数据统一小数位数,存放到待发送结构体中;最后,调用一次字符串转换函数,将待发送结构体内的数据转换为字符串,等待通讯模块发送。
3)采集定位信息:采集完温湿度数据之后开始采集位置信息。首先,由GPS模组通过串口向缓存写入数据,MCU主动读取缓存;随后,调用解析GPRMC信息的函数,对读取到的数据进行解析,得到经度、纬度数据,同时向上位机回报此数据,以方便调试;最后,由于定位模搜索卫星组需要一定的时间,在这之后才可以得到位置信息,因此需要进行一个判断,当得到的经纬度信息不为“0”时,将信息从待发送结构体转换为字符串,等待发送。
4)向云端发送数据:读取完两部分数据后,先要使用字符串拼接函数,将两个待发送的字符串拼接成一个完整的报文,随后调用通信模块的数据发送函数,将此报文传递给云平台。
至此,本地终端一次完整的数据采集、发送过程便结束了,随后程序进入延时过程。在经过一个设置好的时间后,重复执行上述过程,完成预期的自动控制程序。
图5 主程序流程图
3.3 华为云平台配置
本设计中的云平台选择了由华为提供的OceanConnect物联网开发平台,在此平台上进行项目开发的入门门槛较低,仅需注册一个开发者账号即可开始,华为官方也提供了非常详尽的开发指导与教程[19]。
一个产品在与物联网平台的集成对接中所需要做的第一步工作就是创建Profile,因为描述文件定义了设备上报的数据和应用服务器下发的命令包含了哪些字段[20]。换而言之,定义Profile的过程就是在物联网平台构建一款设备的抽象模型,使平台理解该款设备支持哪些服务,具有哪些属性,可以下发哪些命令、设备的升级能力等信息[21]。
对于本产品而言,设备上报的数据主要有以下4段:温度、湿度、维度、经度。
表2 产品Profile配置
本设计中终端设备和云平台之间采用CoAP协议通讯,CoAP消息的payload为应用层数据,此数据的格式由物联网设备自行定义,故需要向云平台“翻译”所上传的报文。由于窄带物联网设备对能耗要求较高,所以应用层数据一般不采用流行的JSON格式,而是采用二进制格式。但是,物联网平台与应用侧之间需要使用JSON格式进行通信。因此,需要开发编码插件以供物联网平台调用,用来完成二进制格式和JSON格式的转换。
图6 编解码插件配置
在完成以上两个配置后,只需最后完成获取对接信息即可。
4 实验结果与分析
在本地终端的MDK工程和云平台都配置完成后,同时做好硬件端和云端的软件设计与对接,才能实现本系统的功能。
1)硬件测试,由于所选用的DHT-11温湿度模块没有内置独立的USB串口,故通过与之连接的MCU进行串口通信,检测其是否工作正常,以能否得到准确的温湿度数据为评价标准。首先对系统上电,执行初始化工作,接下来按下按键2,执行对温湿度数据的读取、转码操作。通过串口回传的数据,判断程序是否正常执行。串口回传数据如下:
[2020-05-24_18:15:47:723]humidity:46.0%RH.temperature:24.0℃
[2020-05-24_18:15:47:763]msgSend_1:32342E3034362E30
[2020-05-24_18:15:47:787]H&T_BTS_SUCCESSED
第一行为温湿度读取成功后所输出的温湿度数据,表示数据读取函数成功运行,若返回值为“error”则说明读取失败。第二行表示经过转码后的温湿度数据,为ASCII码其中前两位“32”表示数字“2”,“34”表示数字“4”,“2E”表示符号“.”,“30”表示数字“0”,连在一起即为温度数据“24.0”,后面的八位为相应的湿度数据,不再赘述。最后一行表示字符串转码成功,可以交由通信模块上传到云平台。
至此,通过串口信息,我们可以认定温湿度模块工作正常,能够完成采集、传输工作。
由于所选用的NEO-7N定位模块内置了独立的USB串口,可以直接连接上位机进行调试,在硬件上只需对GPS模块通电,无需连接用于数据收发的“RXD”与“TXD”引脚。再将模块通过数据线直接与上位机USB接口相连,即可查看串口数据。结果如下:
** NEO-7N定位模块串口数据
************************************/
[2020-05-27_09:57:02:757]
GPGGA,015702.00,3422.22424,N,10853.34294,
E,1,06,1.27,426.6,M,-27.9,M,,*7A
[2020-05-27_09:57:02:757]
GPGSA,A,3,01,27,04,11,16,07,,,,,,,2.77,1.27,2.46*04
[2020-05-27_09:57:02:757]
GPGSV,2,1,08,01,09,171,33,04,32,204,25,
07,41,316,29,11,44,168,27*7E
[2020-05-27_09:57:02:796]
GPGSV,2,2,08,16,31,061,25,21,02,034,23,
39,266,41,27,53,044,17*78
[2020-05-27_09:57:02:796]
GPGLL,3422.22424,N,10853.34294,E,015702.00,A,A*6A
[2020-05-27_09:57:03:754]
GPRMC,015703.00,A,3422.22421,N,10853.34313,
[2020-05-27_09:57:03:754]GPVTC,,T,,M,0.110,N,0.204,K,A*25
从串口回报的信息可看出,在经过了一段时间之后,便可稳定传输符合NMEA-0183标准的帧数据。手动读取经纬度信息为:北纬34°22’,东经108°53’分,可以判定定位模块工作正常。
2)软件测试,在本设计中,开发了“谛听”应用用作前端平台,直接面对用户,提供数据可视化支持和远程设备管理功能。通过对应用添加相应的API组件,即可实现相关功能。共设计了设备注册、设备列表、数据监控及终端历史路径这4大应用界面,完成了应用端的配置过程,实现了应用的设计。
图7 应用功能分页
组件面板如图8所示。
图8 组件面板图
在华为云端有最近数据上报功能和历史数据查询功能,可以非常清晰地看见上传的数据,并且可以对数据进行存储。最后对应用侧数据监控页面进行了测试,可以清晰显示。至此,应用端的测试过程全部完成,此应用可以完成设计之初的功能,实现了期望的目标。
5 结束语
本设计根据用户需求,从实际应用上的需求和技术上的需求两个方面进行了详细的需求分析。完成了系统的总体框架设计,其中主要包括数据采集、数据处理、数据发送、云端接收、前端应用等,并对系统所用到的相关技术进行了介绍说明;然后从实际需求出发,以低功耗为目标选择元件与硬件模组,完成了本地硬件终端的搭建。最后开发终端工程固件,并对其进行调试;对比选择云端物联网平台与前端应用平台,将云端与本地端相联结,完成整个系统的互联互通,实现设计功能。