CN110166975B - 基于无线网络及树莓派节点的农业物联网传感器通信方法 - Google Patents

基于无线网络及树莓派节点的农业物联网传感器通信方法 Download PDF

Info

Publication number
CN110166975B
CN110166975B CN201910538297.XA CN201910538297A CN110166975B CN 110166975 B CN110166975 B CN 110166975B CN 201910538297 A CN201910538297 A CN 201910538297A CN 110166975 B CN110166975 B CN 110166975B
Authority
CN
China
Prior art keywords
data
usb
sensor
node
network
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910538297.XA
Other languages
English (en)
Other versions
CN110166975A (zh
Inventor
张志斌
陈磊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inner Mongolia University
Original Assignee
Inner Mongolia University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inner Mongolia University filed Critical Inner Mongolia University
Priority to CN201910538297.XA priority Critical patent/CN110166975B/zh
Publication of CN110166975A publication Critical patent/CN110166975A/zh
Application granted granted Critical
Publication of CN110166975B publication Critical patent/CN110166975B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/4401Bootstrapping
    • G06F9/4406Loading of operating system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04WWIRELESS COMMUNICATION NETWORKS
    • H04W4/00Services specially adapted for wireless communication networks; Facilities therefor
    • H04W4/30Services specially adapted for particular environments, situations or purposes
    • H04W4/38Services specially adapted for particular environments, situations or purposes for collecting sensor information
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/70Reducing energy consumption in communication networks in wireless communication networks

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Arrangements For Transmission Of Measured Signals (AREA)

Abstract

本发明属于农业物联网设备及信息处理技术领域,公开了一种基于无线网络及树莓派为节点农业物联网传感器通信方法,采用树莓派开发平台作为采集节点,负责采集各个USB接口的数据并进行汇总处理;基于对ZigBee协议栈及无线芯片进行分析,搭建无线传感器系统的终端节点,构建基于USB接口的协调器;协调器使UART方式与上位机进行通信。本发明设计的无线传感器系统不仅使用方便,其树莓派平台的片上系统也可对传感器数据进行二次处理,可为进一步进行传感器节点智能化处理奠定基础;本发明无线网络协议需具有低功耗、低成本、支持大量网上节点、安全等特性,两节点在短距离内可稳定通信。

Description

基于无线网络及树莓派节点的农业物联网传感器通信方法
技术领域
本发明属于农业物联网设备及信息处理技术领域,尤其涉及一种基于无线网络及树莓派节点的农业物联网传感器通信方法,具体涉及一种基于ZigBee无线网络及树莓派为节点的农业物联网传感器系统及通信方法。
背景技术
目前,最接近的现有技术:
农业是中国的基础产业,我国政府一直都非常重视农业发展,但城镇化和土壤荒漠化使可耕种土地面积逐年减少。在不能增加耕地面积的情况下,通过现代化科技提高农作物产量就显得尤为重要。
然而,根据多年的调查显示,由于城市快速发展等原因,我国耕地面积正逐年下降。仅在1996年到2003年七年间,全国耕地面积减少近1亿亩,年均减少近0.8%。除城镇化和土地荒漠化外,我国在农业种植过程中大量使用农药、化肥等无机物导致耕地质量下降。而过度使用化肥、农药等无机物使土地盐碱化严重,其他植株抗药性也逐年增加,富余未吸收的无机物随雨水化为化学污染物。根据现阶段预测,我国的可耕地面积仍会逐年减少。
在这种严峻情形下,以小规模粗放劳作为主的传统方式依然是我国农业的主要生产、经营模式。由于传统农业生产规模小、组织化程度低,导致我国农业劳动生产率低下。而作为已实现农业现代化的发达国家,美国、法国、德国的人均劳动力所负担耕地面积分别是我国的145倍、55倍、45倍。同时,由于我国现阶段正处于人口老龄化阶段,同样也引起农业老龄化问题。农业老龄化加大农业生产中的劳动力成本,使农产品价格逐年变高。但城镇化、土地荒漠化等原因导致可耕地减少,要实现现阶段正常的粮食安全保障,必须通过其他方式在现基础农作物产量上增产30%以上。因此,快速推进我国农业现代化、加快转变农业发展方式,是我国农业发展的当务之急。
农业现代化是指从传统农业向现代农业的转变,以现代科学、现代工业为基础,通过计算机技术、生物技术、机械自动化等方式装备农业。用现代经济科学来管理农业,创造高产、优质、低成本的农业生产系统,使其成为一个具有高生产效率、可合理利用资源的农业生态系统。农业现代化不仅仅是技术的改变,而是涉及广泛且全面的历史过程。它既是历史概念,也是全球概念。农业现代化的目标是建立发达农业、建设富裕农村、为广大人民创造良好生活环境。
农业现代化利用先进设备取代传统劳动力,大大提高农产品的生产效率。在生产阶段,通过监测环境数据,根据气象、土壤等农作物生长的关键因素合理分配资源。最终实现营销、贸易、工农业的一体化,通过现代化提高农业经营效率,增强农业抵御自然和市场风险的能力。
在上世纪90年代,美国已开始对无线传感器网络的研究。主要由美国加州大学、康奈尔大学等用于军事方面的研究,通过无线传感器网络来实现对战时环境监测、敌我识别、复杂天气下军队指挥等重要功能。之后数年,又有多个美国高校开始对无线传感器网络进行研究,无线传感器网络逐渐由军用向民用过渡。在发展无线传感器网络的同时,由美国国家标准技术研究所和IEE传感技术委员会联合制定传感器网络的相应协议和标准,并于1997年推出无线传感器网络的软硬件接口IEEE1451标准。在2002年的夏天,英特尔公司的In-Suit小组在“大鸭岛”放置30多个传感器用于对岛上的气候以及候鸟的迁徙进行无线监控。经过几十年的发展,其无线传感器网络技术已经相当成熟并被大量的用于农业上,其中比较著名的例子是位于美国的佐治亚州的智慧农场系统。此系统结合基于无线网络的视频监控以及GPS精准农作物种植技术。除此之外,美国还建成农业领域中最大的网络系统。
目前,关于无线传感器网络的文献大体类似,都是基于简单的片上系统。如董亚超设计一套基于JN5121模块用于环境监测的无线传感器网络。JN5121模块处理传感器采集到的传感器数据,经A/D转换后通过I2C串行总线传输到无线收发模块,通过无线收发模块将数据发送到上层网络。王小强设计一套基于CC2530芯片的无线传感器网络。传感器采集到的数据首先通过CC2530芯片集成的8051微处理器进行处理,处理后的数据经串行总线传输到无线收发模块。A Sabo等人设计一套用于监测农作物病虫害和土壤温湿度的无线传感器网络。该系统的前端节点基于STM32处理器开发,用于数据的采集。节点采集到的数据通过ZigBee模块发送到基站,节点数据到达基站后经USB接口传输到中央处理器进行处理。
综上所述,现有技术存在的问题是:
(1)传感器在现代化农业中有着举足轻重的地位,高速发展的传感器技术和繁杂的生产厂商生产的传感器接口不尽相同。不同平台的传感器不能兼容,这大大增加农业信息化的难度和成本。
(2)现有技术中,由于直接使用片上系统内部集成的模数转换器ADC会占用CPU的大量资源。数据过多会导致传输延迟过高,甚至出现脏数据等情况。
(3)传感器生产厂家没有统一的规范,不同厂家生产的传感器接口不同。这导致其中很大部分的传感器不支持即插即用;同时传输效率低,不稳定,不利于二次滤波。对底层过度依赖,如果协调器更换,则需要重新写协调器的底层代码。
(4)目前大部分实现的无线传感器网络大多基于简单的片上系统。简单片上系统的处理器大多为精简微处理器,如JN5121模块采用16Mz,32位RISC微处理器;CC2530使用8K的增强型8051内核;stm32处理器最高处理主频为183Mz,以上处理器的资源相较落后。
(5)系统可拓展功能较少,虽然功耗低、易于实现,但只能简单的采集、传输传感器数据。
解决上述技术问题的难度:
本发明的难点在于树莓派节点的硬件驱动实现以及协议栈应用层通讯格式设计。
硬件驱动包含IIC层和USB层,在IIC层中规定IIC数据包在IIC总线上的传输方式(读或写)以及与IIC硬件的通讯格式。USB层中规定USB设备与主机之间的通讯方式(批量传输)。最后根据当前Linux内核版本,编写Makefile文件将驱动代码编译成内核可加载的模块。
在协议栈层中根据实际情况设计了用于通讯的四套指令。本发明的通讯格式包含手动获取网络参数、终端节点主动发送网络参数、新设备加入发送网络参数以及传感器数据参数。前三种指令为对当前网络状况的获取和调试,最后一种指令用于发送当前传感器数据包。除去设计的通讯指令外,为协调器和路由节点编写不同指令处理函数。
解决上述技术问题的意义:
将不同传感器的接口统一为USB接口,对使用者来说不仅操作简便,而且方便管理。通过外置ADC转换模块,将数据转换任务由处理器交给转换芯片来减少转换时对处理器资源的占用。本发明使用树莓派作为传感器数据的处理核心,其1.4GHz的64位四核处理器可快速的执行应用程序,管理者可以通过HDMI、键盘、鼠标直接操作,或者通过SSH简介操作。除此之外,丰富的树莓派资源可支持本发明根据实际需求进行功能拓展。
发明内容
针对现有技术存在的问题,本发明提供了一种基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法。本发明该系统运行稳定,可准确地传输田间各项数据,可为科研人员提供足够数量和精度的生态环境数据。
本发明是这样实现的,一种基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法,所述基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法包括:
步骤一,对I2C型接口、电压型接口和RS485型接口统一化为USB接口;采用树莓派开发平台作为采集节点,负责采集各个USB接口的数据并进行汇总处理。
步骤二,基于对ZigBee协议栈及无线芯片进行分析,搭建无线传感器系统的终端节点,及采用无线芯片和CH341模块构建基于USB接口的协调器。
且依据实际情况对协议栈进行选择。
步骤三,用于远程数据接收的上位机采用Python编写,且协调器使用UART方式与上位机进行通信。
进一步,步骤二中,ZigBee协议栈通过传感器采集终端节点、路由节点、传感器采集协调器与PC机之间的传感器数据通讯,完成对光照度、土壤湿湿度度、风速、土壤水分农作物环境数据的实时采集、处理和传输。
进一步,步骤二ZigBee协议包括:
1)设备初始化,当无线传感器网络启动时,先调用Zmain.c文件中的main函数,在main函数函数中分别对引脚、硬件抽象层、MAC层、系统看门狗、应用程序框架、网络地址进行初始化,并在初始化结束后进入操作系统抽象层轮询任务。
2)操作系统抽象层轮询,当系统初始化结束后,在主函数中通过调用osal_start_system()进入启动操作系统抽象层。
3)执行自定义任务,主处理函数根据任务号和事件对消息进行分类,并调用相应的处理函数;回复函数定时向协调器发送连接标志,告知协调器仍处于连接状态。
4)执行传输指令,通过Z-Stack协议栈实现传感器数据在上位机和下位机之间的无线传输。
进一步,步骤1)设备初始化中,通过调用osal_int_disable函数禁止使用中断,该中断函数的参数为中断事件的id;当有中断事件发生时,不调用与该中断关联的服务程序;HAL_BOARD_INIT函数负责对CC2530主板的相关设备进行配置,对系统的时钟源、系统时钟和LED初始化。
HalDriverInit函数负责对初始化硬件抽象层的相关硬件驱动,包括定时器、AD转化、DMA、串口、按键、SPI总线驱动。
ZMacInit函数用于初始化协议栈的MAC层,初始化MAC子系统和与MAC层连接的相关设备。
在WatchDogEnable函数内通过看门狗标志位开启系统看门狗。
进一步,步骤2)中,在osal_run_system函数内,通过tasksEvents[idx]指针变量,指向存放相应事件idx的存储空间,osal_run_system函数用于保存当前任务的状态。
Z-Stack协议栈中设置15个非系统事件,SYS_EVENT_MSG为系统事件标志。定义回复消息事件,用于定时向协调器回复自身状态。
tasksArr数组在初始化时初始为0,tasksArr的第idx个事件处理函数对应tasksEvent的第idx个任务的事件;tasksCnt为任务数量;通过不断循环判断当前任务是否有事件发生,若发生事件则跳出循环执行事件,若没有发生则继续循环。
进一步,步骤3)中,ZDO_CB_MSG来自ZDO层,包含获取网络和节点信息;SerialApp_ProcessZDOMsgs函数用于判定当前终端节点是否绑定成功;当有按键被按击时会触发KEY_CHANGE事件,按键处理函数SerialApp_HandleKeys负责对系统重置;ZDO_STATE_CHANGE触发条件为网络状态的改变,当新设备加入时主动向协调器发送自身的网络信息。
当接收到其他节点的数据包时触发AF_INCOMING_MSG_CMD事件,该事件的处理函数SerialApp_ProcessMSGCmd(MSGpkt)中包含除对所有对传感器数据的接收操作外,还对数据包进行解析和判断。
命令头为0xFE FE时,此命令为网络参数指令,进而匹配命令码,并根据命令码执行不同操作。
当命令头为0x0101时,此命令为传感器数据传输指令,包含完整的传感器数据。
判断当前节点是否为协调器,若为协调器,将数据重新封装后加入RSSI和数据链路的值并把封装好的数据发送到串。
若该节点不为协调器,则获取当前节点父设备的IEEE地址,并继续向协调器投递传感器数据。
传感器数据采集数据完成后写入串口,若CC2530芯片监测到串口有数据,则接收数据并发送到协调器。
进一步,步骤4)执行传输指令中,包括:
a)网络参数的手动获取,由协调器广播到该网络下各个节点,用以获取当前网络下所有节点的网络状态。
b)网络参数发送,由终端节点主动发送,数据内容为节点的网络地址和父节点地址;当节点收到协调器发出的网络参数获取命令后,节点发向协调器出此指令。
c)新设备加入,由新加入的设备主动发送,告知协调器新加入设备的相关地址。
d)传感器数据,由终端节点主动发送;每个传感器设置唯一的标号,上位机通过节点标号判断当前数据来自哪个传感器。
本发明另一目的在于提供一种实施基于ZigB无线网络及树莓派节点的农业物联网传感器通信系统包括:
I2C驱动体系结构用于实现在I2C体系结构中设备与总线适配器的通讯。
重要结构体,通过结构体实现I2C核心、I2C适配器和I2C设备间的通信。
Linux USB驱动模块,负责管理上层设备驱动传下来的数据或将USB主机控制器的数据处理后传递给上层设备。
进一步,I2C驱动体系结构包括I2C设备驱动模块、I2C总线驱动模块和I2C核心接口。
I2C核心接口为I2C总线和I2C设备的中间枢纽,用于实现在I2C体系结构中设备与总线适配器的通讯,并为I2C总线和I2C设备驱动提供在内核中的注册和注销方法。
I2C总线驱动模块负责管理I2C总线传输事务和为I2C设备提供适配器;I2C总线适配器连接若干个物理I2C设备。
I2C设备驱动模块为客户端驱动,为各种I2C硬件提供驱动;通过挂接在受CPU控制的I2C适配器,I2C设备与CPU交换数据;I2C设备驱动由结构体IIC_driver和IIC_client实现,结合硬件实现结构体内的成员函数。
本发明的通讯函数为对I2C数据通讯进行原子操作(读操作和写操作),通过匹配不同操作将USB设备传来的数据封装为I2C数据流。I2C核心注册成功后,I2C数据以通讯函数规定的方式在I2C总线上传输。从而实现I2C数据通过I2C核心在I2C适配器和I2C设备之间的通讯。
进一步,重要结构体,包括:
i2c_client结构体,定义挂载在I2C总线下的从设备,一个结构体对象代表一个slave设备。
i2c_driver结构体,一个i2c_driver对应多个设备。
i2c_adapter结构体,定义I2C适配器的相关内容。
i2c_algorithm结构体,定义主设备传输数据的算法,成员函数master_xfer用于产生I2C周期访问信号。
usb_device结构体,包含USB设备的相关信息。
usb_interface结构体,包含USB接口的相关信息。
i2c_ch341_usb结构体,包含usb_device结构体、usb_interface结构体、USB端点地址以及数据输入输出缓冲区。该结构体用于连接I2C层和USB层,并暂时存储需要转换的数据。
Linux USB驱动模块,包括USB主机控制器、USB核心和USB设备。
USB核心负责管理上层设备驱动传下来的数据或将USB主机控制器的数据处理后传递给上层设备;还负责USB系统的初始化以及USB设备的匹配。
USB主机控制器负责USB总线传输、处理USB状态、管理状态并报告状态信息以及对数据串行和解串行;根据协议将数据传递到USB核心和接收USB核心传来的数据,同时主机控制器也会为新加入主机的设备分配唯一的编号。
USB设备为主机提供多种多样的附加功能,标准的USB设备包括配置、端点和接口,且一个USB设备驱动只对应一个USB接口。
本发明的USB驱动部分主要包含USB探测函数、USB资源释放函数你、USB断开连接处理函数以及对USB相关类的绑定。其中最重要的为USB探测函数,当USB设备被正确识别,驱动程序的探测函数就会被调用。主要工作为获取接口的相关端点信息、保存当前接口、建立IIC适配器描述、绑定IIC适配器、指定IIC传输速率等。
综上所述,本发明的优点及积极效果为:
本发明首先对传感器接口标准化。目前市场上所供应的传感器大多分为I2C型接口、电压型接口、RS485型接口,由于USB技术已经成熟且相对于其他接口更方便,故本发明对I2C型接口、电压型接口和RS485型接口统一化为USB接口。采用树莓派开发平台作为采集节点,负责采集各个USB接口的数据并进行汇总处理。然后,基于对ZigBee协议栈及CC2530无线芯片进行分析和总结,搭建无线传感器系统的终端节点,及采用CC2530和CH341模块构建基于USB接口的协调器。且依据实际情况对协议栈进行设计,使其更符合实际要求。最后,用于远程数据接收的上位机采用Python编写,且协调器使用115200波特率的UART方式与上位机进行通信。Python的高移植性使上位机的使用不限于具体的系统,可为该系统进一步跨平台开发奠定基础。
本发明设计的无线传感器系统不仅使用方便,其树莓派平台的片上系统也可对传感器数据进行二次处理,可为进一步进行传感器节点智能化处理奠定基础。
本发明的研究内容来源于导师的国家自然科学基金项目“基于嵌入式FPGA的农业自动车辆智能4D视觉导航型研究(31760345)”。主要工作是参考IEEE 1451标准设计传感器的描述文件,选取合适的USB转换芯片后设计并实现其底层驱动。通过合适的无线网络通信协议实现传感器采集终端节点、路由节点、传感器采集协调器与PC机之间的传感器数据通讯,完成对光照度、土壤湿湿度度、风速、土壤水分等农作物环境数据的实时采集、处理和传输。
设计的描述文件需简单易懂且易于读取,系统可根据该文件识别传感器类型。因本发明设计的系统主要涉及多种类型的传感器,所选取的USB转换芯片需支持多种类型通信或支持多类型拓展。其无线网络协议需具有低功耗、低成本、支持大量网上节点、安全等特性,两节点在短距离内可稳定通信。
对于CC2530芯片中8051微处理器相对目前其他类型处理器可用资源较少、性能落后的问题,本发明并没有像多数文献一样单独使用CC2530芯片。而是采用树莓派开发平台作为采集节点,CC2530芯片只作为无线收发器。本发明通过外接AD模块来解决上一小节AD转换会占用大量的处理器资源的问题,处理器直接处理转换后的数据。这不仅减少数据过多时CC2530芯片出现高负荷而导致延迟过高、可能出现脏数据等问题,也为以后对数据的二次处理做好铺垫。上位机采用Python3.7编写,由于Python语言的高移植性,使上位机采集程序可跨平台应用。
附图说明
图1是本发明实施例提供的基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法流程图。
图2是本发明实施例提供的USB架构图。
图3是本发明实施例提供的控制传输事务图。
图4是本发明实施例提供的中断传输事务图。
图5是本发明实施例提供的URB流程图。
图6是本发明实施例提供的I2C传输代码流程图。
图7是本发明实施例提供的单相写代码流程图。
图8是本发明实施例提供的双相读代码流程图。
图9是本发明实施例提供的探测函数代码流程图。
图10是本发明实施例提供的Z-Stack工作流程图。
图11是本发明实施例提供的主函数代码流程图。
图12是本发明实施例提供的任务调度流程图。
图13是本发明实施例提供的任务流程图。
图14是本发明实施例提供的自定义任务代码流程图。
图15是本发明实施例提供的光照数据代码流程图。
图16是本发明实施例提供的读操作代码流程图。
图17是本发明实施例提供的传感器描述文件图。
图18是本发明实施例提供的写操作代码流程图。
图19是本发明实施例提供的上位机功能方框图。
图20是本发明实施例提供的系统结构图。
图21是本发明实施例提供的驱动显示图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
传感器在现代化农业中有着举足轻重的地位,高速发展的传感器技术和繁杂的生产厂商生产的传感器接口不尽相同。不同平台的传感器不能兼容,这大大增加农业信息化的难度和成本。
现有技术中,由于直接使用片上系统内部集成的模数转换器ADC会占用CPU的大量资源。数据过多会导致传输延迟过高,甚至出现脏数据等情况。传感器生产厂家没有统一的规范,不同厂家生产的传感器接口不同。这导致其中很大部分的传感器不支持即插即用;同时传输效率低,不稳定,不利于二次滤波。对底层过度依赖,如果协调器更换,则需要重新写协调器的底层代码。
针对现有技术存在的问题,本发明提供了一种基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法,下面结合附图对本发明作详细的描述。
如图1所示,本发明实施例提供的基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法,包括:
S101:对I2C型接口、电压型接口和RS485型接口统一化为USB接口;采用树莓派开发平台作为采集节点,负责采集各个USB接口的数据并进行汇总处理。
S102:基于对ZigBee协议栈及无线芯片进行分析,搭建无线传感器系统的终端节点,及采用无线芯片和CH341模块构建基于USB接口的协调器。
且依据实际情况对协议栈进行选择。
S103:用于远程数据接收的上位机采用Python编写,且协调器使用UART方式与上位机进行通信。
步骤S102中,ZigBee协议栈通过传感器采集终端节点、路由节点、传感器采集协调器与PC机之间的传感器数据通讯,完成对光照度、土壤湿湿度度、风速、土壤水分农作物环境数据的实时采集、处理和传输。
步骤S102ZigBee协议包括:
1)设备初始化,当无线传感器网络启动时,先调用Zmain.c文件中的main函数,在main函数函数中分别对引脚、硬件抽象层、MAC层、系统看门狗、应用程序框架、网络地址进行初始化,并在初始化结束后进入操作系统抽象层轮询任务。
2)操作系统抽象层轮询,当系统初始化结束后,在主函数中通过调用osal_start_system()进入启动操作系统抽象层。
3)执行自定义任务,主处理函数根据任务号和事件对消息进行分类,并调用相应的处理函数;回复函数定时向协调器发送连接标志,告知协调器仍处于连接状态。
4)执行传输指令,通过Z-Stack协议栈实现传感器数据在上位机和下位机之间的无线传输。
步骤1)设备初始化中,通过调用osal_int_disable函数禁止使用中断,其参数为中断事件的id;当有中断事件发生时,不调用与该中断关联的服务程序;HAL_BOARD_INIT函数负责对CC2530主板的相关设备进行配置,对系统的时钟源、系统时钟和LED初始化。
HalDriverInit函数负责对初始化硬件抽象层的相关硬件驱动,包括定时器、AD转化、DMA、串口、按键、SPI总线驱动。
ZMacInit函数用于初始化协议栈的MAC层,初始化MAC子系统和与MAC层连接的相关设备。
在WatchDogEnable函数内通过看门狗标志位开启系统看门狗。
步骤2)中,在osal_run_system函数内,通过tasksEvents[idx]指针变量,指向存放相应事件idx的存储空间,osal_run_system函数用于保存当前任务的状态。
Z-Stack协议栈中设置15个非系统事件,SYS_EVENT_MSG为系统事件标志。定义回复消息事件,用于定时向协调器回复自身状态。
tasksArr数组在初始化时初始为0,tasksArr的第idx个事件处理函数对应tasksEvent的第idx个任务的事件;tasksCnt为任务数量;通过不断循环判断当前任务是否有事件发生,若发生事件则跳出循环执行事件,若没有发生则继续循环。
步骤3)中,ZDO_CB_MSG来自ZDO层,包含获取网络和节点信息;SerialApp_ProcessZDOMsgs函数用于判定当前终端节点是否绑定成功;当有按键被按击时会触发KEY_CHANGE事件,按键处理函数SerialApp_HandleKeys负责对系统重置;ZDO_STATE_CHANGE触发条件为网络状态的改变,当新设备加入时主动向协调器发送自身的网络信息。
当接收到其他节点的数据包时触发AF_INCOMING_MSG_CMD事件,该事件的处理函数SerialApp_ProcessMSGCmd(MSGpkt)中包含除对所有对传感器数据的接收操作外,还对数据包进行解析和判断。
命令头为0xFE FE时,此命令为网络参数指令,进而匹配命令码,并根据命令码执行不同操作。
当命令头为0x0101时,此命令为传感器数据传输指令,包含完整的传感器数据。
判断当前节点是否为协调器,若为协调器,将数据重新封装后加入RSSI和数据链路的值并把封装好的数据发送到串。
若该节点不为协调器,则获取当前节点父设备的IEEE地址,并继续向协调器投递传感器数据。
传感器数据采集数据完成后写入串口,若CC2530芯片监测到串口有数据,则接收数据并发送到协调器。
步骤4)执行传输指令中,包括:
a)网络参数的手动获取,由协调器广播到该网络下各个节点,用以获取当前网络下所有节点的网络状态。
b)网络参数发送,由终端节点主动发送,数据内容为节点的网络地址和父节点地址;当节点收到协调器发出的网络参数获取命令后,节点发向协调器出此指令。
c)新设备加入,由新加入的设备主动发送,告知协调器新加入设备的相关地址。
d)传感器数据,由终端节点主动发送;每个传感器设置唯一的标号,上位机通过节点标号判断当前数据来自哪个传感器。
本发明提供一种实施基于ZigB无线网络及树莓派节点的农业物联网传感器通信系统包括:
I2C驱动体系结构用于实现在I2C体系结构中设备与总线适配器的通讯;
重要结构体,通过结构体实现I2C核心、I2C适配器和I2C设备间的通信;
Linux USB驱动模块,负责管理上层设备驱动传下来的数据或将USB主机控制器的数据处理后传递给上层设备。
进一步,I2C驱动体系结构包括I2C设备驱动模块、I2C总线驱动模块和I2C核心接口。
I2C核心接口为I2C总线和I2C设备的中间枢纽,用于实现在I2C体系结构中设备与总线适配器的通讯,并为I2C总线和I2C设备驱动提供在内核中的注册和注销方法。
I2C总线驱动模块负责管理I2C总线传输事务和为I2C设备提供适配器;I2C总线适配器连接若干个物理I2C设备。
I2C设备驱动模块为客户端驱动,为各种I2C硬件提供驱动;通过挂接在受CPU控制的I2C适配器,I2C设备与CPU交换数据;I2C设备驱动由结构体IIC_driver和IIC_client实现,结合硬件实现结构体内的成员函数。
进一步,重要结构体,包括:
i2c_client结构体,定义挂载在I2C总线下的从设备,一个结构体对象代表一个slave设备。
i2c_driver结构体,一个i2c_driver对应多个设备。
i2c_adapter结构体,定义I2C适配器的相关内容。
i2c_algorithm结构体,定义主设备传输数据的算法,成员函数master_xfer用于产生I2C周期访问信号。
Linux USB驱动模块,包括USB主机控制器、USB核心和USB设备。
USB核心负责管理上层设备驱动传下来的数据或将USB主机控制器的数据处理后传递给上层设备;还负责USB系统的初始化以及USB设备的匹配。
USB主机控制器负责USB总线传输、处理USB状态、管理状态并报告状态信息以及对数据串行和解串行;根据协议将数据传递到USB核心和接收USB核心传来的数据,同时主机控制器也会为新加入主机的设备分配唯一的编号。
USB设备为主机提供多种多样的附加功能,标准的USB设备包括配置、端点和接口,且一个USB设备驱动只对应一个USB接口。
下面结合具体实施例对本发明作进一步描述。
实施例
1、基于树莓派的采集节点:
相较于其他树莓派版本,3B+版本具有运算速度快、功耗低、扩展性强等特点,故本发明采用树莓派3B+做为采集节点来处理传感器采集到的数据。
1.1)传感器以及相关硬件:
本发明主要应用于农作物的生长环境监测,基于导师环境监测项目的传感器有CO2、光照、土壤水分、空气温湿度、土壤盐碱度、风速风向、雨量、蒸发量总计八个传感器。以上传感器大致可分为三种传感器类型:I2C型传感器、电压型传感器和RS485型传感器。I2C型传感器主要包含光照、空气温湿度传感器。电压型传感器主要包含CO2、土壤水分、土壤盐碱传感器。RS485传感器主要包含风速风向、雨量、蒸发量传感器。由于相同类型的传感器传输方式和计算方式类似,为减少重复工作本发明每种类型各选取一个传感器。
1.1.1)I2C型传感器:
I2C型传感器选取光照传感器,该传感器的核心为BH1750芯片。该芯片基于标准的I2C通信协议,具有接近视觉灵敏度的分光特性。该芯片采用先进的A/D转换技术转换采集数据并通过智能滤波算法对数据进行滤波。除此之外,该芯片还具有光源依赖性弱、红外线影响较小、极小的误差变动、稳定的除光噪音功能以及广泛的光输入范围等特点。被广泛的应用在液晶电视、台式电脑液晶显示器、数码相机等电子产品中。
1.1.2)RS485型传感器:
RS485型传感器选取风速传感器。风速传感器的原理为红外测速,风叶底部具有均匀挡板,通过计算一分钟内风叶挡板遮挡红外线的频率推算当时的风速。本发明使用聚碳风速传感器,其具有外形轻便、便于携带和组装的特点。此传感器外壳为聚碳材料,不仅防锈防腐而且也没有传统ABS塑料容易老化的问题。该设备有侧出线和底出线两种安装方式,本身有模拟量和RS485两种输出方式。该传感器被广泛应用于对农作物生产、船舶、码头等环境的风速监测。为区别其他传感器模拟量输出,风速传感器采用RS485输出方式。
1.1.3)电压型传感器:
电压型传感器选取土壤水分传感器。该传感器对土壤水分进行测量基于三个不锈钢探针在土壤中的导电率。测量方法采用FDR频域法,可实时精确测定各种土壤不同剖面的水分含量,水势和田间持水量以及准确测定饱和土壤含水量和作物凋萎含水量。传感器内置信号采样及放大功能,采集数据以模拟电压输出。用户接口简洁、方便。其外型小巧轻便,便于携带和连接。
通过对USB硬件调研,最终选取CH341模块作为数据转换器。CH341芯片是一个USB总线与I2C总线的转接芯片,通过USB总线提可供异步串口、打印口、并口以及常用的两线和四线等同步串行接口。该模块具有支持全速USB设备、电压可调、成本低等特点,可用于为计算机提供I2C接口,或直接通过USB总线与普通串口通过信。但官方资料中并未提供Linux系统下I2C的驱动代码,需根据实际情况开发驱动程序。
1.2)ZigBee技术:
在物联网中,设备与设备的通信存在两类协议。第一类协议是接入协议(传输协议):负责子网内设备间的组网及通信。这类协议包括:ZigBee,WIFI,蓝牙。第二类协议是通信协议,负责通过传统互联网与服务器、APP或设备进行交换数据,包括HTTP,MQTT,WEBSOCKET、XMPP、COAP。而ZigBee相较于其他协议具有低成本、低功耗、鲁棒性、可自组网等特点。本发明选取ZigBee协议栈作为无线网络的传输协议。
1.3)ZigBee协议:
ZigBee协议是一个基于IEEE 802.15.4标准的高级通信协议,基于该协议可创建一个短距离、低功耗的无线网络。ZigBee协议采用IEEE802.15.4标准的MAC层和PHY层,支持树型、网型、星型等三种网络拓扑结构。根据输出功率和环境因素的影响,基于ZigeBee协议的设备传输距离在10-100米左右。ZigBee设备传输速率取决于其工作频段,当处于2.4GHz时,其理论传输速度达到最大的250kpbs。
ISO/OSI模型中有七层,但ZigBee协议为实现低功耗、低数据速率的无线网络,并没有采用全部模型,而是在其基础上划分物理层、媒体访问层、网络层、应用层等。各个层之间通过SAP(服务访问点)与相邻层通信,当前层可通过SAP获取下层的数据或为上层提供特定服务,ZigBee设备在工作时,不同层之间运行的任务不同,通过上下层之间数据的请求和传输共同完成指定的任务。每层的服务主要完成两种功能:根据它的下层服务要求,为上层提供相应的服务;根据上层的服务要求,对它的下层提供相应的服务。各层服务通过服务原语来实现。
ZigBee协议的物理层基于IEEE 802.15.4标准,该标准规定物理层包含一个物理层管理实体(PLME)用于提供数据接入点服务(PD-SAP)和管理接入点服务(PLME-SAP);媒体接入层和物理层一样,也包含一个媒体接入层管理实体。该实体负责维护与媒体接入子层相关的管理目标数据库,也就是MAC子层的个人局域网络信息数据库;其网络层主要负责网络的搭建、分配网络地址、管理网络拓扑结构和维护网络路由表等。与物理层和媒体接入层不同,网络层有数据服务实体(NLDE)和管理服务实体(MLME)两个服务实体;应用层包含应用子层、应用程序框架和ZigBee设备对象三个部分。应用子层提供网络层与应用层之间的接口并提供应用子层数据实体(APSDE)和应用子层管理实体(APSME)。在应用程序框架内ZigBee设备通过APSDE-SAP收发数据[19]
Z-Stack是TI公司开发的符合ZigBee分层协议标准的协议栈,该协议栈是ZigBee协议的具体实现。除Z-Stack协议栈之外,还有其他具体协议栈的实现,主要由Freakz协议栈、Contiki操作系统和TinyOS等,但Z-satck协议栈相较于其他协议栈具有底层透明性高、安全性高、自组网快等特点,使开发人员可把精力放在应用开发而不需要关注协议栈的内部。这些是本发明选择Z-Stack作为系统的软件开发平台的主要原因。
1.4)CC2530芯片:
CC2530芯片是一个真正片上系统(SOC)的解决方案,主要适用于2.4-GHz IEEE802.15.4应用、ZigBee和RF4CE应用。该芯片具有高达4.5dBm的输出功率、优秀的数据接收灵敏度、高抗干扰特性、多种低功耗模式、多种闪存尺寸等特点,除上述内容外还包含一整套外设,其包括2个USART、12位ADC和21个通用GPIO等。它构建的网络节点不仅自适应强,且总成本相较于其他芯片更低。该芯片除优秀的RF性能来支持低功耗的无线通信外,还集成业界增强型8051MCU微处理器,可对数据进行简单的处理。CC2530芯片还可配备TI公司的标准网络协议栈来简化无线网络的开发,使无线开发人员可更快的开发出无线应用。
虽然CC2530芯片有一个增强型的8051微处理器,但只有8K的RAM以及有限的ROM。这些资源只能简单的处理传感器数据,当对于一些需要A/D转换的传感器时,转换数据会使用大部分CPU资源,导致数据传输效率低下。随着现代化农业发展,所需要的数据量庞大,传统的8051的微处理器已经完全“不够用”。故本发明的采集节点采用性能优异的树莓派开发平台采集并处理传感器数据,并不过多的使用8051微处理器,使得CC2530芯片本身的资源主要用于数据的传输,减少的数据的错传、误传,提高数据传输的可靠性。
本发明的软硬件平台以及对传感器的选取。采集节点的核心为树莓派开发平台,开发系统为基于Debian Linux的树莓派官方系统。传感器以类型区分为I2C型传感器、电压型传感器和RS485型传感器,CH341芯片作为转换芯片,只需编写相应的USB驱动即可实现USB总线数据到I2C总线的转换传输,最后介绍ZigBee相关技术,并选取合适的协议栈和无线传输硬件。
2、USB驱动设计与实现:
2.1)I2C接口:
I2C为内部集成总线(Inter-Integrated Circuit)的英文缩写,是由飞利浦半导体公司(现为恩智浦半导体公司)在1928年设计的一种多主多从、双相同步的计算机串行总线,被广泛应用于外围设备间短距离、低速传输。常见的I2C总线速度有100kbit/s标准模式和400kbit/s快速模式,除此之外也可自定义传输速率。
I2C总线的物理结构由串行时钟线SCL和串行数据线SDA组成,允许使用5V或3.3V电压,也可使用其他电压系统。I2C协议中串行时钟线起到非常重要的作用,在串行数据线上接收或发送一个字节后,被寻址的从设备可将串行时钟线拉低,表明它尚未准备好接收下一个数据。而与从设备通信的主机必须等到串行时钟线被拉高才能继续向从设备发送数据,I2C总线在传送数据过程中共有四种类型信号,它们分别是:开始信号、停止信号、重新开始信号和应答信号。
I2C传输事务由一个或多个消息组成,每条消息都包含开始信号和一个停止信号。每个消息都只能包含读操作或写操作,若此事务只包含一个消息,则被称为读事务或写事务。若一个事务内不仅包含读消息还包含写消息,该事务被称为组合事务。当从设备有内部寄存器地址时,使用组合事务对其进行读取操作。大部分I2C设备不区分组合事务和作为单独事务的相同消息,只要从设备检测到停止信号认定此次事务传输结束[25]
在I2C总线系统中,寻址字节由从设备寄存器的七位地址和读写指令位组成。通过组合事务读取从设备寄存器数据时,主机首先通过写操作将需读取数据的寄存器地址和写指令写入从设备。从设备接收到寻址字节后将写指令和寄存器地址分别提取出来,根据接收到的地址将对应寄存器的数据写入I2C输出缓冲区中。然后,主机再发起一次读操作,直接读取从设备缓冲区里的内容。与组合事务读取寄存器数据相比,向寄存器写数据只需写事务即可。由主机将包含寄存器地址、写指令和写入数据一并写入从设备,从设备分别提取出地址、指令和数据,通过判断写指令将数据写入指定的寄存器内。由于I2C总线根据硬件地址进行读写操作,所以,理论上I2C总线上不能出现物理地址相同的两个I2C设备。但在实际操作中,可通过仲裁的方式决定哪个设备先通信。
2.2)USB接口:
USB全称通用串行总线(Universal Serial Bus),为英特尔公司联合多家公司在1996年推出的一种规范计算机与外围设备之间连接、通信的总线标准。基于该标准的设备具有支持热插拔、标准统一、携带方便等特点,使USB接口及其相关外设发展迅速。从1994年到现在的25年间,已经从USB 1.0版本发展到目前的USB 3.2版本,外观也发生翻天覆地的改变。当厂商正积极开发USB 3.2的相关衍生版本时,USB-IF(USB Implement Forum)联盟在2019年3月4日发布USB 4.0规范。传输速率不同是各个USB版本间最大的差异。
以下是不同版本间的传输速度:
1995年,由英特尔、IBM、康柏、微软、NEC、迪吉多和北方电讯等七家公司组成的USB-IF联盟共同提出第一代USB协议规范。该规范规定USB数据传输速率为1.5Mbit/s,无检测功能。但因USB协议规范刚被提出,支持该规范的硬件厂商较少,这导致很少会有主板厂商会在主机板上设计USB接口。
2000年4月,由康柏、惠普、英特尔、朗讯、微软、NEC、飞利浦等公司共同制定并发布第二代USB规范。该规范下的理论传输速度可达480MB/s,但受限于BOT传输协议和NRZI编码方式,实际传输速度只能在35MB/s左右,但仍是USB 1.1设备传输速度的四十倍左右。在2003年,USB-IF联盟将传输速度只有12Mbps的USB 1.1重新命名为USB 2.0Full Speed(全速版),而真正意义上的USB 2.0重新命名为USB 2.0High Speed(高速版)。同时扫描一张大小为40M的图片,使用高速版USB 2.0的扫描仪只需半分钟,而使用全速版USB 2.0的扫描仪则需要四分钟左右。
USB 3.0是由英特尔等公司发起的第三个主要修订版本。相较于USB 2.0高速版,由于USB 3.0引入全双工数据传输,其理论传输速度可达640MB/s。不同于USB 2.0的四线结构,USB 3.0额外增加四条线,除VBus和GND用于供电,其余三对均用于数据的传输。通过额外增加的两对数据线,USB 3.0可同步全速地进行读写操作。
2.3)I2C驱动体系结构:
I2C的时序和硬件结构都较为简单,但在Linux系统中实现却很复杂。在Linux系统中,I2C驱动体系结构由I2C设备驱动、I2C总线驱动和I2C核心三部分组成。
I2C核心是I2C总线和I2C设备的中间枢纽,它提供一种通用的、与平台无关的接口。通过该接口可实现在I2C体系结构中设备与总线适配器的通讯,并为总线和设备驱动提供在内核中的注册和注销方法。
I2C总线驱动主要负责管理I2C总线传输事务和为I2C设备提供适配器。I2C总线适配器的本质是一个物理设备,连接若干个物理I2C设备,每一个适配器对应一个驱动程序,该程序描述适配器与I2C设备之间通信方式。I2C总线驱动不会与其他设备通信,只会等待设备驱动对其内部函数进行调用。
I2C设备驱动也称为客户端驱动,有用户驱动模式程序和普通驱动程序两种实现方式,宏观上是为各种I2C硬件提供驱动。通过挂接在受CPU控制的I2C适配器,I2C硬件设备可与CPU交换数据。I2C设备驱动主要由结构体IIC_driver和IIC_client实现,结合硬件实现结构体内的成员函数。而在Linux系统下的驱动文件i2c-dev.c中提供一个通用的I2C设备驱动程序,该程序提供一个字符设备的应用层访问接口,用户通过此接口可实现对遵循标准I2C协议的设备进行读写操作。
在Linux系统下I2C设备驱动程序主要过程为设备初始化、I2C设备注册、适配器连接、I2C设备探测、I2C设备检测和加入I2C子系统。
2.4)重要结构体:
I2C体系结构中通过结构体实现I2C核心、I2C适配器和I2C设备间的通信。本发明采用的结构体如下所示:
2.4.1)i2c_client结构体。该结构体定义挂载在I2C总线下的从设备,一个结构体对象代表一个slave设备。
2.4.2)i2c_driver结构体。该结构体与i2c_client是一对多的关系,一个i2c_driver可对应多个设备。
2.4.3)i2c_adapter结构体。该结构体定义I2C适配器的相关内容。
2.4.4)i2c_algorithm结构体,该结构定义主设备传输数据的算法,其成员函数master_xfer用于产生I2C周期访问信号。
2.5)Linux USB驱动框架:
USB驱动架构与I2C架构类似,本发明采用USB主机控制器、USB核心和USB设备组成的架构如图2所示。
USB核心是整个USB驱动程序的核心,负责管理上层设备驱动传下来的数据或将USB主机控制器的数据处理后传递给上层设备。除此之外,USB核心还负责USB系统的初始化以及USB设备的匹配[44]。USB主机控制器主要负责USB总线传输、处理USB状态、管理状态并报告状态信息以及对数据串行和解串行。其中最重要的功能是根据协议将数据传递到USB核心和接收USB核心传来的数据,同时主机控制器也会为新加入主机的设备分配唯一的编号。USB设备为主机提供多种多样的附加功能,标准的USB设备包括配置、端点和接口,且一个USB设备驱动只对应一个USB接口。
2.6)USB驱动逻辑结构和传输方式:USB设备的逻辑结构包括设备、配置、接口和端点。
每个USB设备都有一个用于描述USB设备接口相关类、出厂信息、当前版本号和协议的唯一标示符。除标示符外,每个USB设备都还包含多个配置信息,不同的配置实现设备的不同功能,配置由一个或多个接口组成。接口由多个端点组成,不同的接口代表该设备的不同功能。端点是USB硬件体系中最基本的形式,主机与从设备只能通过端点通信。不同端点间的通讯是USB总线数据传输的基础,为防止数据传输错误,驱动程序根据设备地址和端点号为每个端点设置唯一的地址。USB系统初始化时主机通常使用端点0发送初始化指令和一些基本的控制,其余端点只能在向主机报告完各个端点的特性后才能被使用。
USB的数据传输方式包括控制传输、中断传输、批量传输、等时传输四种传输方式,本发明使用控制传输初始化USB设备、批量传输事务传输传感器数据的方式完成USB接口的数据传输。当设备第一次连接主机时,本发明采用控制传输方式读取设备的相关信息、提供状态指令等,并由主机控制器自动为设备分配唯一编号。一次完整的数据传输包含建立、数据传输、回复状态三个阶段。在建立阶段发送建立请求包,通知设备做好数据传输准备。之后发送DATA0数据包,DATA0数据包含获取设备描述符、设备状态等命令。最后由设备自动发送应答。控制传输事务图3所示。
本发明采用批量传输的方式在USB总线传输传感器数据。批量传输会使用总线上的未分配带宽,当总线忙时用于批量传输的带宽较小,数据传输速度会变慢。批量传输同样也分为三个阶段,如图4所示,在标志阶段由主机发出请求令牌。如果是输入令牌,则是设备到主机的请求,如果是输出令牌,则是主机到设备的请求。在数据阶段的DATA0和DATA1是相同的数据,当DATA0丢失时可用DATA1代替。在握手阶段ACK代表正常响应、NAK代表没有正确传送、STALL代表主机出现不可知错误。
2.7)USB请求块:
URB是USB请求块(USB request block)的缩写,每一次USB设备间的数据传输请求都基于URB。如果把一次USB数据在总线的传输看成有线的数据传输,则URB相当于电波也就是信息的载体。URB结构体是USB驱动实现中非常重要的结构体。
USB客户端驱动无法与设备直接通信,必须通过URB实现异步的数据接收或发送。客户端驱动程序创建请求,并把它提交给USB驱动程序进行处理。URB结构体包含此次请求的详细信息和已完成请求的状态信息,客户端驱动通过URB执行数据传输等操作。实际驱动开发时可为一个端点分配多个URB或多个端点重用一个URB。本发明中一个完整的批量传输URB处理流程如图5所示。
2.8)驱动实现:
结合上文相关内容,本发明实现I2C数据在USB总线上的的传输驱动。该驱动主要有I2C接口和USB接口两部分,I2C接口负责获取I2C数据包,数据包内为对I2C硬件的读写操作。对数据包进行封装,然后以适配器的形式向USB接口提供封装好的数据。USB接口主要定义设备的链接、探测、断开,并实现对I2C适配器数据的接收以及端点间的数据传输。为连接I2C接口和USB接口本发明定义USB_ch341_IIC结构体,该结构体实现I2C数据存储、适配器的声明、USB端点的定义、USB接口的声明等,其结构体的内容如下:
2.9)I2C接口驱动:
I2C接口驱动主要实现对数据的封装,以及为USB层提供适配器接口。但仅仅有I2C适配器是没有任何意义的,因为I2C数据的访问是以规定的时序进行的。通过Linux系统提供的IIC_algorithm结构体,绑定通信函数ch341_i2c_xfer来控制适配器产生特定的访问时序。其出厂时,CH341芯片中已对I2C数据流的一些操作进行硬件定义。一个完整的对I2C硬件的读写必须包括I2C数据流标志、开始标志、输出标志位、地址位、输入标志位、停止标志、结束标志。本发明设计的总线传输函数的代码流程图6所示。
在ch341_xfer函数中通过强制类型转换struct usb_ch341_I2C*dev=(structI2C_ch341_usb*)adapter->algo_data获取当前适配器,调用ch341_i2c_check_dev函数检测当前设备。主机对从设备的操作主要有读操作和写操作,读写操作使用的数据包个数不同。在消息封装过程中,通过匹配上层传来的I2C数据包的个数和读写标志位对数据进行相应的处理。本发明通过宏定义标志位判断当前数据是否为I2C数据流,其相应的数据由官方的芯片文档给出。相关宏定义标志如下。
I2C数据封装时根据上层数据包的标志位对数据进行两种不同的封装,一种匹配到写操作时的数据封装,另一种匹配到读操作的数据封装。封装操作主要是将I2C数据流标志位、开始信号、结束信号、数据等存入USB设备结构体的输出缓冲区中。本发明设计的单相写代码流程图如图7所示。
在单相写中dev->out_buf为要向对应USB设备输出数据的缓冲区,在该缓冲区内,通过宏定义标志位声明此数据流为I2C数据流。最后,通过USB总线传输函数ch341_xfer传输I2C数据流。ch341_xfer函数定义数据在USB总线上的传输方式,即通过USB设备的输入输出端点批量传输数据。与写时序不同,在I2C的读时序里包含一个虚拟写的操作。所以在执行读操作时需要使用两个数据流,第一个数据流用于执行虚拟写,第二个为直接读操作。虚拟写填充完寄存器地址后不在设置停止标志位和结束标志位,而是直接调用USB总线传输函数。本发明设计的双相读操作代码流程图如图8所示。
2.10)USB接口驱动:
不同于I2C接口驱动,USB驱动更多涉及硬件匹配方面的设置。在本发明设计的USB驱动中,通过自定义ch341_usb_probe函数对已连接的USB设备进行探测,并根据当前接口获取该设备的端点地址。然后,绑定I2C适配器。最后,通过总线传输函数设置当前I2C设备间数据传输速率。本发明设计的ch341_usb_probe探测函数的代码流程图如9所示。
除探测函数和传输函数完整的驱动代码外,还需要断连函数、内存释放函数。当硬件断开时调用断连函数,删除I2C适配器,将USB的接口置空,注销USB设备,最后,调用内存释放函数释放掉探测函数中申请的内核地址。如果没有内存释放函数释放掉申请的内核地址,程序可能因内核地址错误而崩溃。
2.11)驱动内核编译:
在Linux系统中,通过gcc对驱动代码直接编译是不够的。因为Linux对硬件的操作由内核控制,所以需要将编译好的驱动模块注册到内核中。Linux内核中有两种加载驱动的方法[48],第一种为静态加载,即将编写好的驱动代码直接放入相应的驱动目录中,修改此驱动目录下的Kconfig文件,加入对该驱动文件的配置。最后,运行驱动目录下的Makefile文件,将驱动静态注册到内核中。第二种为动态加载,即首先将驱动代码编译为驱动模块,然后通过insmod命令将该驱动模块动态链接到内核中。由于静态加载驱动模块时需要编译整个内核,调试或者卸载都没有动态加载效率高,故本发明使用动态加载的方式,在内核中注册驱动模块。
Linux属于单内核结构,动态加载内核模块的提出是为弥补单核拓展性与可维护性差的缺点。其原理为在系统运行时将模块动态的链接到内核,并作为内核的一部分在内核空间内运行。在编译驱动模块时需要安装内核头文件,通过内核头文件就可调用相同版本的内核函数。但值得注意的是,一个Linux发行版会有多个内核版本,要安装的内核头文件版本务必与内核版本相同,否则会引起模块编译错误。
本发明的采集节点基于树莓派官方系统Raspbian,内核版本为最新的4.14.79-v7+版本,通过apt-get install linux-headers-rpi安装树莓派官方最新的内核头文件。为方便使用本发明将编译代码写入Makefile文件中,该代码首先指定内核头文件地址,当make的目标为所有文件时,通过-C$(KERNEL_DIR)指明跳转到源码目录下的读取该目录下的Makefile,并继续执行当前目录下的Makefile代码。当make的目标为clean时,删除编译模块时生成的所有文件。本发明设计用于编译驱动模块的详细代码如下:
本发明从底层介绍I2C接口和USB接口在Linux系统中的驱动体系结构以及主机与从设备间的通信方式。通过分析相关I2C驱动代码和USB驱动代码,本发明实现对I2C硬件的数据包的定义和封装以及I2C数据包以批量传输的方式在USB总线上传输,最终实现采集系统对传感器数据的接收。
3、无线网络通信的设计与实现:
无线网络通信是本发明的关键环节之一,只有保证协调器和终端节点稳定通信才能确保数据传输的及时性和准确性。
3.1)Z-Stack软件架构:
通过IAR新建Z-Stack软件项目,在控制台中会有14个目录文件,这些目录下又分为许多用于存储相关实现代码的子目录。不同目录实现的功能不同,以下为每个目录实现的具体功能:
APP:应用层目录,用户在此目录下创建相关的无线网络应用。此目录除包含用户自定义的应用文件外,还包含协议栈应用层的相关内容。
HAL:硬件抽象层目录,此目录包含CC2530开发板硬件的相关配置和驱动文件,并为上层提供操作硬件的函数接口。
MAC:MAC层目录,此目录包含协议栈MAC层的相关参数配置文件。由于Z-Stack的MAC层不开源,其相应的MAC库接口也在此目录中以文件的形式给出。
MT:通过此目录下给出的接口,可直接与其它层通信。
NWK:网络层目录,此目录包含与网络相关的参数配置以及维护当前网络的相关文件。
OSAL:协议栈的操作系统抽象层目录,在此目录下包含用于轮询的定时器接口以及对系统任务初始化的相关文件。
Profile:应用程序框架层目录。
Security:安全层目录,此目录包含两个文件。第一个文件为安全服务商提供接口,另一个为键值哈希功能提供接口。
Services:地址处理函数目录。
Tools:工作配置目录,此目录下包含存储器配置文件、通用编辑配置文件、协调器设备配置文件、终端节点配置文件和路由节点配置文件。
ZDO:此目录包含ZigBee设备应用程序接口文件、ZigBee设备的参数配置文件和相关的ZigBee网络管理文件等。
ZMAC:MAC层目录,此目录包含与MAC层相关的接口文件。
Zmain:主函数目录,此目录下包含项目的主函数。
Output:输出文件目录,此目录的文件由IDE自动生成。
3.2)协议栈工作流程:
Z-Stack协议栈采用基于事件轮询机制的操作系统思想来构建。当初始化各层之后,系统进入低功耗模式,在事件发生时唤醒系统并进入中断处理发生的事件,事件处理结束后继续进入低功耗模式。如果同时发生多个事件,通过判断事件优先级逐个处理。整个Z-Stack主要工作流程如图11所示,大致分为系统启动、OSAL初始化和启动、进入任务轮询这三个阶段。
3.3)设备初始化:
当无线传感器网络启动时,会先调用Zmain.c文件中的main函数,在该函数中分别对引脚、硬件抽象层、MAC层、系统看门狗、应用程序框架、网络地址等进行初始化,并在初始化结束后进入操作系统抽象层轮询任务。本发明主要涉及对硬件抽象层和操作系统抽象层的操作,为减少资源的浪费,本发明设计的主函数对以上两层进行初始化。主函数中对硬件抽象层和操作系统抽象层初始化的代码流程图如12所示。
通过调用osal_int_disable函数以禁止使用中断,其参数为中断事件的id。当有中断事件发生时,不会调用与该中断关联的服务程序;HAL_BOARD_INIT函数负责对CC2530主板的相关设备进行配置,主要对系统的时钟源、系统时钟和LED等初始化;HalDriverInit函数负责对初始化硬件抽象层的相关硬件驱动,其中包括定时器、AD转化、DMA、串口、按键、SPI总线等驱动;ZMacInit函数用于初始化协议栈的MAC层,主要用于初始化MAC子系统和与MAC层连接的相关设备;在WatchDogEnable函数内通过看门狗标志位开启系统看门狗。
3.3)操作系统抽象层:
操作系统抽象层是协议栈的核心,Z-Stack的任意一个子系统都作为操作系统抽象层的一个任务。当系统初始化结束后,在主函数中通过调用osal_start_system()进入操作系统抽象层。该函数主要调用osal_run_system()函数启动操作系统抽象层。图13为本发明设计的任务调度流程图。
在osal_run_system函数内,通过tasksEvents[idx]指针变量,指向存放相应事件idx的存储空间,该函数用于保存当前任务的状态。Z-Stack协议栈中最多可设置15个非系统事件,SYS_EVENT_MSG为系统事件标志。本发明除系统事件外定义回复消息事件,用于定时向协调器回复自身状态。tasksArr数组在初始化时初始为0,tasksEvent和tasksArr这两个数组里的内容是一一对应的,tasksArr的第idx个事件处理函数对应tasksEvent的第idx个任务的事件。tasksCnt为任务数量,该值由开发者根据实际定义的任务数量自动赋值,本发明为默认的七个任务。通过不断循环判断当前任务是否有事件发生,若发生事件则跳出循环执行事件,若没有发生则继续循环。本发明自定义的任务数组内容如下。
3.4)自定义任务设计:
SerialApp_Process任务是本无线网络系统中的核心任务,故本节将详细讲解其相关内容。本发明中传感器数据的采集及处理都是由树莓派开发平台负责,CC2530芯片只负责传感器数据在节点以及协调器之间的传输。树莓派开发平台和CC2530芯片之间通过串口进行通信。故在此任务中不仅有对无线数据接收、发送的处理事件还包含串口通信事件。本发明设计的传感器数据传输任务流程图如图14所示。
该任务的主处理函数根据任务号和事件对消息进行分类,并调用相应的处理函数。回复函数定时向协调器发送连接标志,告知协调器仍处于连接状态。本发明设计的详细事件及处理代码流程图如图15所示。
ZDO_CB_MSG是指来自ZDO层的信息,主要包含获取网络和节点信息。本发明的SerialApp_ProcessZDOMsgs函数用于判定当前终端节点是否绑定成功。当有按键被按击时会触发KEY_CHANGE事件,本发明的按键处理函数SerialApp_HandleKeys负责对系统重置。ZDO_STATE_CHANGE触发条件为网络状态的改变,为方便调试,本发明设计当新设备加入时会主动向协调器发送自身的网络信息。
当接收到其他节点的数据包时会触发AF_INCOMING_MSG_CMD事件,该事件的处理函数SerialApp_ProcessMSGCmd(MSGpkt)中包含除对所有对传感器数据的接收操作外,还对数据包进行解析和判断。为区别不同数据和命令,本发明在4.4小节设计四套不同指令。根据命令头的十六进制数判断该指令的用途,当命令头为0xFE FE时说明此命令为网络参数指令,进而匹配命令码,并根据命令码执行不同操作。当命令头为0x0101时说明此命令为传感器数据传输指令,包含完整的传感器数据。最后判断当前节点是否为协调器,若为协调器,将数据重新封装后加入RSSI和数据链路的值并把封装好的数据发送到串口。若该节点不为协调器,则获取当前节点父设备的IEEE地址,并继续向协调器投递传感器数据。
本发明的传感器数据由采集节点主动发送,间隔5秒采集节点对数据采集一次。采集数据完成后写入串口,若CC2530芯片监测到串口有数据,则接收数据并发送到协调器。本发明设计的串口接收收发数据关键代码如下。
3.5)传输指令设计:
在应用层,本发明设计四套指令用以区分不同的操作。网络参数相关的指令格式均为命令头+命令码+数据内容,传感器数据格式为命令头+数据。为防止其他数据干扰,命令头和命令码为十六位的十六进制数。本发明的详细指令格式及参数如下。
第一种为网络参数的手动获取,由协调器广播到该网络下各个节点,用以获取当前网络下所有节点的网络状态。本指令仅用于对当前网络节点状态的获取,为方便调试,在数据内容中并没有指定具体参数。命令头为0x FE FE,命令码为0x 7F D1,为与其他参数格式相同,数据内容可设置0x 00 00。
表1 手动读取网络参数格式
T
第二种为网络参数发送,由终端节点主动发送,数据内容为节点的网络地址和父节点地址。当节点收到协调器发出的网络参数获取命令后,节点发向协调器出此指令。该指令的命令头为0x FE FE,命令码为0x 7F B1,数据内容为该节点的物理地址(8位)、网络地址(2位)以及父节点地址(2位)。
表2 主动网络参数格式
第三种为新设备加入,由新加入的设备主动发送,告知协调器新加入设备的相关地址。命令头为0x FE FE,命令码为0x 6E B1,数据内容为该节点的物理地址(8位)、网络地址(2位)以及父节点地址(2位)。
表3 新设备加入参数格式
第四种为传感器数据,由终端节点主动发送。命令头为0x 01 01,为提高数据的传输效率并没有设计传感器数据的命令码。数据内容为光照数据(4位)、土壤水分数据(2位)、风速(2位)、序号(2位)、节点标号(2位)。其序号为当前数据包的帧数,上位机通过序号判断是否出现丢包问题。本发明为每个传感器设置唯一的标号,上位机通过节点标号判断当前数据来自具体哪个传感器。
表4传感器数据格式
本发明的ZigBee协议栈中比较重要的Z-Stack协议栈,并根据实际情况对协议栈的进行相应开发和设计,主要涉及传感器采集节点的通信协议和串口数据传输等,最终实现传感器数据在上位机和下位机之间的无线传输。
4、总体系统的实现。
本发明实现I2C数据的USB接口传输驱动,使树莓派开发平台可主动识别USB总线转换芯片,但并没有使传感器主动采集环境数据。所以本节主要为I2C接口、电压型接口和RS485型传感器设计具体的应用程序,使得传感器可正常对农作物环境数据进行监测。
4.1)I2C型传感器:
本发明使用I2C型光照传感器。该传感器基于I2C通信协议的BH1750光照传感芯片。在Linux系统下,可通过I2Cdetect工具检测光照芯片是否连接成功。在Raspbian系统终端中输入apt-get install I2C-tool命令安装I2C-tool,安装完成后输入I2Cdetect-l列出所有的I2C器件的设备地址。如果器件连接成功,则会在终端中显示BH1750的设备地址0x23。
Linux系统中一切都为文件,对传感器硬件的操作即是对硬件映射的inode节点的操作。通过Linux内核open函数打开指定的I2C设备文件,并通过O_RDWR参数声明对此设备执行读写操作。当正确打开设备文件时会返回这个文件的访问句柄,成功返回文件访问句柄后,即可通过ioctl函数对设备的I/O管道进行管理。
BH1750芯片只有器件地址并没有寄存器地址,只需ioctl指定BH1750的芯片的器件地址即可。本发明设计的读取光照数据的代码流程图如图16所示。
4.2)电压型传感器:
不同于I2C型传感器,电压型传感器将测量的传感器数据以电压的形式输出。而树莓派开发平台本身不具有直接识别或转换模拟信号的功能,故本发明采用外接AD转换器件将电压信号转换为数字信号。PCF8591是一个单独供电、单片集成、低功耗、基于I2C总线输入输出的CMOS器件,本发明使用该器件完成电压的数据转换。将PCF8591集成模块与CH341模块相连,通过设计的IIC-USB转换驱动即可将电压型传感器采集到的电压信号通过I2C总线转换为树莓派开发平台可识别的数字信号。
本发明通过文件操作函数对光照传感器直接进行数据读取。与光照传感器不同,PCF8591器件不仅有设备地址而且还有基于地址引脚的硬件地址,而write/read函数每次只能传递一个消息且传递完成后会发出stop信号。因为发送完从设备地址后无法继续发送硬件地址,所以不能直接通过write/read函数对设备进行操作。但可利用ioctl函数来发送两条消息,这样就不会发送完从设备地址后出现停止信号。在调用ioctl函数前需要声明I2C_rdwr_ioctl_data结构体对要传递的数据进行封装,该结构体的内容主要有I2C数据包结构体I2C_msg和I2C数据包数量nmsgs。本发明采用的I2C_msg的结构体为:
此结构体主要声明I2C数据包的格式,addr为从设备地址即I2C总线中接收此数据包的地址;flags为对数据包的标记,标记的内容是下方所有的宏定义,通过或操作支持多标记;len为数据长度;buf为要传递的I2C数据,且使用buf前必须通过malloc函数对buf进行内存申请。读取PCF8591器件数据时需要两个I2C_msg,第一个I2C_msg的buf用来存储PCF8591的硬件编程地址第二个I2C_msg用来存储PCF8591的返回值。通过ioctl函数将数据写入从设备中,成功返回1,失败返回一个小于0的整数。本发明设计的i2c_read_data函数代码流程图如图17所示。
读操作正确执行后,I2C_msg会返回一个十六进制数,需要通过转换公式将其转换为十进制电压值。PCF8591官方文档中,测量的电压值根据标准电压和返回数据相乘,经多次实验得出标准电压为实际的传感器输入电压时,转换后的电压值最为接近传感器输出的电压值。本发明中树莓派平台实际输出电压为4.7v,转换后电压值与原电压间的误差在0.03v以内。土壤水分传感器的值为转换后电压的五十倍,最小分辨率为0.1%。
4.3)RS485型传感器:
相较于前两种类型的传感器,RS4845型的传感器的传输较为简单,只需通过相应传感器手册查找到其通信格式,就可通过串口驱动传感器。由于RS485多为十六进制格式,C语言编写通信程序时无法写入正确的通信格式,本发明采用Python程序折中解决。由Python编写通信程序,C语言主程序调用Python通信程序实现对RS485型传感器的数据采集。风速传感器为RS485型传感器,其十进制的值为当前风速。
4.4)传感器描述文件:
国际上提出过许多传感器接口的统一标准,大多数标准都基于IEEE提出的1451协议。该协议采用分离模式,将传感器节点根据类型划分为智能采集模块(STIM)和网络处理模块,并为其制定专门的TII接口。为使STIM模块输出的信息标准统一化,IEEE提出电子表格描述(TEDS)。该电子表格描述用于对STIM电气属性以及传感器通道进行统一的定义,实现STIM模块的自识别以及对数据的统一管理。但由于IEEE1451标准的繁琐和复杂,很难实现对传感器建立具体电子数据描述文件。为提高开发效率,本发明舍弃原标准定义的描述文件,根据实际情况设计一套描述文件。
本发明定义的描述文件中,DDFId为传感器id,用于唯一标示此传感器;MaxChannel为此传感器传输数据的最大通道数;TimeRelated为时间相关的描述,包含连接用时和响应用时;ChannelRelated为此传感器的通道相关描述,包含通道类型、单位符号和取值范围;DataTransformTime为此传感器的数据传输时间;TypeId为此传感器类型,用于区分不同种传感器;CommunicateProtocol为此传感器的通信协议,系统根据此标示选择相应的通信函数。
其中MaxChannel、TimeRelated、ChannelRelated、DataTransformTime为传感器的电气属性描述,由厂商定义。DDFId、CommunicateProtocol由用户定义,用于确定无线网络中传感器的类型和其传感器与上位机的通信协议。本发明主要定义DDFId、CommunicateProtocol的值,通过DDFId匹配传感器类型,匹配CommunicateProtocol选取相应的通信函数。表5为本发明定义的传感器类型对应表。
表5传感器类型对应表
表6位本发明定义的通信协议类型对应表。
表6通信协议类型对应表
由于描述文件需要长期存储,其载体必须安全可靠,还需与CH341芯片稳定通信。ATM24C02芯片是基于I2C总线的EEPROM,可直接通过CH341与主机通信,方便描述文件输入的同时也方便实现传感器的自识别。同时具备硬件数据写保护,使其具有非常高的稳定性和可靠性。除此之外,它还具有体积小、断电后数据不丢失、价格低廉等特点。经以上特点考虑,本发明选用ATM24C02存储传感器描述文件。
选取ATM24C02芯片后就需要写入描述文件,ATM24C02基于I2C总线,通过修改上文中读取PCF8591器件的函数就可实现对ATM24C02数据写入。读取操作中是在一个消息体内实现write和read操作,写操作只需在一个消息体内实现write操作即可,其消息体的buff为两字节,第一字节用于存储寄存器地址,第二字节用于存储要写入寄存器的数据。本发明设计的i2c_write_data写函数代码流程图如图18所示。
将ATM24C02芯片和传感器通过CH341模块连接树莓派平台后,系统首先读取存储器中的描述文件,根据传感器类型及其他属性识别出当前传感器,并调用对应的采集函数。在后续开发中,主机端可根据其类型实现对不同传感器进行实时监控。
4.6)数据传输及上位机实现:
4.6.1)数据传输:
本发明的采集模块与ZigBee模块通过UART接口进行通信,但由于树莓派3B+版本的处理器内部有两个串口,一个是被官方称为PL011的硬件串口,另一个是迷你串口。在树莓派2B/B+这些老版树莓派上,官方将硬件串口分配给GPIO的第14、第15个I/O口,可单独调整串口速率和传输模式。但在树莓派3的设计上,官方取消GPIO的硬件串口功能,而是分配时钟源不稳定的迷你串口。若要使用硬件串口,需要先关闭蓝牙,然后解除蓝牙模块对硬件串口的占用。
4.6.2)上位机软件的设计与实现:
Python是一种面向对象的动态脚本语言,最初设计的目的是用于编写自动化脚本。随着版本更新和新特性的增加其功能已经不局限与自动化脚本,越来越多的大型或者独立项目都应用Python语言开发。与C、C++、Java等编译语言不同,Python是一种解释语言,不需要编译环节。相对其他开发语言,Python有关键字较少、结构简单、易于学习等特点。其最大的特点是拥有非常丰富的库,将不同功能的函数封装成开发人员直接使用的库,由此提高开发程序的效率。而封装好的库只需引用而无需关心底层实现,使Python在UNIX、Windows和Macintosh兼容良好。在图形编程上,Python支持GUI编程并具有较高的系统移植性,其中较为出色的第三方库有Tkinter、wxPython、PyGTK、PyQt等。
PyQt实现一个包含300多个类,近6000个函数和方法的Python库,而且可运行在目前所有流行的系统平台上。本发明的上位机基于Python3.7和PyQt5开发,
通过为每个数据帧标记序号,上位机通过简单的逻辑判断对一段时间的丢包率进行计算。信号质量(LQI)可由RSSI转换和读取CC2530芯片两种方式得到,但因为不同芯片调制方式不同导致直接读取芯片的信号质量也不相同,RSSI是判断两个节点距离的很好的参数,通过计算可得到信号质量的近似值。上位机与ZigBee协调器以串口的方式进行通信,Windows环境下默认的端口号为Com1口,Linux环境下默认的端口为/dev/ttyS0。为减少其他信号的干扰,本发明默认的波特率为19200,为方便后续的移植和开发,支持9600、19200、38400和115200这四个常见波特率的转换。如图19所示为上位机的功能方框图。
综合以上内容,本节完整地实现传感器数据的采集、无线传输和上位机接收。本发明设计的系统结构图如图20所示,主要由两个模块组成。第一个模块为基于树莓派开发平台的采集模块,由树莓派驱动传感器采集环境信息并对数据转换为可读数据。第二个模块为基于Z-Stack协议栈的网络模块,负责接收采集模块的数据并将数据发往下一个节点,当接收节点为协调器时将数据通过串口发送到上位机。
为防止数据丢失,采集模块采集到数据后立即存入MySQL数据库中使数据持久化。表7为本发明设计的数据库格式。
表7数据库表格式
传感器数据经树莓派开发平台封装通过网络模块发送,由协调器接收。本发明的ZigBee协调器为物联网开发箱,协调器通过USB接口与PC机通信。
经测试,本发明设计的系统可长时间稳定运行。相较于传统基于简单片上系统的无线传感器网络,本发明设计的无线该传感器网络的采集节点具有性能强大的ARM处理器核心,采集数据更稳定,处理速度更快;传感器统一为USB接口后可兼容多种不同类型的传感器,降低安装不同接口传感器的成本;本发明设计的USB接口驱动以模块的形式动态地加载到内核中,从可减少传感器对底层的过度依赖,提高应用程序的广泛使用性;可根据上位机中的丢包率放置采集节点,从而确保不因距离过远导频繁丢包或距离过近导致数据不具有广泛性;存储原始数据,方便二次开发等。
系统中的I2C型、电压型、RS485型传感器的采集程序。参考IEEE1451协议设计一套用于自识别的描述文件,便于二次开发。基于Python3.7和PyQt设计上位机并最后整合整套系统。经测试,本发明可长时间稳定采集农作物的环境数据。
本发明首先介绍树莓派开发平台的历代版本配置以及相关的传感器硬件,得益于高性能的Arm处理器,相较于传统的8051处理器或者stm32处理器树莓派开发平台处理数据更加高效。之后着分析树莓派Raspbian系统下的驱动原理以及一些重要的函数,通过分析实现对CH341芯片的转换驱动。在第四章主要涉及对Z-Stack应用层的设计,使CC2530能高效的传输数据。最后总体的实现基于USB接口的无线传感器网络。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法,其特征在于,所述基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法包括:
步骤一,对I2C型接口、电压型接口和RS485型接口统一化为USB接口;采用树莓派开发平台作为采集节点,负责采集各个USB接口的数据并进行汇总处理;
步骤二,基于对ZigBee协议栈及无线芯片进行分析,搭建无线传感器系统的终端节点,及采用无线芯片和CH341模块构建基于USB接口的协调器;
且依据实际情况对协议栈进行选择;
步骤三,用于远程数据接收的上位机采用Python编写,且协调器使用UART方式与上位机进行通信;
步骤二中,ZigBee协议栈通过传感器采集终端节点、路由节点、传感器采集协调器与PC机之间的传感器数据通讯,完成对光照度、土壤湿度、风速、土壤水分农作物环境数据的实时采集、处理和传输;
步骤二ZigBee协议包括:
1)设备初始化,当无线传感器网络启动时,先调用Zmain.c文件中的main函数,在main函数中分别对引脚、硬件抽象层、MAC层、系统看门狗、应用程序框架、网络地址进行初始化,并在初始化结束后进入操作系统抽象层轮询任务;
2)操作系统抽象层轮询,当系统初始化结束后,在主函数中通过调用osal_start_system()进入启动操作系统抽象层;
3)执行自定义任务,主处理函数根据任务号和事件对消息进行分类,并调用相应的处理函数;回复函数定时向协调器发送连接标志,告知协调器仍处于连接状态;
4)执行传输指令,通过Z-Stack协议栈实现传感器数据在上位机和下位机之间的无线传输;
步骤1)设备初始化中,通过调用osal_int_disable函数禁止使用中断,该中断函数的参数为中断事件的id;
当有中断事件发生时,不调用与该中断关联的服务程序;HAL_BOARD_INIT函数负责对CC2530主板的相关设备进行配置,对系统的时钟源、系统时钟和LED初始化;
HalDriverInit函数负责对初始化硬件抽象层的相关硬件驱动,包括定时器、AD转化、DMA、串口、按键、SPI总线驱动;
ZMacInit函数用于初始化协议栈的MAC层,初始化MAC子系统和与MAC层连接的相关设备;
在WatchDogEnable函数内通过看门狗标志位开启系统看门狗。
2.如权利要求1所述的基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法,其特征在于,步骤2)中,在osal_run_system函数内,通过tasksEvents[idx]指针变量,指向存放相应事件idx的存储空间,osal_run_system函数用于保存当前任务的状态;
Z-Stack协议栈中设置15个非系统事件,SYS_EVENT_MSG为系统事件标志;定义回复消息事件,用于定时向协调器回复自身状态;
tasksArr数组在初始化时初始为0,tasksArr的第idx个事件处理函数对应tasksEvent的第idx个任务的事件;tasksCnt为任务数量;通过不断循环判断当前任务是否有事件发生,若发生事件则跳出循环执行事件,若没有发生则继续循环。
3.如权利要求1所述的基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法,其特征在于,步骤3)中,ZDO_CB_MSG来自ZDO层,包含获取网络和节点信息;
SerialApp_ProcessZDOMsgs函数用于判定当前终端节点是否绑定成功;当有按键被按击时会触发KEY_CHANGE事件,按键处理函数SerialApp_HandleKeys负责对系统重置;ZDO_STATE_CHANGE触发条件为网络状态的改变,当新设备加入时主动向协调器发送自身的网络信息;
当接收到其他节点的数据包时触发AF_INCOMING_MSG_CMD事件,该事件的处理函数SerialApp_ProcessMSGCmd中包含除对所有对传感器数据的接收操作外,还对数据包进行解析和判断;
命令头为0xFEFE时,此命令为网络参数指令,进而匹配命令码,并根据命令码执行不同操作;
当命令头为0x0101时,此命令为传感器数据传输指令,包含完整的传感器数据;
判断当前节点是否为协调器,若为协调器,将数据重新封装后加入RSSI和数据链路的值并把封装好的数据发送到串;
若该节点不为协调器,则获取当前节点父设备的IEEE地址,并继续向协调器投递传感器数据;
传感器数据采集数据完成后写入串口,若CC2530芯片监测到串口有数据,则接收数据并发送到协调器。
4.如权利要求1所述的基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法,其特征在于,步骤4)执行传输指令中,包括:
a)网络参数的手动获取,由协调器广播到该网络下各个节点,用以获取当前网络下所有节点的网络状态;
b)网络参数发送,由终端节点主动发送,数据内容为节点的网络地址和父节点地址;当节点收到协调器发出的网络参数获取命令后,节点向协调器发出此指令;
c)新设备加入,由新加入的设备主动发送,告知协调器新加入设备的相关地址;
d)传感器数据,由终端节点主动发送;每个传感器设置唯一的标号,上位机通过节点标号判断当前数据来自哪个传感器。
5.一种实施权利要求1所述的基于ZigB无线网络及树莓派节点的农业物联网传感器通信方法的基于ZigB无线网络及树莓派节点的农业物联网传感器通信系统,其特征在于,所述基于ZigB无线网络及树莓派节点的农业物联网传感器通信系统包括:
I2C驱动体系结构用于实现在I2C体系结构中设备与总线适配器的通讯;重要结构体,通过结构体实现I2C核心、I2C适配器和I2C设备间的通信;
LinuxUSB驱动模块,负责管理上层设备驱动传下来的数据或将USB主机控制器的数据处理后传递给上层设备。
6.如权利要求5所述的基于ZigB无线网络及树莓派节点的农业物联网传感器通信系统,其特征在于,I2C驱动体系结构包括I2C设备驱动模块、I2C总线驱动模块和I2C核心接口;
I2C核心接口为I2C总线和I2C设备的中间枢纽,用于实现在I2C体系结构中设备与总线适配器的通讯,并为I2C总线和I2C设备驱动提供在内核中的注册和注销方法;
I2C总线驱动模块负责管理I2C总线传输事务和为I2C设备提供适配器;I2C总线适配器连接若干个物理I2C设备;
I2C设备驱动模块为客户端提供驱动,为各种I2C硬件提供驱动;通过挂接在受CPU控制的I2C适配器,I2C设备与CPU交换数据;I2C设备驱动由结构体IIC_driver和IIC_client实现,结合硬件实现结构体内的成员函数。
7.如权利要求5所述的基于ZigB无线网络及树莓派节点的农业物联网传感器通信系统,其特征在于,重要结构体,包括:
i2c_client结构体,定义挂载在I2C总线下的从设备,一个结构体对象代表一个slave设备;
i2c_driver结构体,一个i2c_driver对应多个设备;
i2c_adapter结构体,定义I2C适配器的相关内容;
i2c_algorithm结构体,定义主设备传输数据的算法,成员函数master_xfer用于产生I2C周期访问信号;
LinuxUSB驱动模块,包括USB主机控制器、USB核心和USB设备;
USB核心负责管理上层设备驱动传下来的数据或将USB主机控制器的数据处理后传递给上层设备;还负责USB系统的初始化以及USB设备的匹配;
USB主机控制器负责USB总线传输、处理USB状态、管理状态并报告状态信息以及对数据串行和解串行;根据协议将数据传递到USB核心和接收USB核心传来的数据,同时主机控制器也会为新加入主机的设备分配唯一的编号;
USB设备为主机提供多种多样的附加功能,标准的USB设备包括配置、端点和接口,且一个USB设备驱动只对应一个USB接口。
CN201910538297.XA 2019-06-20 2019-06-20 基于无线网络及树莓派节点的农业物联网传感器通信方法 Active CN110166975B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910538297.XA CN110166975B (zh) 2019-06-20 2019-06-20 基于无线网络及树莓派节点的农业物联网传感器通信方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910538297.XA CN110166975B (zh) 2019-06-20 2019-06-20 基于无线网络及树莓派节点的农业物联网传感器通信方法

Publications (2)

Publication Number Publication Date
CN110166975A CN110166975A (zh) 2019-08-23
CN110166975B true CN110166975B (zh) 2023-08-15

Family

ID=67626421

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910538297.XA Active CN110166975B (zh) 2019-06-20 2019-06-20 基于无线网络及树莓派节点的农业物联网传感器通信方法

Country Status (1)

Country Link
CN (1) CN110166975B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10795351B2 (en) * 2016-07-19 2020-10-06 Raven Industries, Inc. System and method for autonomous control of agricultural machinery and equipment
CN111525934B (zh) * 2020-04-14 2022-04-29 深圳智造谷工业互联网创新中心有限公司 基于5g的无线传感器
CN111930353B (zh) * 2020-08-12 2023-12-15 Oppo(重庆)智能科技有限公司 传感器驱动架构实现方法、装置、架构、终端设备及介质
CN112163386A (zh) * 2020-09-25 2021-01-01 中国科学技术大学 基于远程fpga实验平台的片上系统设计与验证方法
CN112985376B (zh) * 2021-03-08 2024-03-15 中国电子科技集团公司第二十研究所 一种导航传感器自适应接口实现方法
CN112881794A (zh) * 2021-03-23 2021-06-01 长春市吉佳通达信息技术有限责任公司 一种侵入式低频电能消耗数据采集系统
CN113325761A (zh) * 2021-05-25 2021-08-31 哈尔滨工业大学 一种基于深度学习的植株生长期识别控制系统及其识别控制方法
CN113596008A (zh) * 2021-07-23 2021-11-02 国网安徽省电力有限公司铜陵供电公司 一种基于微传感器技术的网络安全常态监控系统
CN115098173B (zh) * 2022-06-17 2024-04-26 电子科技大学 一种基于双核amp架构的敌我识别信号高速识别的方法
CN115793511A (zh) * 2022-10-12 2023-03-14 北京强度环境研究所 一种基于无线协议的家庭漏水监控系统及其使用方法
CN115378981B (zh) * 2022-10-24 2023-02-03 国网信息通信产业集团有限公司 一种适配物联网不同传感器的终端及方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108259281A (zh) * 2018-02-27 2018-07-06 中国地质大学(武汉) 基于ZigBee和Raspberry Pi的智能家居系统
CN109493583A (zh) * 2018-10-15 2019-03-19 南京邮电大学 基于情景感知和图像处理的智能景观管理系统建立方法
CN109613947A (zh) * 2018-11-15 2019-04-12 西北农林科技大学 一种融合光照频率与占空比的嵌入式设施光环境优化调控系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8457013B2 (en) * 2009-01-13 2013-06-04 Metrologic Instruments, Inc. Wireless dual-function network device dynamically switching and reconfiguring from a wireless network router state of operation into a wireless network coordinator state of operation in a wireless communication network

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108259281A (zh) * 2018-02-27 2018-07-06 中国地质大学(武汉) 基于ZigBee和Raspberry Pi的智能家居系统
CN109493583A (zh) * 2018-10-15 2019-03-19 南京邮电大学 基于情景感知和图像处理的智能景观管理系统建立方法
CN109613947A (zh) * 2018-11-15 2019-04-12 西北农林科技大学 一种融合光照频率与占空比的嵌入式设施光环境优化调控系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于LabVIEW 的智慧实验室的设计与实现;茆玉辰,张宸烽,史洪玮;《电脑知识与技术》;第46-48页 *

Also Published As

Publication number Publication date
CN110166975A (zh) 2019-08-23

Similar Documents

Publication Publication Date Title
CN110166975B (zh) 基于无线网络及树莓派节点的农业物联网传感器通信方法
Yang et al. μ PnP: plug and play peripherals for the internet of things
CN105824729B (zh) 一种具备通用性的虚拟验证平台及实现方法
Andersen et al. System design for a synergistic, low power mote/BLE embedded platform
CN104656514A (zh) 一种智能型数据采集系统
Fernandes et al. A framework for wireless sensor networks management for precision viticulture and agriculture based on IEEE 1451 standard
CN101340404A (zh) 用于WiFi与ZigBee无线网络协议转换的嵌入式网关
CN101141339A (zh) 基于嵌入式SoC芯片的无线网络工业监控管理系统
CN103235749A (zh) 一种基于FPGA的传感器网络SoC原型验证平台
Ai et al. Green house environment monitor technology implementation based on android mobile platform
CN103399777A (zh) 一种基于智能终端的虚拟仪器测量系统及方法
CN110119282A (zh) 一种基于通用嵌入式计算机的物联网终端及系统
CN110972096A (zh) 一种通信协议可配置的物联网数据采集软件及设计方法
CN106651650A (zh) 联调测控装置及应用该装置的电力物联网联调测控系统
Souissi et al. An intelligent wireless sensor network temperature acquisition system with an FPGA
CN103246223A (zh) 一种基于Zigbee的传感测控系统
CN113805927A (zh) 一种代码更新方法、装置、电子设备及计算机存储介质
EP2003549B1 (en) Wireless deployment/distributed execution of graphical programs to smart sensors
CN107704417A (zh) 与被测设备通信的方法及其通信系统
Chtourou et al. Proof of concept of a PIC wireless programmer interface for prototyping
CN108076094B (zh) 字典协议终端设备
Li et al. An intelligent plant growth monitoring system based on ESP32 and IoT resource explorer platform
CN204695025U (zh) 一种基于蓝牙的无线总线连接器
Pamadi et al. Getting Started With 1-Wire Bus Devices
Zhuvasin A Healthcare Monitoring Device

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant