1. 引言
目前,国内外的野外信息采集系统的开发主要有以下三种方式:以单片机为核心进行开发的、在便携式计算机基础上进行开发的和基于PDA开发的信息采集系统 [1] 。基于单片机的开发方式简单实用、成本较低,但是功能比较单一,只能实现一个或几个要素的采集;便携式计算机的采集系统功能强大,但是系统体积较大,不太适合野外采集作业;基于PDA的嵌入式信息采集系统,轻便、小巧、可移动性强,功能也随着技术的进步逐渐增强,是未来信息采集系统的主要发展方向。
ZigBee是基于IEEE802。15。4标准的低功耗个域网协议。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。ZigBee是一种介于无线标记技术和蓝牙之间的技术提案。主要用于近距离无线通信。在数千个微小的传感器之间相互协调实现通信 [2] 。它主要具有功耗低,成本低,网络容量大,工作频段灵活,安全以及自动动态组网和自主路由等优势。因此在物联网领域具有非常强的可应用性。本文选用了ZigBee作为苹果果园信息采集系统的无线通信技术 [3] 。
2. 系统设计与实现
2.1. 系统总体设计
准确采集和掌握果园中的环境信息和果树的生长信息等是实现果园精细管理的前提。果园中的环境变化,对果树的生长影响很大,及时得到果园中的环境信息,有利于促进果树的健康生长和提高果品的质量 [4] 。本研究的研究目标是设计一套高效、科学、经济的果园信息采集系统。使用基于Android的无线手持终端PDA(果园信息移动采集系统)采集果树的多种环境信息,然后把数据传给服务器(果园信息远程接收系统)进行处理,同时在PDA上进行可视化展示。具体目标如下:
1) 设计并构建基于移动终端和物联网的果园信息采集系统
PDA通过串口连接到的ZigBee模块来采集ZigBee田间无线传感器网络采集得到的果树信息,使用PDA内置的GPS或者无线网络(基站定位、WIFI定位)获得果树位置信息(经度、纬度),同时通过PDA自带RFID (无线射频标签)阅读器读取果树的标签信息。获得信息后,PDA通过自定义的通讯协议把数据发向服务器,同时在PDA上更新地图,即更新果园边界信息、果树信息。
2) 设计并开发服务器端果园数据交换接口
服务器端提供与PDA交换数据的接口,提供给PDA所需果园地图和果树信息等数据;接收PDA上传的信息后,按照协议解包并把数据存入服务器端的数据库,同时将结果信息反馈至目标PDA。
为实现上述目标,本文从经济可行性、技术可行性、可维护性三方面进行了设计。本系统开发大量采用开源产品,从而将开发成本降到最低。果园信息远程接收系统采用Visual Studio IDE、C#语言进行开发,数据库采用MySQL,果园信息移动采集系统采用Eclipse IDE、Java语言进行开发。Android采用WebKit浏览器引擎,具备触摸屏、高级图形显示和上网功能,用户能够在手机上查看电子邮件、搜索网址和观看视频信息等,有强大的搜索功能和界面,可以说是一种融入全部Web应用的单一平台 [5] 。整体架构如图1所示。

Figure 1. The overall architecture of the apple orchard information collection system
图1. 苹果果园信息采集系统整体架构图
2.2. 果园信息移动采集系统设计及其主要功能实现
系统需要采集的信息为果园边界信息、果树信息,其中果园边界信息为边界的经度、纬度、边界点的索引以及采集时间。果树信息包含果树的基本信息(经度、纬度、RFID、采集时间)和属性信息(土壤温度、土壤湿度、空气温度、空气湿度等)。其中RFID通过RFID读取器读取,四个属性信息通过串口连接的ZigBee模块读取ZigBee网络的信息来获得。
2.2.1. 果园边界管理
果园边界管理主要是果园边界的增加、删除最近的一个边界、删除所有边界点等等。果园边界主要保存的信息是经度、纬度和索引值,索引值是指这个边界点为整个边界的第几个点。在绘制边界时,按照前后相连、首尾相连的形式绘制边界,边界点的顺序不能出现混乱。边界类使用百度地图提供的GeoPoint类,所有边界点保存在ArrayList
boundary对象中。
边界的删除,只提供删除所有边界点和删除最近的边界点。如果提供删除部分的话,很容易出现边界混乱的情况。提供删除最近的点可以减少因失误而造成的误差,删除最近点可以从尾部删除到头部(类似后退栈),但是不允许删除所有边界点中的几个点,即从中间删除点。当然,为了避免用户误删除,在重要的删除操作前都提供人性化的确认操作,以防止误操作。通过boundary。add()来添加边界点,通过boundary。remove(boundary。size()-1)来移除最近的边界点,通过boundary。clear()来删除所有的边界点。
2.2.2. 果树信息管理
果树的信息管理包括果树的增加、果树的删除、果树的编辑、果树的属性信息采集等等。果树操作单独封装成一个类,即TreeOperation类。增加果树基本信息时,首先判断该果树是否已存在,如果存在,则提示“该树信息已经存在”。如果不存在,则通过trees。add()函数新建果树信息。通过addTreeCollectInformation方法采集果树信息。updateTreeBase方法实现果树基本信息的更新。调用updateTreeBase方法删除指定的果树及其信息。当全部果树信息采集完成后,统一上传到服务器。
2.2.3. 果园数据管理
果园的数据管理,即数据的下载(数据接收)、数据解析、数据打包、数据上传(数据发送),也即数据交换协议的实现。协议实现建立在Socket之上。移动端数据上传模块流程如图2所示:

Figure 2. The process of mobile terminal data upload module
图2. 移动端数据上传模块流程
首先建立Socket连接,使用UTF-8编码获得输入流/输出流并发送数据。在Socket基础上,封装了CommandExector类,进行协议中描述的各种工作。比如,获得果园边界信息,发送果园边界信息。在发送数据前和获得返回数据后要对果园数据进行加工,即数据的打包与解析。以果园边界为例,讲解打包与解析。打包过程如下,首先,读取boundary对象中的GeoPoint对象的经纬度信息,按照“在boundary中的索引,经度,纬度,更新时间@下一条记录”把数据转换为String,然后通过CommandExector发送相应的命令。解析过程基本算它的逆过程,不过没有更新时间而已。从String中按照“@”分离一条记录,然后按照“,”分离一条记录中的经纬度,然后实例化一个GeoPoint对象,并把它添加到边界数组中。代码如下:
public class BoundaryParser {
/**
* 把客户端的边界点转换为String 数据格式为 使用@符号作为不同边界点区分符 索引点,经度,纬度,更新时间@下一条记录
* 1,10。3,12。2,2018-05-21 12:30:43@下一条记录
* */
public static String boundaryToString(ArrayList
boundary) {
StringBuilder sb = new StringBuilder();
int length = boundary。size();
if (length == 0) {
} else {
for (int i = 0; i < length; i++) {
sb。append(i + );// 第几个边界点
sb。append(boundary。get(i)。getLongitudeE6() * 1。0 / 1。0E6 + );// 经度
sb。append(boundary。get(i)。getLatitudeE6() * 1。0 / 1。0E6 + );// 纬度
SimpleDateFormat sdf = new SimpleDateFormat(
yyyy-MM-dd HH:mm:ss);
sb。append(sdf。format(new Date()));// updatetime
if (i != length - 1)
sb。append('@');// 用#分隔每条记录,最后一条记录不加#
}
}
return sb。toString();
}
2.2.4. 可视化管理
可视化管理主要是指地图的初始化、边界以及果树在地图上的可视化、图层的管理、定位管理等等。地图使用的是百度Android地图API,相关使用说明请参考百度地图开发者官网 [6] 。定位也使用百度定位API,该API支持GPS、无线基站、WIFI基站三种定位方式。图层有4个图层。这里有基本图层,显示基本的坐标信息;定位图层,显示定位的图层信息;树图层,显示当前树位置的图层;边界图层,显示果园边界的图层。百度地图初始化时,设置位置信息更新时间为15s(可人为点击菜单中的定位刷新、该功能不受15s时间限制),定位方式为GPS优先(其次为基站以及WIFI定位),交通图以及卫星图不可见,同时注册相应的监听,启动时自动定位到当前位置。为了不阻塞UI线程,定位采用异步定位,获得定位信息后,使用Handler发送更新地图信息,Handler收到消息,从而更新地图。
2.2.5. 硬件管理
硬件管理主要是读取RFID、读取ZigBee网络信息、读取设备IMEI等等。RFID可使用PDA自带的RFID阅读器进行读取,通过JNI调用libtiny-tools。so(即NDK编程)来实现相应的操作 [7] 。ZigBee网络信息主要包含果园的属性信息,即土壤温湿度、空气温湿度等。RS232 device为ZigBee模块,Converter为RS232串口转换器,Anroid Device为果园信息移动采集系统,果园信息移动采集系统必须工作在主模式,从模式无法接受和发送数据 [8] 。ZigBee网络信息读取功能主要通过ZigBee硬件部分实现,软件编写时主要是编写与ZigBee相连的串口操作即可 [9] 。ZigBee模块也采用NDK编程,通过JNI调用libserial_port。so来实现相应的操作
串口每次发送的数据形式如下:
$287b,3000,8112,3415,4197
$地址,空气温度,空气湿度,土壤温度,土壤湿度
2.2.6. 其他辅助管理
辅助管理主要包含加载页面的设计、用户登录、设置、帮助、操作日志、关于等等。程序的加载页面除了显示“系统正在加载中,请稍后…”外,还会随机的显示一条励志的句子,使用随机数,同时使用系统当前时间作为种子 [10] 。用户登录调用数据管理模块CommandExector进行登录以及获得任务编号。登录采用多线程进行登录,避免UI卡死。登录成功后,服务器返回登录凭据,果园信息移动采集系统把凭据存在OrchardCollectionConfig。accessTokenString中,之后每次进行请求时,都把凭据带上 [11] 。设置主要是进行服务器的IP、端口设置、ZigBee串口设置以及果园信息移动采集系统的退出确认设置。退出确认可防止程序误按而导致程序退出。帮助显示系统使用相关帮助,关于显示系统当前版本号。操作日志,在本地用SQLite数据库记录每次数据的下载上传情况,人为可刷新记录、删除所有记录。
2.3. 果园信息远程接收系统
协议实现建立在Socket之上,实现与果园信息移动采集系统实现基本相同,由于编程语言为C#,与Java稍微有些不同,思想大同小异。果园信息远程接收系统启动后,一直监听来自果园信息移动采集系统的请求,若有请求,则新建一个线程来处理该请求,防止阻塞其他果园信息移动采集系统的请求以及UI线程,同时继续监听其他果园信息移动采集系统的请求 [12] 。线程处理完请求后,自动结束线程。停止以及关闭窗体后,服务器停止监听。
3. 系统测试
系统测试平台如下:
果园信息远程操作系统:Windows 7旗舰版 32位 Service Pack 1;
果园信息移动操作系统:运行于富立叶CM380 PDA(Android 4.0)的Android程序;
数据库服务器:MySQL 5.6;
测试网络:WIFI以及GSM;
测试设备:富立叶CM380,zigbee模块,RFID标签。
果园信息远程操作系统,自动获取本机IP,默认端口为8012。可显示当前连接IP以及Log信息。启动以及停止按钮只有在服务器未启动和已启动的情况下生效。程序可最小化到托盘栏,方便程序后台运行。程序退出需要用户确认,防止误退出。主界面如图3所示。
数据库配置页面,配置信息不能为空,可对配置信息进行测试,测试数据库是否可以连接。界面如图4所示。
系统需要采集的信息为果园边界信息、果树信息,其中果园边界信息为边界的经度、纬度、边界点的索引以及采集时间。果树信息包含果树的基本信息(经度、纬度、RFID、采集时间)和属性信息(土壤温度、土壤湿度、空气温度、空气湿度等)。其中RFID通过RFID读取器读取,四个属性信息通过串口连接的ZigBee模块读取ZigBee网络的信息来获得 [13] 。
果树边界操作如图5所示,可以从菜单中选择增加,边界的最近点删除,边界的清空,删除确认等等。

Figure 5. The management of orchard border
图5. 果园边界管理
在GPRS状态下,果园数据上传时会出现有时会上传失败,究其原因,可能是由于果园地处2G网络信号比较弱的地区且有枝叶遮挡造成信号传输不稳定导致的 [14] 。在WIFI状况下,没有出现过上传以及下载失败的情况,比较稳定。
选择信号较强的近郊果园进行测试,果园信息远程接收系统程序没有出现问题。果园信息移动采集系统程序在CM710以及魅族MX2上运行基本稳定,偶尔会出现崩溃情形,由于出现概率极低,通过使用LogToFile把调试信息输出到文件,查实是因为没有网络访问权限,被其他软件(杀毒、安全等)劫持,暂时没有办法解决该问题 [15] 。
4. 结论
本文实现了一个基于移动终端和物联网的果园信息采集系统。系统包括移动端子系统和服务器端子系统:移动端子系统集成了基于ZigBee的果树环境信息采集传感器网络、果树RFID标签管理模块以及现场数据采集、管理和传输模块;服务器端子系统负责果园信息的远程数据接收和保存。系统试运行表明,运行于PDA端的嵌入式果园信息采集系统以及运行于服务器端的远程服务器端果园数据交换系统均运行可靠,工作稳定,可实现果园果树生长环境信息的采集与保存,可作为数字果园的原型系统进行推广和应用。
致谢
感谢郑立华老师及所有在写作期间给予我指导的老师们!
基金项目
国家自然科学基金——基于光谱学和机器视觉原理的苹果树营养及长势监测诊断机理与方法研究(31071330)。
NOTES
*通讯作者。