MicroPython在温室环境监测中的应用及实现

2019-06-11 09:13王立华孙少通
实验室研究与探索 2019年5期
关键词:线程温室大棚

王立华,孙少通,倪 雪,胡 月

(山东科技大学 电子通信与物理学院,山东 青岛 266590)

0 引 言

在资源较为有限的嵌入式硬件平台上的传统开发语言是C/C++,存在代码移植性差,开发周期长、维护成本高等缺点。伴随着嵌入式硬件平台计算能力的普遍提高,在嵌入式硬件平台上MicroPython的开发成为热点[1],并已经开始应用于教育、智能硬件等设计中。与传统编程语言相比,MicroPython语言与普通Python语言具有极佳的兼容性和天然的移植优势。同时Micropython还富有多种高级特性[2],比如闭包函数、列表解析、生成器、异常处理等。通过MicroPython提供的支持库,开发者可以快速控制硬件对象,而不用太多的关注底层,极大地降低了开发难度,提高开发效率。

现阶段我国的温室农业信息化、智能化程度较低[3-5],虽然在精准农业、环境监控等方面有一定的应用,但与发达国家相比仍存在较大差距[6-9]。温室大棚环境参数的有效监测可以提高农作物的生产效率,为农业大数据应用提供数据基础,对于提高我国温室农业水平具有重要意义[10]。

传统温室环境监测节点大都采用有线通信或较为复杂的节点间通信,具有成本高、布线复杂、布局不灵活等缺点[11-13],使用灵活性差。本文以温室环境监测需求为背景,针对以上监测节点的设计缺陷,对监测节点进行了软硬件设计,在操作系统的基础上使用MicroPython语言[14-16]实现快速开发。

1 系统结构与功能

检测节点的系统结构由检测节点、云服务器和移动端应用组成,如图1所示。

图1 系统结构框图

一般温室大棚并不具有良好的WiFi环境,所以与服务器的通信使用NB-IOT模块实现。检测节点分为多个节点,其中一个检测节点作为NB-IOT网关,负责数据的汇总以及与云平台的通信,两者之间采用TCP通信协议,节点间通信通过一主多从结构的NRF射频通信实现,在不进行通信时节点进入休眠状态以达到低功耗的目的。云服务器使用Onenet物联网云平台[17-18],在平台创建应用发布后可获得移动端应用。

1.1 检测节点的功能分析

检测节点由主控制器系统、传感器、通信模块、电源模块等组成,结构组成如图2所示。根据检测需求,有温、湿度、光照强度、风速和CO2浓度等传感器,分别用来采集环境信息并传输至NB-IOT网关。微控制器系统由单片机和外围电路组成,负责对采集数据进行传输和处理。通信模块根据节点类型的不同,有NRF射频模块和NB-IOT模块两种,分别负责节点间通信和与服务器的通信。电源模块用来给系统提供工作电源,为了实现灵活的配置节点采用锂电池供电。

图2 检测节点结构框图

1.2 云平台及移动应用功能分析

云平台与NB-IOT网关之间依照TCP通信协议进行通信,负责将数据进行处理和可视化,并提供了命令接口以实现对终端的远程控制。通过PC端网页的显示界面可以展示当前的环境参数和设备状态,支持数据导出,为大数据农业的实现提供了数据基础,结合大数据处理技术可以分析环境、气节与生产效率的关系。当环境参数达到设定的阈值时能够下达命令控制相关设备进行调节,并进行多种方式的通知,避免环境因素造成产业损失,在移动端应用中可以实现同样的功能。

2 系统功能实现

2.1 硬件设计

检测节点采用32 bit微控制器STM32F4作为主控,该芯片具有1024K Flash、192K SRAM,通过SDIO接口可扩展内存卡来扩展内存空间。最高运行频率可达168 MHz,能够满足操作系统和MicroPython的运行需求。为了使用方便,通过USB接口获取电源,将电压转换为3.3 V的系统工作电压,引出SW接口便于连接调试器进行软件的跟踪调试。各传感器的数据接口分别采用SPI、IIC、ADC、One-wire数据接口来实现数据读取,见表1。

表1 传感器/通信模块数据接口表

2.2 软件设计

MicroPython是Python3编程语言的一种精简而高效的实现,它被优化为在微控制器和受限环境中运行,目前已经在嵌入式系统上完整实现了Python3的核心功能。MicroPython在嵌入式系统上的应用还获得了一些操作系统的支持,在操作系统的软件结构中MicroPython作为一个软件组件存在,具有更好的可移植性。

传感节点分为采集结点和汇聚节点,分别进行数据的采集和上传任务。节点通过周期性的采集数据,通过确定的格式进行节点间传输。为了保证网络处于连接状态,在启动操作系统前创建用户任务循环检测TCP的连接状态,当检测到TCP连接断开时将再次进行连接。检测系统的软件控制流程如图3所示。

图3 控制程序流程图

2.2.1 基于RT-Thread的MicroPython实现

通过移植基于STM32F4硬件平台的实时操作系统,实现操作系统的底层控制,MicroPython作为操作系统的一个软件组件存在。系统对底层硬件初始化完成后,分别创建定时器线程、用户线程和空闲线程,在用户线程中挂载SD卡创建文件系统。初始化文件系统后执行msh_exec(py_main,strlen(py_main))命令,将任务指针指向文件系统的main.py文件,启动操作系统后开始运行main.py程序。操作系统启动过程示意图如图4所示。

图4 操作系统启动过程示意图

通过MicroPython提供的支持库可以实现对于基本对象的调用,例如UART、SPI、IIC对象的类方法提供了对于不同对象的具体操作。对于MicroPython支持较好的Pyboard之外的硬件,通常Machine库能够提供较好的支持。操作系统提供了很好的POSIX标准支持,所以MicroPython中很多模块可以在RT-Thread MicroPython上运行。本文以SPI对象为例,通过Machine库的使用来展示对于SPI接口控制对象的操作,控制过程如图5所示。

图5 硬件对象初始化信息图

2.2.2 MicroPython多线程的实现

其多任务的实现分为两种方式:①在进入MicroPython环境前创建任务线程,进入MicroPython环境后对线程进行监视和管理。②操作系统启动后直接进入MicroPython环境,使用thread库函数_thread.start_new_thread创建多任务并进行调度。在操作系统创建多线程任务后进入MicroPython环境不会影响原任务的运行。

3 实验分析

3.1 数据通信测试

在STM32F405硬件平台上移RT-Threa-d操作系统,移植Micropython组件实现主程序的运行环境。通过串口输出的信息表明能够在操作系统上运行Micropython程序,并且能够控制UART、SPI、ADC、One-wire、Pin等硬件对象。NB-IOT模块作为通信节点的网关,通过控制UART对象,实现对于物联网平台的数据汇总。数据展示界面可以在PC端实时查看,如图6所示。图6显示界面清晰简洁,能够较为直观的展示温室内的环境信息。当环境信息的某项超过设定的参数阈值时将触发云平台的阈值报警功能,以邮件或短信方式发出通知报警。

3.2 信息采集测试

以某农业园区黄瓜温室大棚为例进行应用测试,测试大棚占地面积为2 200 m2,共部署4个采集节点、一个汇聚节点,其中每个节点都配置2个温度传感器、湿度传感器,3个二氧化碳传感器,2个光照强度传感器。测试节点实时采集大棚中的环境信息,通过节点间通信传输至汇聚节点,最终汇聚节点负责将数据打包传输至云平台,PC端或移动端可以通过访问云端服务器获取数据展示界面。对大棚环境信息进行检测,图7展示了2018年9月14日11时光强传感器的测试数据,大棚内的温度为37 ℃,光照强度为770klx,湿度为74%,CO2浓度为602 mg/m3。根据环境信息记录可知,在10:40~11:30这段时间内,大棚内的光照强度有平稳变化,CO2浓度较为稳定,温室内温度逐渐上升,湿度呈现下降趋势,与当地的温室大棚内相应时节环境信息相符合。

图6 PC端环境信息展示界面

图7 温室大棚光照强度信息记录

4 结 语

本设计使用MicroPython编程语言完成了对温室大棚内的温、湿度、光照强度等环境信息的采集,系统通过NB-IOT网关将数据传输至物联网云平台,实现了在PC端和移动端的远程查看和环境量超阈值报警,能够准确监测环境信息数据。通过创建操作系统层基础任务循环检测TCP连接状态,可以在设备出现故障或断网时进行自动重启,较好地保证了网络连接的稳定性。通过本应用证明了MicroPython语言在嵌入式平台的实用性,与其他设计方案相比具有软件构建简单,开发周期短的优势,对于物联网应用的快速开发具有借鉴意义。

猜你喜欢
线程温室大棚
大棚妹子
大棚换茬季 肥料怎么选
谨防大棚房死灰复燃
现代温室羊肚菌栽培技术
苍松温室 苍松灌溉
苍松温室 苍松灌溉
基于C#线程实验探究
原地翻建大棚 注意啥
基于国产化环境的线程池模型研究与实现
线程池调度对服务器性能影响的研究*