基于STM32的室内环境监测系统设计
2021-07-01朱兆丰刘静琦周振虎刘静波余泽滔
朱兆丰,刘静琦,周振虎,刘静波,余泽滔,时 飞
(南京工程学院 信息与通信工程学院,江苏 南京 211167)
0 引 言
室内空气质量对于人体健康具有直接的影响。随着生活水平的提高,人们越来越重视室内环境的空气质量、环境参数等,特别是各种有害气体,严重危害了人体健康[1]。人们采取相关监测方法获取室内温湿度、VOC、PM2.5等环境参数,监测方法大致经历了几个阶段:人工现场监测、在线监测、基于ZigBee和GPRS方式监测等[2-3]。随着网络技术的发展以及智能手机的普及,多采用智能硬件终端监测环境参数、采集数据,并通过WiFi模块传输至云平台,同时采用微信小程序实时查询数据,发出控制指令控制硬件终端已成为一种趋势。采用不同的主控芯片与云平台构建的远程监测系统具有不同的应用特点[4],本文设计的室内环境参数监测系统采用STM32主控芯片,通过WiFi模块上传数据至贝壳物联云平台,完成数据采集、存储、上传和微信小程序实时查询数据、发出控制指令等应用。
1 系统总体组成
系统总体组成如图1所示,其中虚线部分为硬件终端。主控芯片采用STM32F103RCT6,这是以32位Cortex-M3为核心的高性能处理器,主频为72 MHz,集成了多种外设,片上资源丰富[5]。采用高精度、低功耗的温湿度传感器HDC1080采集温湿度数据,采用ZPH01型传感器检测VOC和PM2.5数据信息。ZPH01型传感器可以配置成2种数据输出模式,一种是串口方式,另一种以PWM波形中低电平占空比的表示输出数据,使用灵活。WiFi模块选用ESP8266,ESP8266可配置成多种模式,与STM32单片机通过串口连接。硬件终端采集数据,定时发送至贝壳物联云平台。在贝壳物联注册的同一个用户ID下,电脑端和微信小程序同步接收并更新数据。微信小程序可以查询数据信息,也可以发送指令,进而控制硬件终端数据存储与报警阈值的设定等。系统中接有时钟芯片DS3231,这是一款带有温度补偿的高精度时钟芯片[6],用以提供系统运行的时间信息、定时时间间隔的控制设定等。
图1 系统总体组成
2 系统硬件设计
2.1 硬件终端组成与接口电路
硬件终端包括主控芯片STM32F103RCT6。主控芯片的PC11和PC12作为I2C总线挂载了3个功能模块,分别是温湿度传感器HDC1080、时钟芯片DS3231和E2PROM存储芯片AT24C02,STM32主控芯片通过访问不同的器件地址[7],可以对芯片进行配置与读写。空气质量传感器ZPH01连接到串口1的PA9和PA10上;WiFi模块ESP8266连接到串口2的PA2和PA3上。系统配置了一块320×240分辨率的TFT彩屏,其16位数据口连接到STM32的PB端口,GT32L32字库芯片挂载到STM32的SPI1总线上,方便显示中英文信息。
图2所示为硬件终端组成与接口连接示意图,其中I2C总线上PC11为SDA数据线,PC12为SCL时钟线。ESP8266的复位引脚由STM32的PA12控制。DS3231的INT引脚可以软件配置为输出1 Hz的信号,连接于STM32的PC6引脚上作外部中断信号,由此进入外部中断服务程序。空气质量传感器的MOD模式控制端接口处于串口模式时读取数据,ZPH01与单片机之间的数据读取以串口1方式进行。
图2 硬件终端组成与接口电路
2.2 WiFi接口模块ESP8266
ESP8266是一款高集成度的WiFi模块,它是一个32位的MCU系统,可独立运行访问网络,或者作为通信模块搭载于其他主控芯片上,帮助其他主控芯片接入互联网[8]。ESP8266模块符合IEEE802.11b/g/n标准,支持TTL电平,板载PCB天线[9],与STM32通过串口2连接,ESP8266模块可配置成AP,STA或AP+STA模式。
(1)AP模式是指把ESP8266作为热点,允许其他外设接入ESP8266模块;
(2)STA模式是将ESP8266作为客户端,用于将ESP8266接入其他热点,例如无线路由器等;
(3)AP+STA模式是前两种模式的整合,兼具热点功能,为其他设备提供接入服务,同时也可以接入其他WiFi网络。
本设计把ESP8266配置为STA工作模式,通过路由器连接网络。
2.3 传感器模块
TI公司出品的HDC1080温湿度传感器具有高精度、低功耗的特点,可进行温度与湿度监测,分辨率较高。相对湿度精度典型值为±2%RH,温度精度典型值为±0.2 ℃,供电电压为2.7~5.5 V。借助数字总线I2C接口与单片机进行数据读写:HDC1080读写遵守I2C协议,设备地址0x80(写),0x81(读)。测量温度数据计算式见(1):
式中,TEMP[15:00]为温度寄存器的十进制数。
测量湿度数据计算见式(2):
式中,HUMI[15:00]为湿度寄存器的十进制数。
ZPH01空气质量传感器可以同时提供VOC检测和PM2.5检测。VOC检测单元对甲醛、苯等有机挥发气体具有极高的灵敏度。ZPH01出厂经过标定校准,数据的传输方式由MOD引脚配置。当MOD引脚接地时,数据以串口方式输出;当MOD悬空时,数据以PWM方式输出,其中,以PWM波形低电平的占空比表示数据大小。ZPH01模块通过串口1方式与STM32进行数据交互。该传感器发送一次检测数据的周期为1 s,包含VOC等级以及PM2.5等空气质量数据。程序接收数据并通过校验后得到PM2.5和VOC等级有效数据。
3 软件设计
3.1 主程序流程
通过串口配置工具发送AT指令,配置ESP8266连接路由器,并确定是否连接成功。STM32单片机通过传感器读取室内环境参数,以固定的时长间隔存储数据至E2PROM,同时通过ESP8266定时发送数据至贝壳物联云平台。贝壳物联云平台电脑端和微信小程序均可发送指令,硬件终端根据不同的指令解析指令含义,作出响应,系统主程序流程如图3所示。程序将时间读取、测量温湿度、显示温湿度和存储数据等放置在外中断服务程序中,利用DS3231输出的1 Hz信号连接STM32的PC6,提高主程序的效率。I2C总线下的温湿度传感器HDC1080、时钟芯片DS3231和E2PROM存储器AT24C02均按照应用手册写入控制字,先配置内部控制寄存器,之后读出数据。在串口2中断接收并解析收到的控制指令,串口2中断接收到指令后给主程序一个标志位,之后进行判断,并根据不同的指令完成相应的操作。可以通过电脑端或手机微信小程序下达指令进行远程控制,控制数据上传的时间间隔和输出报警的阈值等。
图3 主程序流程
3.2 硬件终端与贝壳物联云平台通信
贝壳物联云平台采用以TCP协议为主,UDP协议为辅的形式通信,两种协议间信息可互通。TCP协议为远程网络控制系统提供可靠且面向多元化连接的传输控制协议[10],在TCP协议的基础上,可以直接使用TCP建立长连接,定时发送心跳数据,保持用户、设备在线期间与服务器可进行JSON字符串格式数据通信,也可采用HTTP(s)通信协议获取用户资源,向设备发送指令。
ESP8266具有硬件终端与贝壳物联云平台之间数据传输的功能,把STM32采集的数据按照平台通信协议格式发送至云平台,同时接收云平台发送的JSON格式的指令,解析后执行不同的任务。ESP8266与平台之间保持通信,定时发送心跳信号、检查当前登录状态。当串口2中断标志产生,意味着云平台发出指令,这时STM32调用JSON解析函数解析接收的JSON字符串,得到有效指令。硬件终端根据上传数据的最低时间间隔,按照通信协议上传数据至云平台,上传数据的时间间隔可以根据不同指令增加或减小。
ESP8266配置为STA客户端模式加透传模式,其配置方式可以用串口2发送命令函数或用串口配置工具进行配置。输入的指令“AT+SAVETRANSLINK”用于配置ESP8266上电后自主连接贝壳物联云平台。待AT指令发送成功后,ESP8266返回“OK”。
官方给出的上传数据的协议格式为{"M":"update", "ID":"xx1","V":{"id1":"value1",...}} ,“xx1”表示注册用户的设备ID,“id1”和“value1”是挂在当前设备ID下的数据接口1和上传数据1,“…”是该设备下的多个数据接口与数据。对照此格式,上传数据的函数如下:
变量“did”表示注册用户的设备ID,“inpitid”是所属设备ID下的数据接口ID,如果上传多个数据,可以按照协议格式添加数据接口,由平台给出数据接口ID,挂在当前所属设备ID的其他数据接口。“Value”是上传的数据,如温湿度和PM2.5等。
贝壳物联云平台提供预先设定的按钮,可以在电脑端和微信小程序里发送指令,指令封装为JSON数据格式,例如用户硬件终端接收到电脑端发出的“play”按键的数据格式是{"M":"say", "ID":"U*****", "NAME":"*****(web)", "C":"play","T":"1601725434"},其中“U*****”是用户ID,NAME后的“*****”是用户名,C后的“play”是解析的关键字,不同的按键指令含义即为C后的字符,包括stop、up、down等。T后的数字是服务器发送信息时的时间戳,为格林威治时间1970年01月01日00:00:00到当前时间的秒数。程序解析按键解析出不同的关键字,从而实现不同的功能选项。
3.3 ZHP01数据读取
ZPH01可以配置为串口方式,发送数据至STM32串口1,每秒发送一帧数据,一帧数据共有9个字节,其中字节00为起始位,字节03和04是PM2.5颗粒物低脉冲率的整数和小数部分,最后乘以系数得到颗粒物浓度。07字节是VOC等级,08字节是01~07字节的校验和,含义是01~07字节的和取反加1。串口1的中断处理程序中,数据存放于数组aRxBuffer[RxCounter],当一帧数据结束后产生空闲总线中断,给出中断标志位ReceiveState,主程序根据中断标志位ReceiveState读取并组合字节03和字节04的数据,得到PM2.5浓度。程序代码如下:
4 实际测试
通过对硬件终端采集、上传数据进行测试,可以看到电脑端的贝壳物联网平台与手机微信小程序同步接收、显示数据。测试过程中,通过平台发布指令,调整数据上传的时间间隔等。图4所示为硬件终端显示数据界面,图5所示为微信小程序接收数据界面,图6所示为电脑端温度实时接收数据界面。
图4 硬件终端显示数据界面
图5 微信小程序接收数据界面
图6 温度实时接收数据界面
5 结 语
本系统经过系统硬件设计、软件编程配置和实际测试,实现了温湿度、PM2.5和VOC数据的采集,并能将数据上传贝壳物联云平台和手机微信小程序,从而实现同步远程监测、发布指令的目的。测试表明,系统符合室内环境参数监测的要求,通过接入贝壳物联云平台实现了远程监测,兼顾了成本、效率和实时性,满足了实际应用需求。STM32丰富的接口和外设可以作为测量其他参数的监测接口,增加贝壳物联云平台的数据接口,上传需要的数据,开启平台保存历史数据、发送指令等功能,为系统进一步的拓展应用夯实了基础。