农业物联网移动监控系统的研究与实现
2021-07-19万春旭
万春旭
摘要:在人力成本提升、农业从业者结构性短缺的今天,农业物联网成为有效提升农业生产效率的最佳手段之一。农业物联网移动化监控系统是农业物联网软件系统中的一部分,它让农业生产管理者在空间和时间上得到解放。该文分析了农业物联网移动化监控系统开发的核心技术,具体介绍了这些技术的特点和使用方法,同时总结了一套高效、易用的开发模式。
关键词:农业物联网;移动监控系统;Android
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2021)14-0004-03
1 背景
我国是一个农业大国,但不是一个农业强国。要把14亿人的饭碗端在自己的手里,需要大力发展现代化农业技术。从大力倡导发展农业机械化、到向以色列学习设施农业,再到现在全面发展智慧农业,我国农业在较短时间内实现了技术上的升级[1]。随着物联网、大数据、人工智能等技术在农业中的应用,让农业产业精准化、节约化、工业化,摆脱人力密集、靠天吃饭等传统农业的产业弊端。农业物联网具有技术成熟,开发成本低、建设收益明显等特点,在当今的农业产业中被广泛应用。它的典型应用场景有智能养殖、智能温室、农业产品跟踪溯源等[2]。农业物联网移动化监控系统是农业物联网中的软件部分,通过它可以实时、远程监控农业生产环境和流通环节等,节约劳动力成本,提升农产品产量和品质。很多农业企业在寻求高效低成本地开发一个农业物联网移动化监控系统的方法。
1 农业物联网技术
1.1 农业物联网技术架构
一个完整的农业物联网系统在技术架构方面,可分为感知层、传输层和应用层三个层次,图1展示了三个层的主要功能,以及层与层之间的逻辑关系。
感知层的核心功能是信息采集,传输层采用计算机网络技术和通信技术,是进行信息交换和传递数据的通路。应用层包括数据存储、数据分析、数据展示及任务执行等功能。农业物联网的三个层次分别赋予了物联网系统全面感知、可靠传输、有效优化及智能处理等特征。
1.2 农业物联网移动化监控系统
从项目工程建设角度,农业物联网系统可分为硬件和软件两大块。硬件包括感知层的信息采集设备、传输层的网络与相关设备、应用层的控制器和电机。软件平台包括云平台、大数据系统、专家决策支撑系统和物联网监控平台等[3]。大数据系统、专家决策支撑系统由于开发成本高,中小型农业物联网系统中一般租用公共平台或直接使用人工决策机制。云平台是一个必要部分,不同的云平台功能差异较大,有的只是一个数据存储和转发平台,有的在数据存储外拥有强大数据处理能力。云平台可以定制开发,也可以租用收费或免费公共云平台。农业物联网监控平台用于实时数据展示,环境数值预警,远程控制等。农业物联网监控系统的表现形式可以是PC软件、Web网站和移动应用等形式[4]。早期农业物联网监控平台只有PC软件,用户在农业生产环境边的监控室里,通过软件操控整个智能系统。后来发展为基于互联网的Web应用,通过网络远程控制。随着5G技术的应用,移动化监控应用成为标配,它在时间和空间上解放了农业生产。早期建设的农业智能化生产环境,在人力成本逐年提高的情况下,急需升级配置移动监控应用。一套高效率、低成本的农业物联网移动化监控系统开发模式,可以帮助农业企业快速搭建一个农业移动化监控系统。
2 农业物联网移动化监控系统开发关键技术
2.1 JSON数据格式
JSON 是存储和交换文本信息的语法,它与平台和语言无关,主要用于跨平台的数据交换,与XML类似,但它比XML更小、更快,更易解析。在基于Android的移动应用开发中,JSON体积小、传递速度快的特性,具有更大的优势,在农业物联网移动化监控系统开发中被广泛使用。移动监控系统与物联网云平台之间交换的数据大部分采用JSON格式。上传云平台时,需要把数据包装成JSON格式,从云平台取回JSON格式数后,需要从中解析出需要的数据。Android通过JSONObject类来生成和解析JSON格式数据,JSONObject类下有getString()、getJSONObject()和getJSONArray()三个方法用于处理不同数据类型。当数据嵌套多层时,需要从外到里一层层的解析。为提高开发效率和降低出错的可能,建议使用开源插件,常用的有Gson、JackJson、FastJson等几种。其中GSON是Google官方开发的Java类库,它实现了用面向对象的方式处理JSON格式数据,它可以很方便地实现JSON字符串与Java对象之间的相互转化。
2.2 网络访问与线程
农业物联网移动管理系统与物联网云平台需要进行频繁的数据交换,与其他多媒体类系统相比,农业物联网移动管理系统的网络访问数据量相对较少。因此,大部分物联网云平台采用URL通信方式。在Android 6.0以后的版本中通过HttpURLConnection实现HTTP请求,网络访问过程可分为以下几个环节:
1)生成URL类地址对象,具体语句为:URL url = new URL(url);
2)通过URL对象建立与服务器的连接:HttpURLConnection conn = (HttpURLConnection) url.openConnection();
3)设置HttpURLConnection的相關参数,例如请求方式、请求时限等;
4)从HttpURLConnection连接中取得数据输入流InputStream,由输入流读入字符输入流。输入的数据如果有中文,还需要对中文进行编码处理;
5)在线程中读入数据无法直接显示到界面中,需要使用Handler对象处理线程之间的消息处理。
由于网络访问的非即时响应特性,执行网络访问时需要开启子线程。网络访问与线程处理混合在一起,让实现难度加备。Android开发团队于2013年推出了综合的网络通信框架Volley,它适用于“一次网络通信中传输的数据量较少,但网络通信业务比较频繁的应用”,这一特点非常契合农业物联网移动管理系统的网络访问。Volley最核心的两个类分别是: JSON请求类:JsonObjectRequest和请求队列类:RequestQueue。RequestQueue主要负责网络请求的线程处理,所有网络请求都需要加入到RequestQueue队列中,才能被系统调度执行。JsonObjectRequest是一个Json格式的网络请求类,通过网络响应返回监听Response.Listener和Response.ErrorListener来处理网络通信结果。
RequestQueue myQue = Volley.newRequestQueue(context);
StringRequest stringRequest = new StringRequest(Request.Method.GET,url,
new Response.Listener
@Override
public void onResponse(String response) {
//网络请求成功后,回调处理代码在该方法中
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//网络请求失败后,回调处理代码在该方法中
}
});
stringRequest.setTag(tag);
myQue.add(stringRequest); //网络访问加入线程队列中
2.3 数据库技术
Android系统配备了SQLite数据库,它占用系统资源少、功能全面,同时也保留了JDBC操作方法和SQL指令体系。SQLite提供了两个数据库操作类,分别是SQLiteDatabase和SQLiteOpenHelper。SQLiteOpenHelper用于数据库的创建、打开和版本更新,但它是一个抽象类,不用直接使用,需要自己定义一个继承于它的类,并实现主要方法。SQLiteDatabase是一个数据库访问类,是SQLite数据库操作的基础,这个类里面封装了一系列数据库操作的API,通过它可以进行数据库相关操作,如添加、查询、更新、删除等[5]。SQLite类操作数据库时,需要自己撰写SQL语句,当数据表的字段较多时,编码与后期维护的工作量将非常大。ORMLite数据库框架采用“对象关系映射”方式管理数据库,数据库表与Java对象一一对应,通过使用Java类中的方法实现对数据表操作。Java类中的“属性”对应用数据表中的“字段”,ORMLite通过给Java类中的“属性”和“方法”添加Java注解的方式,让Java类与数据表之间建立映射关系,实现操作Java类的属性和方法就能直接改变数据表中的数据。下面这段代码是ORMLite“对象关系映射”的应用实例,数据表名称为:senseInfo,对应的类名为:SensenInfo。这个类里面的id属性,对应数据表中名为id的字段,该字段为自增类型主键。
@DatabaseTable(tableName = "senseInfo") //建立表与类之间一对一的关系
public class SenseInfo {
//建立字段名与类属性之间一对一的关系
@DatabaseField(generatedId = true,columnName = "id")
public int id;
//空的构造方法一定要有,否则数据库会创建失败
public SenseInfo(){}
}
2.4 数据的图表展示
将农业物联网系统采集到的数据以图表形式呈现出来,可以帮助管理者更好地了解不同数据间的比例关系和变化趋势,方便管理者做出合理的推断和预测。Android原生API支持图表种类多,但功能繁复,操作难度大。为了减少开发难度,推荐使用开源图表框架,如MPAndroidChart、achartengine、GraphView等,每种框架都有各自的特色,根据应用需要选择一种直接套用即可。MPAndroidChart因其功能强大和使用简单成为主流图表框架。它支持线状图、柱状图、散点图、柱状图、气泡图、饼状图和蜘蛛网状图,同时支持图表的缩放、拖动、选择和动画等运行功能。
MPAndroidChart中不同图表的生成方式不尽相同,但总体上可以归纳为7个步:step1:实例化图表对象-> step2:生成图中所有点的坐标数据(Entry组成的List)-> step3:生成数据轴标签(String类型组成的List,与上一步的List数量相等)-> step4:生成坐标点集生成一条线的数据集(DataSet)-> step5:由数据集生成图表数据源对象(Data)-> step6:把数据源加载到图表中-> step7:刷新图表。
2.5 App Inventor的快速搭建模式
前面介绍了农业物联网移动化监控系统开发中用到的数据库、网络、图表等开发技术,但对于项目开发经验不足的程序员,即使全部掌握了这些技术,要独立开发一个完整的项目,难度还是很大。如果遇上项目开发时间紧、技术能力不足、团队人员又少的情况,推荐使用可视化快速移动应用开发工具:App Inventor。App Inventor简称ai2,是谷歌公司开发的基于web的可视化Android系统应用开发工具,现转由麻省理工學院(MIT)运维。ai2采用的是在线编码+手机或模拟器测试的开发模式,本地计算机只需Java运行环境和浏览器,再配一个Android系统的手机用于项目测试。在线开发最核心的是服务器,ai2官方服务器在麻省理工,国内目前有两三个汉化的、持续更新并稳定运行的服务器,华南理工大学杨道全开发管理的WxBit汉化版(服务器地址为:https://app.wxbit.com/)运行比较稳定。
ai2中UI通过拖拽和属性设置方式实现组件的摆放和样式设计,功能逻辑采用图形化编程模式,有过乐高开发经验的人对这种方式会非常的熟悉。ai2外在表现形式是“图形化”“积木式”,但它本质上还是一个面向对象的编程语言,跳出积木编程思维,从面向对象的逻辑角度解构,ai2的项目结构如图2所示。组件和行为是一个应用的核心,变量、方法是一种编程手段和方式。ai2中有常用的标签、文本框、按钮、动画等可视化组件,还有传感器、数据库、网络访问等不可见的组件。事件和事件响应模块几乎涵盖了所有程序逻辑相关功能。能满足农业物联网移动化监控系统开发的大部分需求,但在数据存储和图表展示方面还需要利用其他资源配套使用。
ai2提供的网络微数据库是一个开发者共享数据库,采用“key:value”存储方式,如果遇到key相同时,后存的value会覆盖前面的value值。为了数据安全性,ai2为深入开发用户也提供了自己建立数据库的方法,官方数据库平台(http:// appinventorapi.com /create-a-web-database-python-2-7)上面有创建自己的网络数据库的详细介绍,按照上面的说明操作就可以建立起属于自己的部署在互联网上的数据库,而且与App Inventor的协议兼容,谷歌的云服务工具会分配给你一个网址,把网络微数据库中的网址改成这个网址,就可以访问个人数据库,并用它来创建基于网络的移动应用建立属于自己的互联网上的数据库。ai2网络微数据采用标准的HTTP请求来向服务器发送数据,如果要向网络微数据库里“保存数据”时,发送的头部参数为Accept:application/json,发送的数据为:["STORED","标签","值"]。如果要从网络微数据库中取数据时,发送的数据为:["VALUE", "标签"],根据这些特性,也可以自己编写网络数据库存取服务器。
ai2在图形化方面提供了最基础的图形绘制功能,从理论角度来说,通过这些线条、图形的绘制功能也能够画出一张图表来。但用这种模式绘制一张图表,就类似于凭借个人力量盖一座楼。要比较快捷的制作一张图表,可以借助一些图表专用工具,如Google Chart API和ECharts等。这两个工具都用于生成基本网页的图表,在ai2中需要借助“网络浏览”组件,通过浏览器组件展示静态图表。
3 结束语
农业物联网移动监控系統因为移动化远程控制的优势,成为新建的农业物联网系统的标配。同时,很多早期建设的农业物联网系统,也在做移动化升级。如何高效、低成本的开发一个实用性强的移动监控应用,是很多农业企业最关心的问题。使用本文给出的核心开发技术,农业企业信息化从业人员也能开发出实用的农业物联网移动监控系统,节约农业生产成本,从而助力乡村振兴。
参考文献:
[1] 赵春江.发展智慧农业 建设数字乡村[J].农机科技推广,2020(6):6-9.
[2] 亿欧智库.2018智慧农业发展研究报告——新科技驱动农业变革[EB/OL].[2020-04-08].https://www.iyiou.com/research/20180508555.
[3] 徐晓雨,张旭,朱勇.基于物联网技术的智慧农业监控系统设计[J].信息记录材料,2018,19(5):100-102.
[4] 王英杰,郑明辉.基于物联网技术的智慧农业管理系统设计[J].福建农业科技,2019(6):56-59.
[5] 刘剑英.基于Android的智能小车控制系统软件设计与开发[J].软件工程,2020,23(10):46-48.
【通联编辑:谢媛媛】