基于stm32f103rct6的代码,实现dht11温湿度模块显示温湿度,并且检测到温度大于35或湿度小于75%时的代码
时间: 2023-08-25 22:04:32 浏览: 238
好的,以下是基于STM32F103RCT6的代码,可以实现DHT11温湿度模块的功能,并且检测到温度大于35或湿度小于75%时会开启风扇电机并在OLED屏幕上显示当前的温湿度值。请注意,以下代码仅供参考,您需要根据实际情况进行适当修改。
```
#include "stm32f10x.h"
#include "dht11.h"
#include "oled.h"
#include "delay.h"
#define FAN_ON_THRESHOLD_TEMP 35 // 温度大于35度时开启风扇
#define FAN_ON_THRESHOLD_HUMI 75 // 湿度小于75%时开启风扇
int main(void)
{
// 初始化GPIO口
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // 风扇电机控制信号
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO速度50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 初始化DHT11传感器
DHT11_Init();
// 初始化OLED屏幕
OLED_Init();
// 显示欢迎信息
OLED_ShowString(0, 0, "Welcome to STM32", 16);
OLED_ShowString(0, 2, "DHT11 Test Demo", 16);
OLED_ShowString(0, 4, "Temp: -- C", 16);
OLED_ShowString(0, 6, "Humi: -- %", 16);
while(1)
{
// 读取温湿度值
float temperature, humidity;
DHT11_Read_Data(&temperature, &humidity);
// 将温湿度值显示在OLED屏幕上
char temp_str[16], humi_str[16];
sprintf(temp_str, "Temp: %.1f C", temperature);
sprintf(humi_str, "Humi: %.1f %%", humidity);
OLED_ShowString(0, 4, temp_str, 16);
OLED_ShowString(0, 6, humi_str, 16);
// 检测温度和湿度是否达到阈值
if (temperature > FAN_ON_THRESHOLD_TEMP || humidity < FAN_ON_THRESHOLD_HUMI)
{
// 开启风扇电机
GPIO_SetBits(GPIOB, GPIO_Pin_12);
}
else
{
// 关闭风扇电机
GPIO_ResetBits(GPIOB, GPIO_Pin_12);
}
delay_ms(1000); // 延时1秒
}
}
```
请注意,在使用此代码之前,您需要先下载并添加DHT11和OLED的驱动程序,并根据需要修改风扇电机的控制信号引脚。
阅读全文
相关推荐


















