admin 管理员组

文章数量: 887017

软件设计

总体程序流程图

开始

1. 初始化系统

- 初始化STM32芯片及外设(如GPIO、ADC、UART等)

- 配置系统时钟和中断

2. 初始化传感器

- 初始化环境传感器(如温湿度传感器、光敏传感器等)

- 设置传感器采样参数和通信协议

3. 初始化通信模块

- 配置与外部通信的接口(如UART、SPI、I2C等)

- 初始化无线模块(如蓝牙、LoRa等)

4. 进入主循环

- 循环执行以下步骤:

a. 读取传感器数据

b. 处理传感器数据

c. 执行环境监测算法

d. 更新系统状态及显示(如果有)

e. 处理通信任务(如接收命令、发送数据)

f. 处理异常情况

g. 进入休眠模式(可选,用于节能) 结束

       该系统主要由STM32通过DMA采集多通道的ADC接口来连接光照强度、PM2.5模块、空气质量模块,采集到传感器的模拟量后,通过算法,进而得到光照强度、PM2.5和空气质量的值;并通过I2C和BMP180通信得到大气压的数值;通过单总线和DHT11通过得到温湿度的数值;采集的环境数据在LCD5110液晶上显示;并通过串口来与WIFI模块进行通信,通过串口配置与WIFI模块一样的波特率,然后发送特定的AT指令,可以对WIFI模块进行配置及控制,使得可以与手机进行通信,最后通过串口将采集传感器的数值经过WIFI模块发送到手机APP上,进而就可以实现在Android平台上,手机对环境数据的检测;最后,本作品还可通过手机或者按键对温湿度、光照强度、PM2.5的阀值做了设定,当数值超出这个界限的时候,语音播放模块将会发送语音信息来警告此时的数值已经超过了所设定的界限。

  具体的工作流程为:

(1)初始化系统设置,包括初始化系统的时钟,设设置中断的优先级,初始化各模块,初始化串口1和串口3(设置通信的波特率位115200),初始化定时器3的频率为100HZ;

(2)STM32发送相关的AT指令,控制WIFI模块创造一个局域网;

(3)如果手机连接成功,就将STM32平台采集到的环境数据每30秒通过WIFI发送给手机,并且在手机端显示出当前的环境数值;

(4)用户可以根据自己的需求通过手机端按键设置报警的阀值,当环境数值超过设定的阈值时,主控制器就会控制语音模块播放出相应的报警信息。

其具体的工作流程图如下图所示。

​​​​​​​注意事项

     在设计基于STM32的户外环境监测系统的软件时,需要考虑以下注意事项:

  1. 低功耗设计: 在户外环境中,系统可能需要长时间运行,因此务必考虑功耗管理。利用STM32的低功耗模式,合理设计系统睡眠和唤醒策略,以最大程度地延长电池寿命或减少能耗。

  2. 实时性要求: 确保系统能够及时响应环境变化和传感器数据。在软件设计中,使用中断服务程序(ISR)和定时器来处理实时事件,并采用合适的任务调度机制,确保高优先级任务能够及时执行。

  3. 传感器数据处理: 考虑传感器数据的采集、处理和存储。确保采集到的数据准确性和可靠性,采用合适的滤波算法和校准方法。如果需要,可以使用DMA(直接存储器访问)来提高数据采集效率。

  4. 通信协议: 考虑系统与外部设备或网络的通信需求。选择适合的通信协议,如UART、SPI、I2C等,与其他设备进行数据交换或远程监控。如果需要无线通信,可以考虑使用蓝牙、LoRa、Wi-Fi等通信模块。

  5. 异常处理与容错机制: 考虑在软件中实现异常处理和容错机制,以应对意外情况和异常状态。例如,设置合适的错误处理程序、实现数据校验和恢复机制,提高系统的稳定性和可靠性。

  6. 固件升级与远程管理: 考虑在软件设计中实现固件升级和远程管理功能,以便对系统进行远程配置、监控和维护。可以利用Bootloader技术,实现固件的远程下载和更新。

  7. 环境适应性: 考虑户外环境的复杂性和变化性,确保软件能够适应不同的气候条件和环境变化。在软件设计中,尽量降低对外部环境的依赖,提高系统的稳定性和可靠性。

WIFI模块

      针对基于STM32的户外环境监测系统中的WiFi模块的软件设计,以下是一般的步骤和注意事项:

  1. 选择合适的WiFi模块: 首先,选择与STM32兼容且符合系统需求的WiFi模块。常见的选择包括ESP8266、ESP32、或者一些集成了WiFi功能的STM32型号。

  2. 配置WiFi模块: 在软件设计中,需要编写初始化代码以配置WiFi模块。这包括设置WiFi连接参数(如SSID和密码)、选择工作模式(如Station模式或者AP模式)、配置网络协议(如TCP/IP协议栈)、以及处理连接错误或断开连接等情况。

  3. 数据传输: 设计数据传输协议和数据包格式,确保STM32能够与其他设备或者服务器之间进行数据交换。可以使用HTTP、MQTT、WebSocket等协议进行数据传输,根据系统需求选择合适的协议。

  4. 错误处理与重连机制: 考虑WiFi连接可能出现的错误情况,例如连接超时、密码错误、网络不稳定等。编写相应的错误处理代码,包括重连机制,以确保系统稳定连接网络。

  5. 低功耗优化: 如果系统对功耗有要求,需要优化WiFi模块的功耗。可以通过合理的睡眠和唤醒策略、定时发送数据等方法来降低WiFi模块的功耗。

  6. 安全性考虑: 如果系统需要进行安全传输,需要考虑数据加密和身份验证等安全机制。确保WiFi连接的安全性,防止数据泄露或者恶意攻击。

  7. 并发处理: 如果系统需要同时处理WiFi通信和其他任务,需要使用合适的并发处理技术,如使用RTOS来管理任务和资源,以确保系统稳定运行。

  8. 测试和调试: 在软件开发过程中,进行充分的测试和调试,确保WiFi模块能够正常工作,并与其他模块(如传感器模块、数据处理模块等)协调工作。

ESP8266模块

        对于基于STM32的户外环境监测系统中的ESP8266模块,以下是软件设计的一般步骤和注意事项:

  1. 选择通信接口: 选择STM32与ESP8266通信的接口。通常情况下,UART是最常见的选择,因为ESP8266模块通常通过串口与MCU通信。

  2. 配置串口: 初始化STM32的串口,配置波特率、数据位、校验位和停止位等参数,以便与ESP8266进行通信。

  3. 初始化ESP8266: 编写初始化代码,确保ESP8266模块能够正常工作。这包括设置WiFi连接参数、连接WiFi网络、启动TCP/IP协议栈等。

  4. 数据传输: 设计数据传输协议和数据包格式,确保STM32能够与ESP8266模块之间进行数据交换。可以使用HTTP、MQTT、WebSocket等协议进行数据传输,根据系统需求选择合适的协议。

  5. 错误处理与重连机制: 考虑ESP8266连接可能出现的错误情况,例如连接超时、密码错误、网络不稳定等。编写相应的错误处理代码,包括重连机制,以确保系统稳定连接WiFi网络。

  6. 低功耗优化: 如果系统对功耗有要求,需要优化ESP8266模块的功耗。可以通过合理的睡眠和唤醒策略、定时发送数据等方法来降低ESP8266模块的功耗。

  7. 安全性考虑: 如果系统需要进行安全传输,需要考虑数据加密和身份验证等安全机制。确保ESP8266连接的安全性,防止数据泄露或者恶意攻击。

  8. 并发处理: 如果系统需要同时处理ESP8266通信和其他任务,需要使用合适的并发处理技术,如使用RTOS来管理任务和资源,以确保系统稳定运行。

  9. 测试和调试: 在软件开发过程中,进行充分的测试和调试,确保ESP8266模块能够正常工作,并与其他模块(如传感器模块、数据处理模块等)协调工作。

     ESP8266模块支持STA/AP/STA+AP 三种工作模式。

  • STA 模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。
  • AP 模式:ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。
  • STA+AP 模式:两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。

       本系统此次使用AP模式,实现局域网的无线控制。WIFI模块主要是负责系统与手机WIFI的通信,从而实现两者之间的数据传输。MCU与WIFI通信主要是通过串口来实现的,通过发送相关的AT指令,系统就可以完成对WIFI模块的操作以及相应的控制。

       其实现的部分软件代码如下:

注意事项

       在基于STM32的户外环境监测系统中使用ESP8266模块时,以下是一些注意事项:

  1. 电源稳定性: ESP8266对电源的要求较高,应确保为其提供稳定的电源。使用合适的电源管理电路,以防止电压波动或干扰影响ESP8266的正常工作。

  2. 封装防水防尘: 户外环境变化多端,为ESP8266提供合适的封装以保护其免受水、尘和其他外部环境因素的影响,以确保长期稳定运行。

  3. 天线设计: ESP8266的性能与天线设计密切相关。选择合适类型的天线并正确设计其位置和布局,以确保稳定的信号传输和良好的通信覆盖范围。

  4. 温度控制: 在户外环境中,温度可能会极端变化。为ESP8266提供合适的温度控制,避免过热或过冷影响其性能和寿命。

  5. 防雷保护: 在户外环境中,雷击可能会对ESP8266造成损害。采取适当的防雷措施,如使用雷击保护电路或安装避雷针,以保护ESP8266免受雷击损害。

  6. 稳定的网络连接: 确保ESP8266能够稳定连接到WiFi网络,考虑网络覆盖范围和信号强度,以及网络稳定性因素,如信道干扰和网络拥塞等。

  7. 数据安全性: 对于户外环境监测系统,数据安全性尤为重要。采取适当的安全措施,如数据加密、身份验证和防止重放攻击,确保ESP8266与其他设备之间的数据传输安全可靠。

  8. 定期维护和监控: 定期检查ESP8266模块的状态和性能,确保其正常工作。定期监控网络连接和传输数据,及时发现并解决可能出现的问题,以确保系统的稳定性和可靠性。

        通过考虑以上注意事项,可以更好地设计和使用ESP8266模块,使其在基于STM32的户外环境监测系统中发挥最佳性能。

LCD5110模块​​​​​​​

      在基于STM32的户外环境监测系统中使用LCD5110模块时,以下是软件设计的一般步骤:

  1. 选择LCD5110库: 首先,选择适用于STM32的LCD5110库,或者编写自己的驱动程序。常见的库包括Adafruit的PCD8544库和自定义的LCD5110驱动程序。

  2. 初始化LCD5110模块: 编写初始化代码,配置STM32的GPIO口和SPI接口,以及LCD5110模块的引脚和参数。确保LCD5110模块能够正常工作。

  3. 设计显示函数: 编写显示函数,用于在LCD5110屏幕上显示监测数据和系统状态。根据需求设计合适的显示格式和界面布局,确保数据清晰可读。

  4. 更新显示数据: 在主循环中编写代码,定期更新LCD5110屏幕上的显示数据。根据监测系统的采样频率和数据处理速度,选择合适的刷新频率,确保显示数据实时性。

  5. 错误处理与异常情况处理: 实现错误处理和异常情况处理机制,例如显示数据异常、通信异常等情况。及时捕获并处理异常,确保LCD5110模块的稳定性和可靠性。

  6. 低功耗优化: 考虑LCD5110模块的功耗,采取措施降低功耗,以延长电池寿命或减少能耗。例如,通过控制LCD5110的背光灯和SPI接口的时钟速率来降低功耗。

  7. 测试和调试: 在软件开发过程中,进行充分的测试和调试,确保LCD5110模块能够正常工作,并与其他模块(如传感器模块、通信模块等)协调工作。

       Nokia5110的通信协议是一个没有MISO只有MOSI的SPI协议,如果MCU有富裕的SPI接口,也可以利用硬件SPI,但通常没有必要,只需要软件程序模拟即可。本程序使用软件来模拟SPI,

       程序如下:

       管脚D/C(LCD_DC)用于选择写的是命令(D/C=0)还是数据(D/C=1)。Nokia5110的初始化接通电源后,内部寄存器和RAM的内容是不确定的,这需要一个RES低电平脉冲复位一下。当VDD变为高电平,达到VDDmin(或更高)之后,最多100ms,RST输入低电平(电平幅度<0.3VDD)。

  5110复位时序

      设置Nokia5110液晶的坐标Nokia5110(PCD8544)的命令集:

命令字符解释:

       要注意的是“功能设置”命令的“H”和“V”。H=0使用基本指令集命令,H=1使用扩展指令集命令。V=0水平寻址,V=1垂直寻址

列通过地址指针寻址,地址范围为X  0~83(1010011),Y 0~5(101)。地址不允许超过这个范围。

        在垂直寻址(V=1),Y地址在每个字节之后递增,经最后的Y地址(Y=5)之后,Y绕回0,X递增到下一列的地址。

        在水平寻址模式(V=0),X地址在每个字节之后递增,经最后的X地址(X=83)之后,X绕回0,Y递增到下一行的地址。经每一个最后地址之后(X=83,Y=5),地址指针绕回地址(X=0,Y=0)。

注意事项

     在基于STM32的户外环境监测系统中使用LCD5110模块时,以下是一些注意事项:

  1. 适应户外环境: LCD5110模块属于液晶显示器,对于户外环境的光照和温度变化敏感。选择适应户外使用的LCD5110模块,具有良好的耐温性能和可视性。

  2. 低功耗设计: 考虑LCD5110模块的功耗,采取措施降低功耗,以延长电池寿命或减少能耗。例如,通过调整显示刷新率或采用低功耗模式等方式来降低功耗。

  3. 屏幕保护: 在户外环境中,LCD5110模块容易受到灰尘、雨水等污染,应考虑使用透明的屏幕保护罩来保护LCD屏幕,延长其使用寿命。

  4. 屏幕亮度: 考虑户外环境的强光情况,LCD5110模块可能会受到阳光的干扰而影响显示效果。选择具有较高亮度的LCD5110模块,或者在设计中考虑增加背光灯以提高可视性。

  5. 驱动电路设计: 使用合适的驱动电路来控制LCD5110模块,确保能够正常显示数据。可以使用STM32的GPIO口来控制LCD5110模块的引脚,或者使用外部驱动芯片来简化控制电路。

  6. 显示数据格式: 根据监测系统的数据类型和显示需求,设计合适的显示数据格式和界面布局。考虑显示数据的清晰度和易读性,尽量简洁明了地显示监测数据。

  7. 异常处理: 在软件设计中实现LCD5110模块的异常处理机制,如显示数据异常、通信异常等情况。及时捕获并处理异常,以确保系统的稳定性和可靠性。

  8. 软件优化: 在软件设计中优化LCD5110模块的显示操作,尽量减少刷新频率和冗余显示操作,以提高系统的响应速度和效率。

BMP180模块

       BMP180被设计成直接连接到经由I2C总线的移动设备的微控制器。压力和温度数据具有由BMP180的E2PROM中的校准数据来补偿。对于基于STM32的户外环境监测系统中的BMP180模块,以下是软件设计的一般步骤:

  1. 选择合适的驱动库: 首先,选择适用于STM32的BMP180驱动库。您可以选择使用现有的第三方库,或者编写自己的驱动程序。

  2. 初始化I2C接口: BMP180模块通常通过I2C接口与STM32通信。因此,首先需要初始化STM32的I2C接口,配置相应的引脚和参数。

  3. 初始化BMP180模块: 编写初始化代码,配置BMP180模块的参数,如采样分辨率、工作模式等。确保BMP180模块能够正常工作。

  4. 读取传感器数据: 设计函数用于读取BMP180模块采集到的环境数据,如气压和温度。根据需要进行数据转换和校准,以确保数据的准确性和可靠性。

  5. 处理传感器数据: 对于读取到的传感器数据,进行适当的处理和计算,如转换为实际环境参数(如大气压力、海拔高度等),或者与其他传感器数据进行关联。

  6. 显示数据或上传至服务器: 将处理后的环境数据显示在LCD5110屏幕上,或者通过通信模块上传至服务器,实现远程监测和数据存储。

  7. 错误处理与异常情况处理: 实现错误处理和异常情况处理机制,例如读取数据超时、通信错误等情况。及时捕获并处理异常,确保系统的稳定性和可靠性。

  8. 低功耗优化: 考虑BMP180模块的功耗,采取措施降低功耗,以延长电池寿命或减少能耗。例如,通过合理的睡眠和唤醒策略来降低功耗。

  9. 测试和调试: 在软件开发过程中,进行充分的测试和调试,确保BMP180模块能够正常工作,并与其他模块(如LCD5110模块、通信模块等)协调工作。

 一般功能和应用原理图

       该BMP180由一个压阻传感器,模拟 - 数字转换器,并与E2PROM和一个串行I 2 C接口的控制单元。该BMP180提供的压力和温度补偿的值。 E2PROM中已存储的个人校准数据的176位。这是用于补偿偏移量,温度依赖性和传感器的其他参数。

UP=压力数据(16——19位)·UT=温度数据(16位)

       温度与压力的测量对于所有的计算这里给出一个ANSI C代码可从博世传感器(“BMP180_API”)。 微控制器发送一个启动序列启动压力或温度测量。转换时间后,结果值(UP或UT)可通过I2C接口读取。用于计算温度℃并在帕斯卡的压力,该校准数据已被使用。这些常数可以从BMP180 E2PROM通过在软件初始化I2C接口被读出。 采样率可以提高到128个样本每秒(标准模式),用于动态测量。在这种情况下,它足以对测量温度只有每秒一次,在同一期间使用该值对于所有的压力测量。

        硬件压力采样精度模式通过使用不同的模式下的功耗,速度和分辨率之间的最佳折衷,可以选择,见下表。

        关于噪声特性的进一步信息,请参阅相关的应用笔记“噪音压力传感器应用”。所有模式都可以在更高的速度下进行,例如高达每秒128次为标准模式,与消耗电流成比例地增加的采样率。

不同模式

        在基于STM32的户外环境监测系统中,软件可以选择不同的压力采样精度模式来适应不同的应用场景和要求。BMP180传感器通常提供多种采样精度模式,包括低精度、标准精度和高精度模式。以下是针对不同压力采样精度模式的一般说明:

  1. 低精度模式: 在低精度模式下,传感器的采样精度较低,但是采样速度较快,功耗较低。这种模式适用于对精度要求不高,但对采样速度和功耗要求较高的场景。例如,用于简单的气压趋势监测和天气预报等应用。

  2. 标准精度模式: 在标准精度模式下,传感器的采样精度和功耗处于中等水平。这种模式适用于大多数一般性的环境监测应用,能够提供较为准确的环境参数数据,并且具有较好的采样速度和功耗平衡。

  3. 高精度模式: 在高精度模式下,传感器的采样精度最高,但功耗也相应增加。这种模式适用于对精度要求较高的应用,如科学研究或者气象监测等领域,能够提供更为精确的环境参数数据。

        在软件设计中,可以根据实际需求和应用场景选择合适的压力采样精度模式。通过配置BMP180传感器的工作模式和采样参数,可以实现不同精度模式下的环境监测功能,并根据需求进行功耗和性能的平衡。

软件压力采样精度模式

         对于应用中的低噪声水平是至关重要的,平均化,建议如果低带宽是可以接受的。过采样可以使用该软件的API驱动程序(OSR=3)。BMP180软件精度模式下,通过变量software_oversampling_setting通过驱动程序软件中选择模式。

校准系数

       176位E2PROM划分在每个16位的11个字。这些包含11个校准系数。每个传感器模块具有独立的系数。温度和压力的第一个计算之前,主机读出E2PROM中的数据。数据通信可通过检查,没有的话具有值0或0xFFFF的检查。

计算压力和温度

  1. 读取原始数据: 首先,通过I2C总线从BMP180模块中读取压力和温度的原始数据。BMP180模块内部存储有压力和温度的原始ADC值。

  2. 计算温度: 使用读取到的原始温度数据,通过BMP180提供的校准参数和算法,计算出实际的温度值。BMP180提供了校准参数,可以将原始温度数据转换为摄氏度或其他温度单位。

  3. 计算压力: 使用读取到的原始压力数据,同样通过BMP180提供的校准参数和算法,计算出实际的大气压力值。BMP180提供了校准参数,可以将原始压力数据转换为帕斯卡或其他压力单位。

        模式(超低功率,标准型,高,超高分辨率)可通过可变oversampling_setting选择(0,1,2,3)。真正的温度和压力的步骤为1pA(=0.01hPa=0.01mbar)和温度步长为0.1°C的计算。下图显示了详细的算法对压力和温度测量。

内存映射

       下面的内存映射显示需要哪些操作BMP180所有的外部访问的数据寄存器。左边的列显示的内存地址。中间的列描述每个寄存器位的内容。这些位的颜色表示他们是否只读,只写或读可写。存储器是易失性,使得该可写内容已被重新写入每次上电之后。

寄存器F4H  控制寄存器

Control(第0-4位)测量控制位

Sco (第5位)开始转换。该位的值保持为“1”的转换过程中和复位为“0”转换完成后(数据寄存器被填充)。

Oss (第6.7位)控制压力测量的过采样率(00B:单,01B:2次,10B:4倍,11B:8倍)。

寄存器E0H 软复位寄存器

只写 写0XB6复位

寄存器D0H  ID寄存器

只读 值为固定值0X55

       转换后,数据寄存器可以任意顺序读出(即MSB优先或LSB在前)。使用突发读取并不是强制性的。

控制寄存器的值不同的内部oversampling_setting(OSS)

        在BMP180传感器中,内部过采样(oversampling)设置用于控制压力数据的采样精度。通过设置不同的 oversampling_setting 值,可以选择不同的采样精度模式。以下是对不同 oversampling_setting 值的说明:

  1. 0 (Ultra Low Power Mode): 这是最低功耗的模式,压力数据的采样精度较低,适合于对精度要求不高,但对功耗要求较高的应用场景。此模式下,压力和温度数据的分辨率分别为 16 位和 16 位。

  2. 1 (Standard Mode): 这是标准模式,适用于一般性的环境监测应用。压力数据的采样精度较高,同时功耗适中。此模式下,压力和温度数据的分辨率分别为 19 位和 16 位。

  3. 2 (High Resolution Mode): 这是高分辨率模式,适用于对精度要求较高的应用场景。压力数据的采样精度最高,但功耗也相应增加。此模式下,压力和温度数据的分辨率分别为 24 位和 16 位。

  4. 3 (Ultra High Resolution Mode): 这是最高分辨率模式,适用于对精度要求非常高的应用。压力数据的采样精度极高,但功耗也是最高的。此模式下,压力和温度数据的分辨率分别为 24 位和 16 位。

       读取A/ D转换结果或E2PROM数据读出温度数据字UT(16位),压力数据字UP(16—19位)和数据进行如下操作E2PROM中:启动条件之后,主机发送模块地址写命令和寄存器地址。该寄存器地址选择读寄存器E2PROM数据寄存器0xAA到0xBF温度值UT或压力值UP  0XF6(MSB)的0xF7(LSB),可选为0xF8(XLSB)然后主机发送一个启动条件和随后的模块地址读将由BMP180(ACKS)进行确认。该BMP180首先发送的 MSB,由主(ACKM)承认,那么 LSB。主机发送一个“不承认”(NACKM),最后一个停止条件。可选的超高分辨率,在XLSB注册地址为0xF8可读取16位字扩展到了19位。部分程序如下:

本文标签: 监测系统 户外 环境