APP下载

基于OpenWrt与ZigBee的远程分布式物联网监控系统设计*

2019-09-26葛聪乐王晨宇任春枝

传感器与微系统 2019年10期
关键词:PC机线程网关

葛聪乐, 车 进, 田 斌, 王晨宇, 任春枝

(宁夏大学 物理与电子电气工程学院,宁夏 银川 750021)

0 引 言

随着物联网技术在生活中的普及应用,以智慧农业、精准农业为标准的农业物联网已经成为现代农业发展的一个重要趋势[1,2]。在传统的土壤数据采集中存在采集面积较小、采集数据量较低及数据误差等问题,通过利用物联网技术,以实现土壤数据采集的智慧化和精准化。

本文设计了一种分布式部署ZigBee传感器节点,通过OpenWrt网关转发数据至服务器的系统方案。

1 系统总体结构

系统的总体结构包括了ZigBee模块、MT7688网关及服务器三部分。ZigBee模块由协调器和终端节点组成,各个节点将采集的土壤数据通过ZigBee 网络协议发至ZigBee协调器。网关部分负责数据转发,与协调器使用Mod-bus通信协议,并把采集的数据写入备用的SQLite3数据库,同时网关向MQTT(MQ telemetry transport) Broker发布数据消息话题。

远程Linux PC机服务器中的MQTT Broker可以管理一个或多个网关发布的消息话题,在后台应用程序中订阅发布的消息话题,并把数据存入MySQL。

2 系统硬件设计

2.1 网关模块

网关以联发科公司的MT7688为主控制器,该控制器集成了主频最高580 MHz的MIPS 24KEc CPU处理器,配置有标准IEEE 802.11n Wi—Fi无线电,3个UART串口、及GPIO等接口。MT7688提供物联网网关和物联网设备两种模式,本系统使用物联网网关模式。

由系统架构图可知,MT7688系统配有一个802.11n WiFi接口和一个RJ45接口,系统可工作于有线和无线两种模式。

2.2 ZigBee模块

ZigBee是一种无线传感网络新技术,其协议是由ZigBee联盟制定的一种基于IEEE802.15.4技术的无线传输标准,ZigBee技术具有低功耗、低成本、近距离等特点[3,4]。目前ZigBee结合传感器的系统设计技术已经成熟,并且自组网功能较强,在无线传感网络系统中被广泛地采用。

ZigBee网络有星型、树型、Mesh(网状拓扑)三种拓扑结构,按照拓扑结构可将ZigBee模块分为协调器、路由器及节点三类。与另外两种拓扑结构相比采用星型拓扑结构具有结构简单、传输速度快等特点,在此结构中路由器和终端节点都被作为终端设备使用。

3 通信协议设计

3.1 Modbus-网关与协调器通信协议

基于串口通信具有传输数据量大、误码识别率高等优点[5,6]。协调器与网关之间的通信采用Modbus RTU,以网关作为主站、协调器作为从站,主站向从站发送如表1的心跳包数据,从站接收到心跳包数据后响应如表2数据。

表1 心跳包数据

表2 响应数据

在上述表格中H代表该值的十六进制数据高8位,L代表该值的十六进制数据低8位。

3.2 MQTT-网关与服务器通信协议

MQTT是一种基于发布/订阅的消息协议,专为受限设备和高延迟、不可靠或低带宽的网络而设计,TCP/IP端口1883与IANA保留在一起专用于MQTT[7,8]。

3.2.1 MQTT消息模型

在MQTT中存在MQTT Broker、客户端两个角色,其中客户端包括了订阅者和发布者两部分,客户端通过发送请求报文与MQTT Broker确认并建立连接,MQTT Broker负责处理订阅者和发布者的请求。

考虑需要传输温度、电导率及湿度3种数据,基于以上数据类型分别设计了3种数据消息话题,分别对应1/temperature、1/conductivity、1/humidity。发布者、订阅者与MQTT Broker消息模型如图1。

图1 MQTT Broker消息模型

3.2.2 MQTT Broker和客户端部署

MQTT Broker部署在远程PC机中,实现MQTT Broker的软件种类繁多,本次采用经过EPL/EDL许可的开源消息代理Eclipse Mosquitto,Mosquitto是基于MQTT协议3.1和3.1.1的轻量级消息代理软件。在Linux系统中下载Mosquitto代码后,修改代码目中config.mk文件可以配置支持SSL/TLS、桥接模式等功能。

MQTT客户端包括了网关部分的发布者及PC机中后台服务的订阅者,为了与Mosquitto相互兼容,客户端采用了开源Eclipse Paho项目。Paho支持多语言库,而且专为嵌入式设备提供了 MQTT 嵌入式C/C++ 客户端库,因此,在嵌入式网关中移植基于Paho的嵌入式客户端库实现数据消息话题发布,在PC机中使用标准MQTT C 库实现消息话题订阅。

4 系统软件设计

4.1 OpenWrt系统设计

OpenWrt是一个开源的Linux衍生版,支持Intel X86、MIPS及ARM等架构,具有强大的网络功能以及丰富的模块和用户自定义库[9,10]。

4.1.1 交叉编译链创建

Buildroot是一种简易的交叉编译工具,不仅可以编译ARM架构同时支持编译MIPS架构。获取Buildroot源码后,进入源码包路径中通过make menuconfig命令选择交叉编译配置。在Target options中选择Target Architecture (MIPS (little endian)),其中,MIPS (little endian)为MIPS小端模式,在toolchain中选择需要配置的选项,经过编译之后在服务器用户目录下的bashrc文件中添加交叉编译路径,即可在全局环境中使用交叉编译命令编译程序。

4.1.2 SQlite3数据库添加及使用

OpenWrt内核中带有SQlite3数据库选项,需在内核中配置libsqlite3和sqlite3-cli,经过编译之后生成相关的链接库文件,编译程序时需依赖生成的链接库文件并指明库文件和所引用头文件的路径[11,12]。在OpenWrt系统中使用SQlite3数据库可以生成以.db结尾的数据库文件,使用如下的SQlite命令可以转换为MySQL文件:

sqlite3 xxx.db < xxx.sql

xxx.db 指待转换的SQlite文件,xxx.sql为生成的MySQL文件。

4.2 网关应用程序设计

为了最大效率利用硬件处理器,网关程序采用并行多线程设计,与串行结构相比并行结构运行速度更快、处理周期更短。网关程序分为线程1、线程2和主进程三部分。

4.2.1 主进程设计

主进程负责网关策略调度。首先打开串口,初始化波特率、奇偶校验位、阻塞超时时间等串口参数,然后设置MQTT客户端地址、信号质量、MQTT Broker IP地址和端口号等参数,参数设置成功后,向MQTT服务器发送请求报文并与之建立连接。之后创建2个子线程,开始任务调度处理。最后等待子线程结束,子线程结束后为防止内存泄漏需将子线程销毁。

4.2.2 线程1设计

线程1负责向协调器定时发送Modbus心跳包数据。在OpenWrt系统中用POSIX Timer函数和signal信号函数相结合实现定时发送数据包,实现步骤如下:

1)使用timer_create()创建定时器,该函数创建的定时器属于进程本身,此函数的参数成员之一为struct sigevent *evp,改变evp的成员变量可执行不同的动作。

2)在定时器创建完之后,使用timer_settime()函数设置定时周期。

3)定时器到时之后signal()函数收到对应信号并执行相关的功能函数,在该函数中计算CRC校验码、封包、发送心跳包。

4.2.3 线程2设计

在线程2中由网关接收协调器的响应数据包,当读取串口数据未超时解析响应数据包,将解析的数据通过校验计算与数据包里的校验码相对比,校验正确则把数据写入SQlite3数据库,并向MQTT Broker发布数据消息话题。

4.3 远程服务器和MySQL设计

在远程服务器PC机中配置了MQTT Broker和MySQL,服务器程序中使用MQTT C 库提供的API函数建立MQTT客户端、连接MQTT Broker、订阅网关发布的数据消息,当消息到达时向数据库写入数据。

对于数据库的设计流程,整体基于MySQL的结构,设计步骤如下:

# mysql—uroot—p123456;连接数据库,—u指定用户,—p为用户密码。

#mysql>create database Embedded;创建名为Embedded数据库。

# mysql>use Embedded;使用该数据库。

# mysql>create table Sensor(

数据编号 int(4) not null,

温度 double not null,

电导率 double not null,

湿度 double not null);创建名为Sensor表,并向其中添加了4种数据字段。

在应用程序中需初始化MySQL数据库结构、连接已建立的数据库、插入指定的数据。

5 功能测试

在远程服务器PC机中打开3个命令窗口分别输入以下命令可查看订阅数据消息,其命令如下:

#mosquitto_sub—t 1/temperature—i localhost—p 1883

#mosquitto_sub—t 1/conductivity—i localhost—p 1883

# mosquitto_sub—t 1/humidity—i localhost—p 1883

-t指定订阅的数据消息话题,-i指定连接的MQTT Broker IP地址,localhost为本地MQTT Broker地址,1883为MQTT特定的消息服务器端口。

在服务器中通过MySQL命令查看应用程序向数据库写入的数据,MySQL中数据如图2。

图2 MySQL数据

6 结 论

本文提出了一种基于OpenWrt与ZigBee的远程分布式物联网数据监控系统,对于数据的存储设计了2种不同位置的数据库,在数据传输过程中为了保证数据传输的可靠性和准确性使用了MQTT和Modbus通信协议。该系统整体结构完善,适宜于在远程分布式环境中部署,具有一定的实际应用价值。

猜你喜欢

PC机线程网关
基于C#线程实验探究
基于国产化环境的线程池模型研究与实现
信号系统网关设备的优化
基于三菱FXPLC的感应淬火机床与PC机的串行通信实现
浅谈linux多线程协作
VC.NET下实现dsPIC单片机与PC机的通信
排除OLT设备登录故障
LTE Small Cell网关及虚拟网关技术研究
应对气候变化需要打通“网关”
VIVID3彩色超声仪结构原理及维修