实验器材
- CW32饭盒派开发板
- DHT11温湿度传感器
接线
开发板 | DHT11 |
---|---|
VCC | + |
GND | GND |
PB1 | OUT |
程序
- dht11.c
#include "dht11.h"
//复位DHT11
void DHT11_Rst(void)
{
PB01_DIR_OUTPUT(); //PB12配置成输出
PB01_SETLOW(); //拉低DQ
delay1ms(20);
PB01_SETHIGH(); //DQ=1
delay10us(3);
}
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
uint8_t DHT11_Check(void)
{
uint8_t retry=0;
PB01_DIR_INPUT(); //PB12配置成输入
while (PB01_GETVALUE()&&retry<10)//DHT11会拉低40~80us
{
retry++;
delay10us(1);
};
if(retry>=10)return 1;
else retry=0;
while (!PB01_GETVALUE()&&retry<10)//DHT11拉低后会再次拉高40~80us
{
retry++;
delay10us(1);
};
if(retry>=10)return 1;
return 0;
}
//从DHT11读取一个位
//返回值:1/0
uint8_t DHT11_Read_Bit(void)
{
uint8_t retry=0;
while(PB01_GETVALUE()&&retry<10)//等待变为低电平
{
retry++;
delay10us(1);
}
retry=0;
while(!PB01_GETVALUE()&&retry<10)//等待变高电平
{
retry++;
delay10us(1);
}
delay10us(4);//等待40us
if(PB01_GETVALUE())return 1;
else return 0;
}
//从DHT11读取一个字节
//返回值:读到的数据
uint8_t DHT11_Read_Byte(void)
{
uint8_t i,dat;
dat=0;
for (i=0;i<8;i++)
{
dat<<=1;
dat|=DHT11_Read_Bit();
}
return dat;
}
//从DHT11读取一次数据
//temp:温度值(范围:0~50°)
//humi:湿度值(范围:20%~90%)
//返回值:0,正常;1,读取失败
uint8_t DHT11_Read_Data(float *temp,uint8_t *humi)
{
// uint8_t buf[5];
char buf[5];
uint8_t i;
DHT11_Rst();
if(DHT11_Check()==0)
{
for(i=0;i<5;i++)//读取40位数据
{
buf[i]=DHT11_Read_Byte();
}
if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
{
*humi=buf[0];
*temp=buf[2];
}
}else return 1;
return 0;
}
//初始化DHT11的IO口 DQ 同时检测DHT11的存在
//返回1:不存在
//返回0:存在
uint8_t DHT11_GPIO_Config ( void )
{
GPIO_InitTypeDef GPIO_InitStruct;
__RCC_GPIOB_CLK_ENABLE();
GPIO_InitStruct.IT = GPIO_IT_NONE;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pins = GPIO_PIN_1;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
GPIO_Init(CW_GPIOB, &GPIO_InitStruct);
DHT11_Rst(); //复位DHT11
return DHT11_Check();//等待DHT11的回应
}
dht11.h
#ifndef __DHT11_H
#define __DHT11_H
#include "main.h"
uint8_t DHT11_Init(void);//初始化DHT11
uint8_t DHT11_Read_Data(float *temp,uint8_t *humi);
uint8_t DHT11_Read_Byte(void);//读出一个字节
uint8_t DHT11_Read_Bit(void);//读出一个位
uint8_t DHT11_Check(void);//检测是否存在DHT11
void DHT11_Rst(void);//复位DHT11
uint8_t DHT11_GPIO_Config ( void );
#endif
接好线后,把程序下载到开发板,然后重启效果如下:
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
温湿度采集
+关注
关注
0文章
8浏览量
7658 -
DHT11
+关注
关注
19文章
277浏览量
58559 -
CW32
+关注
关注
1文章
256浏览量
1292 -
武汉芯源
+关注
关注
1文章
67浏览量
489
发布评论请先 登录
相关推荐
热点推荐
用树莓派RP2350 DIY 桌面动态温湿度计
桌面动态温湿度计本文介绍了DFrobotBeetleRP2350开发板结合DHT11模块、锂电池模块、随机眨眼动画,实现OLED显示的桌面动态温湿度计的项目设计。一、项目介绍本项目包括工作原理:ADC电压

【道生物联TKB-620开发板试用】采集温湿度上报
【前言】
我提交的计划为冷链监控系统,因此采集温湿度是首要步骤。这篇将分享如何采集sht30并实现手动上报数据,在接收端打印出接收到的数据。
【硬件】
1、TKB-620开发板*2
2
发表于 04-18 15:06
工厂温湿度监控系统
与智能调控,旨在为工业领域提供一套全面、高效的温湿度管理解决方案。 工厂温湿度监控系统,结合工业生产环境的特殊性,在生产车间、仓库、实验室等关键区域部署传感器,实时采集工厂各区域的温湿度
远程温湿度实时监测系统应用方案
通信、云计算、大数据分析等技术。传感器作为系统的“眼睛”,负责实时采集环境中的温湿度数据。通过Wi-Fi、蓝牙、LoRa、NB-IoT等通讯方式,将传感器采集的数据传输至云端服务器。云平台负责接收、存储和处理传感器传输的数据。
XKCON祥控仓库存储环境温湿度在线监测系统能够取代人工巡检,实现远程仓库存储环境温湿度变化的实时
仓库作为储物的场所,其环境温湿度会随着季节更替而发生变化,这种变化会对存储物品的质量与安全产生较大的影响。因此,仓库的温湿度数据就成为仓储安全监管的一个重要的指标。 济南祥控自动化设备有限公司开发

CW32模块使用 SHT30温湿度传感器
资料文件 三、移植过程 我们的目标是将例程移植至CW32F030C8T6开发板上【测量温湿度的功能】。首先要获取资料,查看数据手册应如何实现读取数据,再移植至我们的工程。 3.1查看资

LORA无线温湿度监测系统
仓储、农业、机房等多种应用场景,提供高效、可靠的解决方案。 部分组成 LORA温湿度传感器:作为系统的前端采集设备,实时捕捉环境中的温湿度数据。LORA温湿度传感器的传输距离远,视距可
温湿度控制器的功能和应用
温湿度控制器在电阻柜中的应用主要涉及以下几个方面: 温湿度控制器的功能 检测与控制:温湿度控制器可以同时检测和控制环境中的温度和湿度。它通常由传感器、控制器和加热器三部分组成。传感器负
关于Air780E:使用文件系统存储温湿度数据怎么操作?
的使用-程序源码demo 780E开发板和DHT11 合宙的TCP/UDP测试服务器 API使用介绍 ? 1.2 程序解析 (1):首先采集温湿度数据 --采集

低功耗4G模组Air780E快速入门:使用文件系统存储温湿度数据
LuatOS-Air780E-文件系统的使用-程序源码demo 合宙的TCP/UDP测试服务器 API使用介绍 780E开发板和DHT11 ? 1.2 程序详解 第一步:首先采集温湿度数据 --

温湿度监测解决方案
。对于维护环境稳定、保障生产安全、提升生活质量具有重要意义。 温湿度监测解决方案,融入物联网、无线通讯等技术,通过温湿度传感器、智能采集器等感知设备,实时采集环境中的温度和
评论