用Keil5编写代码实现一个基于stm32f103c8t6最小系统板的工程,实现如下功能:1.DHT11传感器获取温湿度 2.MQ-135传感器获取空气质量 3.0.96寸的oled显示屏可以显示dht11传感器获取的空气温湿度以及MQ-135传感器获取的空气质量 4.当dht11传感器获取的空气温湿度以及MQ-135传感器获取的空气质量超过设定的阈值时,蜂鸣器报警 5.通过esp8266-01将dht11传感器获取的空气温湿度以及MQ-135传感器获取的空气质量上传到阿里云平台 6.通过wifi连接可以在web端显示dht11传感器获取的空气温湿度以及MQ-135传感器获取的空气质量
时间: 2024-02-12 08:03:03 浏览: 85
STM32_RC_Transmitter-stm32f103c8t6最小系统板
好的,下面是一份实现该功能的代码,需要注意的是,以下代码只是一个示例,具体的实现过程和代码编写可能会因不同的硬件环境和软件配置而有所差异。以下代码仅供参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stm32f10x.h"
#include "dht11.h"
#include "MQ135.h"
#include "oled.h"
#include "esp8266.h"
#define WIFI_SSID "your_wifi_ssid" //WiFi名称
#define WIFI_PASSWORD "your_wifi_password" //WiFi密码
#define THRESHOLD_TEMP 26 //温度阈值
#define THRESHOLD_HUMI 60 //湿度阈值
#define THRESHOLD_AIR 450 //空气质量阈值
uint8_t DHT11_Data[5] = {0}; //DHT11数据
uint16_t MQ135_Data = 0; //MQ135数据
void SysTick_Handler(void)
{
static uint16_t count = 0;
if (++count >= 1000) //1秒钟更新一次数据
{
count = 0;
//获取DHT11数据
DHT11_Read_Data(DHT11_Data);
//获取MQ135数据
MQ135_Data = MQ135_Read_Data();
//显示DHT11和MQ135数据到OLED屏幕
OLED_Show_DHT11_Data(DHT11_Data[0], DHT11_Data[2]);
OLED_Show_MQ135_Data(MQ135_Data);
//判断DHT11和MQ135数据是否超过阈值
if (DHT11_Data[0] > THRESHOLD_TEMP || DHT11_Data[2] > THRESHOLD_HUMI || MQ135_Data > THRESHOLD_AIR)
{
//蜂鸣器报警
GPIO_SetBits(GPIOB, GPIO_Pin_8);
}
else
{
//关闭蜂鸣器
GPIO_ResetBits(GPIOB, GPIO_Pin_8);
}
//将DHT11和MQ135数据上传到阿里云平台
char data[100] = {0};
sprintf(data, "{\"temperature\":%d,\"humidity\":%d,\"air_quality\":%d}", DHT11_Data[0], DHT11_Data[2], MQ135_Data);
ESP8266_Send_Data(data);
}
}
int main(void)
{
//初始化系统
SystemInit();
//初始化DHT11传感器
DHT11_Init();
//初始化MQ135传感器
MQ135_Init();
//初始化OLED屏幕
OLED_Init();
//初始化ESP8266模块
ESP8266_Init(WIFI_SSID, WIFI_PASSWORD);
//初始化蜂鸣器
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
//启动系统滴答定时器
if (SysTick_Config(SystemCoreClock / 1000))
{
while (1);
}
while (1);
return 0;
}
```
以上代码中,我们使用了一些外部库,包括dht11.h、MQ135.h、oled.h和esp8266.h。这些库中包含了对DHT11传感器、MQ135传感器、OLED屏幕和ESP8266模块的初始化和操作函数,以及对阿里云平台的数据上传函数。
在主函数中,我们首先初始化了DHT11、MQ135、OLED和ESP8266模块,然后初始化了蜂鸣器,启动了系统滴答定时器。在滴答定时器的中断处理函数中,我们每秒钟更新一次DHT11和MQ135传感器的数据,并将数据显示到OLED屏幕上,判断数据是否超过设定的阈值,如果超过则触发蜂鸣器报警,否则关闭蜂鸣器,并将数据上传到阿里云平台。
需要注意的是,在程序中需要填写WiFi的SSID和密码,以及阿里云平台的访问参数,这些参数需要根据实际情况进行配置。
阅读全文