一、综述
前段时间参与了实验室的一个矿井项目,使用的技术是Zigbee和WIFI,使用到的芯片是常见的CC2530和ESP32。其结构可以用下面图1-1来进行较为精确的描述。
其中,阅读器就是矿井中,每一个传感网中的协调器,同时在协调器上拥有一个ESP32,让其可以连接WIFI。所有的阅读器都是通过WIFI与层间主机通信的;这里的层间主机可以说就是一个物联网中间件,它可以管理位于现场的网络,同时又要与位于云端的系统进行交互。在本系统中,几乎所有的业务逻辑和一些实时调度算法都写在了层间主机中了。因此,从软件的开发角度来说,这个系统的软件结构可以使用图1-2来描述。
这张图有以下重要的点:
- 如果对系统的要求不是太高,可以将阅读器和层间主机合在一起。
- 系统的层间主机和阅读器是位于同一个局域网中,因此速度是很可观的。如果不使用无线WIFI,使用网线将会有更加可靠的性能,以及更加快的速度。
- 整个系统的开发划分是很明确的;传感节点只需要将自身的采集速度达到极致,并检测一下系统异常即可,不用关心其它的业务逻辑;控制节点只需要接收来自层间主机的控制命令即可;而阅读器只是作为一个中转器,将底层网络与层间主机连接起来。这一部分的开发有着明显的嵌入式气息,不关注业务逻辑,重点关注系统硬件的性能,将性能达到极致即可。
- 对于层间主机,就是普通的软件研发了,但是由于本系统对于阅读器和层间主机之间的通信这个问题上,使用的TCP通信,因此,需要很熟悉TCP Socket网络编程,否则是玩不转的。
下面本文作重介绍,每个系统模块的研发重点。
二、传感节点的开发
这里的开发就是典型的嵌入式系统的开发;在这次开发中,很多时候,使用的是ADC去读取各种传感器的采集到的模拟量,然后做一些简单的处理,就将采集到的数据按照设计的协议,发送给阅读器了。此处的开发重点有:
- ADC的精准采集(不管是外部还是CC2530自带的片上ADC,如果要求严格,就需要用到外部的ADC)
- 简单的运用一下Zigbee协议栈,收发数据与软件定时器
- 在设计PCB的时候,注重串口调试
三、阅读器的开发
本套系统的当前情况下,在阅读器上,只要两块MCU,一块是ESP32,一块是CC2530;其中CC2530作为无线传感网的协调器,ESP32作为上层网络的通信芯片(准确点说是模组)。
3.1 CC2530的开发
此处的CC2530的功能是很简单的;
- 对来自下层的数据进行封装(主要是为来自下层的数据包添加一个头部),将封装好的数据按照系统设计的指令发送给ESP32。
- 解析ESP32发送过来的指令,根据指令做出处理(例如ESP32发来的控制远处节点的指令,或者是一些管理网络的指令)
此处上发的数据报头的内容主要是底层传感节点的基本信息;如果是一个控制节点,还需要包含这个节点的网络地址信息
3.2 ESP32的开发
在ESP32上主要有以下开发重点:
- 与CC2530进行交互(UART或者SPI啥的),并设计指令,根据设计好的指令实现指令收发器
- 连接wifi(可以支持微信配网功能),并在WIFI发生异常的时候,从新连接WIFI或者等待WIFI正常再去连接。
- 实现一个靠谱的TCP通信模型,包括网络异常情况下的处理,这个在这块片子上的开发应该属于最难的部分了。
由于使用的是ESP32模组,因此,这里的嵌入式开发的气息已经不是太重了,因为它都被乐鑫公司的底层SDK屏蔽了。唯一有点嵌入式味道的就是一个小串口了。
四、关于层间主机的开发
层间主机在整个系统中起到了一个大脑的作用,它简单地管理着下层网络,同时也控制着下层网络,了解这下层网络的一切,调度这下层网络节点的执行行为。但它基本不存储数据,它不做报表,这些交给服务器处理;同时,它的运行规则也有服务器来决定,例如控制某一个电机启动的阀值,这个就由服务器提供;这里仅仅是展示缓存,同时在与服务器通信异常的时候,也可以确保这整套系统的基本运行正常(也就是说,它同时也承担这抵御风险的功能,是可以提高系统的稳定性的)。
由于层间主机和阅读器在同一个局域网中,它们之间的通信也会相对稳定,迅速。
类型:系统设计