本帖最后由 Kara 于 2023-3-16 15:36 编辑
摘要:随着人民对美好生活的向往,人们对于环境的重视程度越来越强烈,环境对生活的影响已经成为一个热点问题。本设计以STM32单片机作为控制和数据处理的单元,使用AHT10、BH1750和BMP280传感器去监测周围的环境参数,在LCD屏完成传感器数据和相关信息的显示。
同时,采用了无线模组与单片机之间进行数据交互。当无线通讯模组成功连接网络,并接入机智云物联网云平台时,用户可以通过登录物联网云平台后台查看传感器上报的数据和进行远程控制。在设计过程中,开发Android上位机软件,使用户在上位机实现对于温度、湿度、光照强度和气压等相关环境参数监测。
1总体方案设计 1.1 整体方案设计
本环境监测系统设计选取了控制和数据处理能力强的ST32单片机作为核心部件。使用温湿度传感器对周围环境中的温度与湿度监测,选取高精度的光强度传感器完成对周围环境的光照强度的测量,对于气压数据的测量,将选取高精度的气压传感器完成工作。
该系统使用液晶显示屏幕完成对温湿度数值,光照强度数值,大气压强数值以及设备的状态信息的显示。当无线通讯模组成功连接网络之后,接入云平台。用户可以通过登录物联网云平台后台[4],查看传感器上报的数据信息和进行远程控制。开发Android上位机软件,使用户在上位机程序上实现对各种环境质量参数监测。整个系统的整体框架图如图1-1所示。
图1-1 系统整体框架图
1.2 控制模块方案
本环境监测系统设计使用单片机作为整个系统的控制中心。需要完成传感器数据的采集,无线通讯模组的数据交互,显示传感器数据的功能[5]。在本次的环境监测系统中,控制模块采用的是STM32系列单片机。
例如在芯片选择上面,有低功耗类型STM32L系列、主流类型F1系列、高性能F7/H7系列、以及异构系统架构下的 STM32MP157系列。在软件程序设计过程中,官方提供了图形化配置软件STM32CubeMX。可以快速生成底层配置代码,减少重复性移植。同时该32位芯片的相关技术资料和参考设计资料较多,因此被运用到各种电子系统设计之中。本课题准备使用控制性能强劲和数据处理能力强的STM32F103ZET6芯片作为核心控制模块元件。
1.3 环境监测传感器方案
环境监测系统主要需要监测的数据有温湿度数据,光照强度数据和大气压强数据等基本环境质量参数。因此需要选择相应的温湿度传感器,光强传感器,精度较高的气压传感器[6]。
温湿度数据采集传感器选择了AHT10。AHT10模块上面有一个湿度传感器元件和一个片上温度传感元件,该产品具有快速响应、抗干扰能力强和高精度等优点[7]。
光照强度数据采集的传感器选择了BH1750。BH1750是标准(I2C)接口的16位数字输出类型的环境光强度传感器,可以利用BH1750模块的高分辨率探测较大范围内的光照强度变化情况[8]。
大气压强数据采集传感器选择了BMP280。数字式气压传感器BMP280,具有高精度的特点,而且也具有测量环境温度和高度的功能。
综上所述的传感器模块,在选择时考虑到了其成本,使用的方便性,相关设计资料的丰富性,传感器模块实物图如图1-2所示。
1.4 无线模块方案
随着物联网技术等相关通信技术的快速发展和更新迭代,目前的物联网技术呈现出智能化的特点[9]。因此在本系统设计中,决定使用远程通信模块进行数据通信和进行智能化操作。对接国内开放的物联网云平台,从而更加智能的,简单的完成整个设计的功能。
方案一:对于长距离无线通讯模块的选择。查询资料后,了解了国产LTE无线通讯模组上海合宙公司。该公司研发的LTE Cat 1无线通信模组提供了丰富的通用外设接口,并且支持Lua二次开发,合宙官方提供了嵌入式脚本运行框架LuatOS。但是模组价格比较贵,而且开发过程比较复杂,相关资料和设计参考较少,开发难度较大。
方案二: esp8266芯片是国产芯片公司乐鑫科技所研发的一款WiFi无线模组芯片。内置TCP/IP协议栈,支持AT本地升级和OTA远程升级。该无线模组能够很好的接入国内的开放的物联网云平台,具有易操作化的特点,主要是相关资料和设计参考较多,开发难度较小。
经过对上述方案对比,方案二中的ESP8266模块,拥有丰富的相关设计资料。最终选择了以ESP8266芯片作为核心的无线模组。作为单片机与物联网云端进行数据传输和交换的单元,无线模块实物图如图1-3所示。
1.5 液晶显示模块方案
本次环境监测系统的设计过程中,需要使用显示模块进行显示。需要的显示的数据,主要包括传感器设备测量采集到的数据和系统的基本状态信息。在电子系统设计过程中,常使用的显示模块主要有以下两种,TFT彩屏和LCD1602两种。方案对比如下。
方案一:TFT屏幕是以背透和反射相结合的方式工作的,通过点脉冲直接控制[10]。从而实现显示效果。查询资料了解到了一种1.8寸的TFT彩屏模块。在色彩显示上,TFT屏幕的效果较好,色彩丰富且具有对比度高特点。同时在使用该LCD 显示模组时,需要用到的单片机的IO端口数量较少。
方案二:LCD1602是一种字符型液晶显示模块,具有成本低等特点。但是缺点是在使用LCD1602需要较多的单片机的IO端口数量。而且需要通过调节变阻器的大小,才能改变屏幕的显示效果,不能直接得到显示效果。
经过上述两个方案对比,由于需要对传感器数据的实际测量值进行显示,选择了显示内容更多和色彩效果更好的方案一,TFT显示模块实物图如图1-4所示。
图1-4 TFT显示屏幕
2 系统硬件设计 2.1 STM32主控模块
环境监测系统选取了STM32F103ZET6芯片作为电路的核心控制和数据处理单元。该芯片支持UART、SPI、I2C接口,芯片内部集成了512KB闪存和64KB SRAM,可以存储更多的程序和数据。环境监测系统的主控电路设计如图2-1所示。 图2-1 主控电路
STM32芯片正常运行所需要的电压范围为2.0~3.6V,实际运行时的电流只有几十毫安,因此芯片功耗非常低。芯片可对系统电路之中的电压进行检测,可与电源芯片相接一起完成开关电源调节。芯片正常运行时,需要一个外部时钟触发信号,为此将使用频率范围在4~16MHz之间的晶体振荡器。芯片内部存在一个自动校准的RTC振荡电路,其实际运行的频率能够达到32KHZ。在本次设计中,因为STM32系列拥有丰富的串口接口,因此可以实现与多个通讯模组通信。同时可以添加调试接口,利用串口软件实现调试功能,打印设备状态信息。
2.2 温湿度传感器模块
温湿度传感器模块核心是以AHT10芯片作为核心部分,还包括电平转换电路。AHT10芯片的产品特性如下,芯片的输入电压范围:2.3V至3.3V;具有低功耗的特点;芯片通讯方式采用标准的I2C接口通信。该温湿度传感器芯片的精度如下,湿度精度±3%RH,温度精度0.5℃。模块的参考设计电路如图2-2所示。
图2-2 温湿度传感器模块
2.3 光照强度传感器模块
光强传感器模块核心是以BH1750芯片作为核心部分,还包括电平转换电路。BH1750芯片的产品特性如下,芯片的输入电压范围:3.0V至3.6V之间;其峰值灵敏度波长的典型值为560nm;输入的光照强度范围为1~65535Lx,其最小的分辨率为0.5Lx[11]。BH1750芯片采用的通讯方式是标准的I2C接口通信。模块的参考设计电路如图2-3所示。
图2-3 光照强度传感器模块
2.4 大气压强传感器模块
气压传感器模块核心是以BMP280芯片作为核心部分,还包括电平转换电路。气压传感器的产品特性如下,芯片的输入电压范围:1.7~3.6V;芯片的气压工作范围为300hPa至1100hPa;芯片工作温度范围为-40℃至85℃;BMP280芯片支持标准的I2C接口通信和SPI通信;模块参考设计电路图如图2-4所示。
图2-4 气压传感器模块
2.5 显示模块
在本次的环境监测系统设计中,选择了1.8寸TFT彩色屏幕作为该系统的显示模块,LCD彩屏采用SPI接口通讯方式,驱动IC是ST7735S,其支持的显示的分辨率为128*160;支持16Bit RGB范围 65K色显示。该显示模块支字符,字符串,汉字,图片等效果显示。 彩色TFT显示模块接口电路图如图2-5所示
图2-5 显示模块接口
2.6 无线通信模块
环境监测系统选择了ESP8266系列芯片作为无线通讯部分。ESP8266系列芯片,其CPU时钟速率最高可以达到160MHz,同时具有丰富的外设接口;经典的WIFI模式支持三种类型,包括Station客户端模式、SoftAP服务端模式和SoftAP+Station混合模式[12];该无线模组支持TCP、HTTP、MQTT等基本网络协议。无线通信模块参考电路设计如图2-6所示。
图2-6 无线通信模块
2.7 按键控制模块
在环境监测系统的设计中,通过按键模块进行GPIO输入操作,从而无线通信模块的配网操作。在本次环境监测系统的设计中,当按键KEY1按下时,LCD屏幕则会显示传感器数据监测信息;当按键KEY2按下时,LCD屏幕则会显示网络状态信息;当按键KEY3按下时,LCD屏幕则会显示系统相关信息。按键模块电路图如图2-7所示。
图2-7 按键模块
2.8 电源接口电路
在电源供电方式选择过程中,可以采用的是连接USB接口进行供电。由于大部分的传感器设备模块的输入电压范围在3.3V左右,所以需要设计电平转换电路。该部分主要由电源线引入5V/1A的电源给系统供电,经KIA1117芯片降压为3.3V,给STM32主控系统和传感器设备供电。电源接口电路图如图2-8所示。
图2-8 电源接口电路
3 系统软件设计 3.1 主程序设计
基于STM32的环境监测系统的主程序流程如下。整个系统,在提供电源之后,开始进行系统模块的初始化操作。如进行传感器设备的初始化,LCD模块的初始化,无线通讯模组的初始化。当完成初始化操作之后,LCD屏幕则会显示初始化信息。此时,利用路由器或手机热点提供WIFI信号,WIFI模块会进行联网操作。当联网成功时,系统开始接收传感器设备采集的数据,APP程序会显示相关传感器数据信息,LCD屏幕也会显示环境监测系统的主要监测数据。如果联网失败,则会重新尝试连接网络。主程序设计流程图如图3-1所示。
图3-1 主程序设计流程图
3.2 传感器数据采集及处理
环境监测系统主要需要监测的数据,有温湿度数据,光照强度数据和大气压强数据。选择的环境监测系统的传感器,AHT10,BH1750,BMP280都是通过标准的I2C接口进行通信。
对于温湿度数据的采集,使用AHT10传感器。AHT10采集数据的流程。第一步,模块进行上电,等待40ms,目的是在读取温湿度数据过程之前,进行初始化操作。第二步,当等待时间结束后,进行触发测量操作。第三步,等待测量过程完成,从而获取传感器采集到的温湿度数据。流程如图3-2所示。
图3-2 温湿度获取流程
对于光照强度数据的采集,使用BH1750传感器。计算BH1750采集结果,单片机通过I2C协议读取的第一个字节是 BH1750寄存器的高8位,第二字节为寄存器的低8位数据,高8位数据左移8位再加上低8位数据[13],利用公式去计算最终的光照强度数值。测量步骤如图3-3所示。
图3-3 BH1750测量程序步骤
对于气压数据的采集,使用BMP280传感器。 BMP280传感器的初始化流程如下,第一步,芯片内部数据全部清零;第二步,读芯片ID;第三步,进行测量控制寄存器操作;第四步,进行测量,测量时间的间隔为0.5ms;第五步,读取补偿值数据。官方数据手册提供的BMP280测量流程如图3-4所示。
图3-4 BMP280测量流程
在读取数据时,需要进行滤波操作使结果的更加稳定。BMP280传感器获取气压数值的底层驱动代码如图3-5所示。
图3-5 BMP280驱动代码
3.3 显示模块程序设计
环境监测系统选择了1.8寸TFT彩屏作为显示模块部分。主要的显示内容是传感器采集的数据,网络状态信息,系统信息,NTP网络时间以及系统开机启动的界面。LCD显示驱动,提供了基本的显示基本的英文字符,数字,以及显示汉字和图片的函数接口,同时支持不同的大小的字体的函数接口。
第一部分,系统上电开机启动界面,显示开机界面图片及相关信息。在开机启动界面的设计中,使用彩色图片取模软件,进行设置图片尺寸大小,色彩参数。从而获取对应的数组代码。调用LCD图片显示函数TFT_ImageShow显示图片,支持不同尺寸的大小的图片显示,本次显示的图片大小为120*120。
第二部分,显示环境监测系统的系统信息功能选择界面。调用system_show()函数,实现的效果是三种基本信息功能选择的展示。第一,SensorMessage传感器数据信息展示功能,第二,NetworkMessage网络状态信息展示功能,第三,SystemMessage系统基本信息展示功能。
第三部分,显示环境监测系统的传感器数据信息SensorMessage。数据信息主要是显示温湿度Temperature和湿度Humidity,光照强度数据Light_Intensity,气压传感器数据Pressure。驱动代码如图3-6所示。
图3-6 传感器数据信息显示
第四部分,显示环境监测系统的网络状态信息NetworkMessage,主要是显示是否连接到无线网络的状态信息。第五部分,系统基本信息展示。
在本次显示模块的程序设计中,完成了基本数据信息的展示。由于需要进行图片显示,占用资源较多。后期可以使用SD卡存储媒体资源,外部调用,减少单片机内部芯片资源的使用。在功能选择界面的程序设计中,后期可以完善功能选择的部分代码,实现多级菜单的效果。
4.4 机智云物联网云平台设备接入
在本次的环境监测系统的设计中,利用了无线模块进行基本通信操作。传统的无线模组与单片机进行数据交换,一般的方案是利用无线模组建立局域网实现通信功能。随着云计算等相关信息技术的进步,现在的无线通讯模组可以实现与云端连接,实现数据远程传输的功能。在本次设计中,使用的无线模组需要连接网络,并接入云平台。用户可以通过登录机智云物联网云平台后台,查看无线通讯模块上报的传感器数据和进行远程控制等操作。在物联网云平台的选择中,选择了国内的机智云物联网平台。物联网设备接入的方案,如图4-7所示。
图4-7 物联网设备接入
云平台提供了两种版本的GAgent通信协议的接入方案,主要是独立MCU方案和SOC方案两种。本次环境监测系统的设计中,选择了独立MCU方案接入平台。在本次设计过程中,需要把GAgent协议移植到WIFI模组上面,从而实现对接云平台进行数据交互的功能。云平台提供了GAgent固件,GAgent固件的主要作用是完成对数据进行上报云平台和平台远程下发命令的功能[14]。固件下载效果如图4-8所示。
图4-8 固件下载
在本次的环境监测系统是软件设计中,采用了MCU+WIFI通信模组方案,现在介绍接入机智云平台的流程。第一步,注册IoT平台的开发者账号,并登陆选择产品类型并创建。第二步,填写产品相关的基本信息之后,获取到平台提供的Product Key和Product Secret等密钥信息[15],如图4-9所示。
图4-9 创建产品基本信息
第三步,创建相关数据点信息,完成相关数据类型的填写。在环境监测系统的设计中,需要创建温度数据Temperature,湿度Humidity,光照强度Light_Intensity,气压Pressure等主要的传感器数据点,如图4-10所示。
图4-10 数据点信息
第四步,使用IoT平台提供SDK文件包,进行相关代码移植。在SDK包生成的过程中,平台提供了两种类型。本次系统设计过程中,选择独立MCU方案作为最终方案。在支持的硬件平台中,有常见MCU类型。例如有STM32平台,MSP430平台等,都提供了相关的测试SDK包。选择使用通用的MCU平台生成的SDK的代码移植,有利于之后移植到其他的MCU芯片平台上面去,选择如图4-11所示。
图4-11 MCU开发平台选择
机智云SDK包的代码移植到STM32系列平台的流程如下。在整个代码移植的过程,主要是去移植串口初始化及配置,定时器的初始化及配置[16],传感器数据的采集接收和上报函数的配置,以及相关模块的初始化配置。
第一部分,进行移植串口配置函数操作,在本次设计中主要是使用了串口3与无线通信模组进行数据交换。STM32单片机的引脚PB10为USART3_TX,引脚PB11为USART3_RX,其中USART3_TX与WIFI模组UART_RX连接,其中USART3_RX与WIFI模组UART_TX连接。配置串口3中断函数USART3_IRQHandler(),移植gizPutData(),把数据写入到缓冲区里面,代码如图4-12所示。
图4-12 串口3中断服务函数
第二部分,定时器代码移植。在本次设计中使用了定时器3进行毫秒定时。在定时器3的中断服务处理函数中移植了gizTimerMs(),提供系统的毫秒定时操作,代码如图4-13所示。
图4-13 定时器3中断服务函数
第三部分,网络协议的配置。在Gizwits初始化函数中,调用了定时器TIM3的初始化,配置了1ms定时,USART3_Configuration设置波特率为9600。然后是进行设备状态结构体的初始化,数据缓冲区的初始化配置。网络协议的配置及初始化移植的代码如图4-14所示。
图4-14 机智云初始化函数
传感器采集数据的成员,包括valueTemp,valueHum,valuePress,valueLight_Intensity等,数据上报函数userHandle()实现数据上报功能,代码如图4-15所示。
图4-15 数据上报函数
在事件处理函数中,添加了相关的配网成功或失败以及网络时间获取的标志位,并进行相关的显示。在配置网络的操作,使用了开发板上面按键模块进行配置。配网采用的AirLink连接模式,在主函数里面,编写了按键检测函数。当按键KEY1_PRES的按下时,进行手机APP配网。在配网时,手机APP和无线模组需要连接到同一个热点信号下面进行配置。输入WIFI的账号SSID和Password,选择WIFI模组的类型进行配置,等待配网完成,设备名称信息则会显示在APP上面。
4.5 上位机软件应用开发
上位机软件应用开发。在本次的环境监测系统的设计中,采用了Android应用程序作为上位机软件。一般在APP开发设计过程中,主要是进行APP的UI界面设计,和相关功能模块底层逻辑设计。在APP的UI界面设计的过程中,选择使用XML进行布局,在应用程序的底层逻辑设计使用的Java语言。应用开发选择的是安卓平台,如图4-16所示。
图4-16 选择安卓平台
本次设计中,使用平台提供生成的SDK文件包进行修改。由于平台的提供的例程只是完成了基本的显示效果,界面效果一般。所以接下来的主要工作是对官方源码进行修改。打开Android Studio软件,导入从平台下载的Demo源码,通过修改src文件里面的layout的布局文件,进行界面UI设计和优化。通过对src文件里面的java代码,进行底层逻辑代码修改[17]。在界面的UI设计工过程,主要是传感器的数据和系统状态信息显示,基本显示效果如图4-17所示。APP的界面设计需要优化,后期可以添加相关传感器历史数据的查看和实时动态曲线的功能[18]。
图4-17 APP界面效果
5 硬件与软件调试
5.1 硬件实物调试
环境监测系统的硬件实物的初步实验性调试工作。在实验性调试中,通过USB线接上电脑USB接口,实现供电。系统供上电之后,会有开机启动界面显示。
开机结束之后,界面会停留在系统的功能选择界面。选择界面包括了三种功能展示。第一部分是传感器采集到的数据SensorMessage展示, 第二部分是系统的网络状态信息NetworkMessage展示, 第三部分是系统的基本信息SystemMessage展示。基本功能的选择界面,如图5-1所示。
图5-1 功能选择界面
在本次环境监测系统的设计中,当按键KEY1按下时,LCD屏幕则会显示传感器数据监测信息。展示数据包括了温度Temp,湿度Humi,光照强度Light_Data,气压Pressure,显示效果如图5-2所示。
图5-2 传感器数据显示界面
当按键KEY2按下时,LCD屏幕则会显示该系统的网络信息。展示的内容主要部是使用的无线模组和和云平台的基本信息。在NetworkState设计中,如果无线模组还没有配网成功时,显示蓝色效果,如图5-3所示。当无线模组成功连接到WiFi信号时,则会显示红色效果,如图5-4所示。
当按键KEY3按下时,LCD屏幕则会显示系统基本信息。如图5-5所示。
图5-5 系统基本信息界面
在整个过程中,当无线模组成功的连接到WiFi网络信号时。在发送网络时间的获取的命令下,则会一直在LCD屏幕的最后一行显示时间。如图5-6所示。
图5-6 网络时间显示
5.2 软件调试
基于STM32的物联网环境监测系统的上位机软件调试。在使用该Android应用程序时,APP和无线模组需要一起配合操作。在配网时,需要把手机和WiFi同时连接到同一个热点信号下面,进行配置。输入WiFi的账号SSID和Password,选择WiFi模组的类型进行配置。配置过程中APP和硬件设备不要进行任何操作,否则会出现配置失败的情况。如果配置失败,请按下配网按键,重新配置。APP配网流程如图5-7所示。
图5-7 APP配网流程
当配网成功时,会显示在物联网云平台上面注册的设备名称。点击进入,则会显示相关传感器数据信息,如图5-8所示。
图5-8 APP显示传感器数据信息
登录物联网平台的后台,选择查看设备日志功能,在设备的运行记录里面,可以查看到上报的数据点信息,并支持动态曲线显示,如图5-9所示。
图5-9 设备后台运行日志
☝点击上图查看演示视频
6 总结
基于STM32的物联网环境监测系统的整个设计过程中,使用了相关的环境传感器设备去监测周围环境的基本质量参数。在整个设计过程中,利用LCD屏幕显示数据信息,能够显示基本传感器测量的数据。由于显示效果一般,后期可以添加嵌入式GUI图形界面,例如LVGL,TouchGFX,emWin。使用无线通信模组与单片机进行数据交互,完成了基本的通信功能,但在模组的选择上需要考虑到其稳定性和功耗问题。在上位机软件程序设计中,使用了Android应用程序去完成远程监测的功能,但是APP的界面设计需要优化,后期可以添加相关传感器实时动态曲线的功能。
在本次的设计中,虽然初步完成了基本的设计要求,实现了基本物联网通信功能。但是,本设计的硬件方案和传感器选型不够成熟,系统的功耗问题和稳定性还需要去解决。在系统的稳定性上面,后期可以移植RTOS,减少裸机开发过程中的问题。本设计的使用场景的多样性有待进一步加强。特别是在芯片的选择上面,由于在国内外疫情的反复多变的情况下,半导体行业发展受到了严重打击。芯片出货延期和成本增加,像STM32系列芯片的价格疯狂增涨。因此有必要去在国产的芯片平台实现移植。例如在国产的兆易创新GD32、沁恒CH32、灵动MM32、乐鑫科技的ESP32等系列国产芯片实现功能移植。
附录A 原理图A
附录B 原理图B
附录C 原理图C
附录D 实物图
|