用STM32和ESP8266实现的可扩展物联网系统*
2019-01-17,
,
(武汉科技大学 信息科学与工程学院,武汉 430081)
引 言
物联网是新一代信息技术的重要组成部分,通过智能组网、智能传输技术将传统网络的覆盖范围扩展到物与物的级别。当前物联网已发展成为对物体具有全面感知能力,对信息具有可靠传递和智能处理能力的连接物与物之间的信息网络[1]。STM32在原有的工业市场已经具有很好的基础,在其上发展加入更多的联接与云端的服务具有很大的市场成长空间[2]。本文在嵌入式应用最为典型STM32系列芯片的基础上,结合使用ESP8266网络通信芯片,通过软硬件设计,解决了嵌入式系统常见的运行时状态独立、数据传输缺乏实时性的问题,有效拓展了其联网应用能力。
1 系统框架组成
本系统主要分为三大模块:数据采集端、控制端、网络端。数据采集端是整个系统的数据入口,负责搜集传感器数据。网络端的主要功能是在网络上对数据进行展示,本文使用OneNET作为数据接入和管理平台,该平台同时提供了基于数据认证和保护机制的信息可视化服务,允许用户查看系统详细数据,并在任何时间接收通知[3]。控制端是本系统的核心,承担着数据接收、缓存、处理以及发送任务。系统架构如图1所示。
图1 系统框架图
2 主设备硬件设计
本系统的主要硬件组成如图2所示。其中,STM32F103ZE负责数据处理,由于其拥有112个可用的I/O端口,以及2个I2C接口和SPI接口、3个USART接口、一个USB接口和一个CAN接口,每个I/O均可接入相应外设[4]。所以根据需求可快速灵活地接入各种不同的外部设备,系统可实现的具体功能由所接入传感器的类型决定。ESP8266负责网络通信,具体采用了ESP8266 01S无线模块,该模块支持标准的 IEEE802.11 b/g/n 协议,此外还集成了包括天线开关、电源管理等硬件单元。不仅能解决单个系统中的网络连接问题,也可以避免节点到服务器通信中任何类型的故障[5]。ESP8266的传感器及其连接执行器通过网络进行监控和控制,现有设备可以用来加强对应功能并令其更加智能[6]。集成调试单元主要用于编码阶段的代码调试。状态指示单元用于工作状态监测。
图2 系统硬件组成图
ESP8266 01S无线模块与STM32F103ZE连接需要4个接口,具体设计如图3所示。
图3 ESP8266接线以及实物图
图5 ESP8266程序流程图
板载电源提供3.3 V和GND接口。MCU_RXD接口负责数据上传,MCU_TXD接口负责数据下载。ESP_TXD接主控制器芯片的PA2口,ESP_RXD接PA3口,二者均被配置为串口(USART2)。
3 系统软件设计
本系统的硬件程序采用C语言编写,软件部分包括硬件驱动、硬件间协调、数据处理以及格式化、数据转发等功能。此外,本系统中用到的EDP协议包由已在GitHub上开源OneNET云平台代码经过适当改进而来,数据传输基于该协议。
3.1 主函数程序设计
本系统的工作过程大致可分为硬件初始化、建立网络接、采集数据处理并转发三大过程,流程图如图4所示。
图4 Main函数流程图
3.2 ESP8266程序设计
ESP8266程序主要完成硬件层面的初始化以及软件层面的网络连接两大功能,其流程图如图5所示。
本文使用的ESP8266 01S与STM32F103ZE之间的通信采用基于AT指令的串口通信方式。串口是计算机上一种非常通用的通信协议,大多数计算机包含两个基于RS232的串口,串口同时也是仪器仪表设备通用的通信协议[7]。其初始化代码如下:
void NET_DEVICE_IO_Init(void){
GPIO_InitTypeDef gpioInitStruct;
gpioInitStruct.GPIO_Mode=GPIO_Mode_Out_PP;
gpioInitStruct.GPIO_Pin=GPIO_Pin_0;
//GPIOA0被定义为复位引脚
gpioInitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&gpioInitStruct);
NET_IO_Init();
//串口初始化
netDeviceInfo.reboot=0;
}
在I/O初始化完成后,需要进一步设置相应的AT指令,其中最为关键的两条指令如下:
#define ESP8266_WIFI_INFO "AT+CWJAP="PDCN","wxx960105" "
#define ESP8266_ONENET_INFO "AT+CIPSTART="TCP","183.230.40.39",876 "
AT+CWJAP指令的功能是连接无线WiFi指令,它有两个参数,分别是SSID以及对应的密码。只有正常接入网络才可以向网络服务器发送数据。AT+CIPSTART指令的功能是访问指定网络位置。它有三个参数,分别是通信协议类型、主机地址、端口号。ESP8266通过上述两条宏指令实现与远程服务器的连接。
3.3 数据处理程序设计
本系统产生的各种数据通过EDP协议进行传输。EDP (Enhanced Device Protocol)即增强设备协议,是OneNET平台根据物联网特点专门定制的完全公开的基于TCP的协议,被广泛应用到家居、物流、能源以及其他行业应用中[8]。
数据传送前需要对数据进行格式化处理。数据格式化的主要工作为封装信息属性和文件拆分。封装信息属性环节包括封装协议头和数据头。协议头指派采用对应协议格式传输,数据头向服务器传递诸如数据类型大小等信息,以便服务器正确处理数据。文件拆分传输包含以下几个环节:提取信息-拆分-传输-接收-组装-检查。接收组装和检查的过程由服务器端自动完成。综上所述,数据格式化的流程图如图6所示。
图6 数据处理程序流程图
数据处理程序不仅完成了协议要求的数据传输前的各种准备工作,并且实现了硬件和数据间的隔离,即任何由硬件产生的数据经过该程序均可被换为服务器可识别的并且可进行网络传输的数据,极大提高了本系统在数据层面的兼容性。
4 应用示例
4.1 图片传输示例
本系统采用Flash芯片W25Q16,用于储存程序本身和程序运行时所需的数据。在此基础上,构建一个小型化的文件传输服务器,传输原理如图7所示。
图7 图片上传原理图
准备一张待传输图片,由于Flash储存容量的限制,需要对图片进行压缩处理。最后将该图片转存为芯片可以识别的十六进制数组。
unsigned char Array[]={
………………
}
转换完成后,将程序烧入Flash中并启动系统,同时打开OneNET手机APP,即可看到已上传的图片,如图8所示。
图8 图片上传成功界面
4.2 温湿度监测示例
本文演示的第二个功能是基于DHT22温湿度传感器的环境温度监测系统。温湿度采集传感器采用常见的DHT22芯片,其是一种电容式可输出数字信号的温湿度传感器,它包括湿度感知单元、NTC温度感知单元,以及一个8位的微型处理器[9]。
在完成硬件设计与搭建、程序设计以及平台设置之后,本系统即可实现实时监测室内温度湿度并上传至网络的功能。如图9所示,打开OneNET旗下手机客户端设备云即可实时查看对应设备下对应数据点的实时数据。打开对应网页即可看到一段时间内的温湿度变化趋势以及当前温湿度值,对应界面如图10所示。
图9 手机端实时监测界面
图10 网页端数据流展示界面