STM32的 DHT11温湿度模块+红外人体感应模块程序

本文介绍了如何在STM32单片机上实现DHT11温湿度模块和HC_SR501红外人体感应模块的集成应用。通过单总线通信读取DHT11数据并在主函数中显示,配置HC_SR501模块为下拉输入,检测人体接近并输出相应电平。程序实现了在回南天湿度67%环境下,结合OLED显示相关信息。
摘要由CSDN通过智能技术生成

DHT11温湿度模块

在这里插入图片描述
传感器包括一个高分子电阻式感湿度元件和一个NTC测温元件,并于一个高性能8位单片机相连,通过单总线与微处理器通信,只需要一根数据线。

在这里插入图片描述
在相关例程基础上进行改动

//复位DHT11
void DHT11_Rst(void)    
{
                    
 DHT11_IO_OUT();  //SET OUTPUT
    DHT11_DQ_OUT=0;  //拉低DQ
    delay_ms(20);     //拉低至少18ms
    DHT11_DQ_OUT=1;  //DQ=1 
 delay_us(30);      //主机拉高20~40us
}
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)     
{
      
 u8 retry=0;
 DHT11_IO_IN();//SET INPUT  
    while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
 {
   
  retry++;
  delay_us(1);
 };  
 if(retry>=100)return 1;
 
红外温湿度传感器代码基于stm32主要包括以下步骤: 1. 初始化串口:用于与红外温湿度传感器通信,需要设置波特率、数据位、停止位和校验位等参数。 2. 初始化IIC总线:用于与温湿度传感器通信,需要设置SDA和SCL引脚的端口号和引脚号等参数。 3. 配置红外传感器:设置红外传感器的工作模式、采样频率等参数。 4. 读取红外传感器数据:从串口读取红外传感器的数据,可以通过数据处理得到温度和湿度的值。 5. 配置温湿度传感器:设置温湿度传感器的工作模式、采样频率等参数。 6. 读取温湿度传感器数据:通过IIC总线读取温湿度传感器的数据,可以得到温度和湿度的值。 以下是一个简单的红外温湿度传感器代码示例: ``` #include "stm32f10x.h" #include "stdio.h" #define USART1_DR_Base 0x40013804 //定义串口1数据寄存器地址 void USART1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //TX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //RX GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } void IIC_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; GPIO_Init(GPIOB, &GPIO_InitStructure); } void IR_Config(void) { //TODO: 配置红外传感器 } void DHT_Config(void) { //TODO: 配置温湿度传感器 } void USART1_SendByte(u8 byte) { while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); USART_SendData(USART1, byte); } void Read_IR_Data(void) { //TODO: 读取红外传感器数据 } void Read_DHT_Data(float *temp, float *humi) { //TODO: 读取温湿度传感器数据 } int main(void) { float temp, humi; USART1_Config(); IIC_Config(); IR_Config(); DHT_Config(); while(1) { Read_IR_Data(); Read_DHT_Data(&temp, &humi); printf("Temperature: %.2fC\r\n", temp); printf("Humidity: %.2f%%\r\n", humi); } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值