【GD32F303红枫派使用手册】第二十四节 DHT11温湿度传感器检测实验

news2024/11/19 5:27:14

24.1 实验内容

通过本实验主要学习以下内容:

  • DHT11操作原理
  • 单总线GPIO模拟操作原理

24.2 实验原理

HT11是一款已校准数字信号输出的温湿度一体化数字传感器。该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点信号,传输距离可达20米以上。

其具体参数如下:

  • 工作电压:3.3V-5.5V
  • 工作电流:0.5mA
  • 控制方式:单总线
  • 输出方式:数字量
  • 湿度精度:±5%
  • 温度精度:±2℃
  • 湿度量程:5%~95%
  • 温度量程:-20℃~+60℃
    DHT11引脚定义和封装如下图所示

DHT11采用单总线的方式进行数据传输,下面对其通信时序以及传输数据构成进行介绍。

DHT11通信时序可分为:建立连接、数据接收两部分。

建立连接部分时序如下图所示,共包括:主机动作和从机响应两部分。主机动作:DHT11温湿度传感器上电后,数据线处于空闲状态(配置数据线空闲状态为高电平)。主机发送建立连接动作,动作内容为:拉低数据线再拉高数据线(数据线拉低时间>18ms、拉高时间在20-40us之间)然后释放总线。从机响应:从机接收到主句发送的建立连接动作后,先拉低数据线,再拉高数据线,表示连接建立成功(拉低数据线40-50us,拉高数据线40-50us)。

 在连接成功建立后,从机发送数据,主机进行数据的接收。数据接收:每一bit数据都以50us低电平开始,通过判断低电平后的高电平时间来决定接收数据的种类。接收高电平时间为26us-28us表示0,接收高电平为70us表示1。当最后一bit数据传送完毕后,从机拉低数据线50us,随后从机释放总线,总线进入空闲状态(高电平)。

主机一次接收40bit数据,共5字节,每个字节的含义如下图所示。从高到低依次为:湿度整数h(0)、湿度小数h(1)、温度整数h(2)、温度小数h(3)、校验和h(4)。检验和等于前四字节数据之和。在一次数据接收完成后,验证h(4)是否等于h(1)+h(2)+h(3)+h(4)。若等式成立则表示数据成功接收,然后进行数据更新,否则不进行数据更新。

DHT11数据格式举例如下。

 

24.3 硬件设计

DHT11硬件电路图如下所示。DHT11为单信号线通信,因而仅使用了一个IO进行数据通信,且该IO使用了RC进行滤波并采用4.7K进行上拉,保证了数据通信的稳定性,电源地通过100nf电容滤波。

 

24.4 代码解析

24.4.1 DHT11初始化

DHT11初始化函数实现如下,主要包括DHT11数据通信引脚的初始化以及DHT11 reset和check操作。

C
uint8_t dht11_init(void)
{
          driver_gpio_general_init(&DHT11_DA);
    /* DHT11_DQ引脚模式设置,开漏输出,上拉, 这样就不用再设置IO方向了, 开漏输出的时候(=1), 也可以读取外部信号的高低电平 */
    dht11_reset();
    return dht11_check();
}

在该函数中,将DHT11数据引脚配置为开漏模式,使用上可以不用切换引脚模式以及方向,使用比较方便。

dht11_reset()为复位DHT11操作函数,其实现如下,如原理中介绍,首先拉低数据引脚20ms,之后拉高30us,实现对DHT11的复位操作。

C
static void dht11_reset(void)
{
    DHT11_DA_OUT(0);    /* 拉低DQ */
    delay_ms(20);       /* 拉低至少18ms */
    DHT11_DA_OUT(1);    /* DQ=1 */
    delay_us(30);       /* 主机拉高10~35us */
}

dht11_check()为check DHT11是否正常连接以及工作,其实现如下,其主要通过判断DHT11是否能够响应主机的复位请求操作来判断DHT11是否连接以及工作正常,如果工作正常,该函数返回值为0,否则返回1.

C
uint8_t dht11_check(void)
{
    uint8_t retry = 0;
    uint8_t rval = 0;

    while (DHT11_DA_IN && retry < 100)  /* DHT11会拉低83us */
    {
        retry++;
        delay_us(1);
    }

    if (retry >= 100)
    {
        rval = 1;
    }
    else
    {
        retry = 0;

        while (!DHT11_DA_IN && retry < 100) /* DHT11拉低后会再次拉高87us */
        {
            retry++;
            delay_us(1);
        }
        if (retry >= 100) rval = 1;
    }
    
    return rval;
}

24.4.2 DHT11温湿度读取

DHT11温湿度读取函数如下,通过该函数将会连续读取5个字节数据,前两个为湿度数据,之后两个为温度数据,最后一个数据为校验和。读取正确且校验完成后相关湿度数据将会放在对应的形参指定的变量内,该函数将会返回0.

C
uint8_t dht11_read_data(uint8_t *temp, uint8_t *humi)
{
    uint8_t buf[5];
    uint8_t i;
    dht11_reset();

    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;
}

 24.4.3 主函数

DHT11温湿度检测实验主函数如下所示,首先对systick延迟函数进行初始化,之后对DHT11初始化,最后在主循环中没间隔1s读取一次温湿度数据。

C
int main(void)
{
          uint8_t temperature;
    uint8_t humidity;
        
    delay_init();

    while (dht11_init()) /* DHT11初始化 */
                {
                }
                
        while (1)
        {
        dht11_read_data(&temperature, &humidity);             /* 读取温湿度值 */
        delay_ms(1000);
        }
}

 24.5 实验结果

将DHT11温湿度读取实验烧录到红枫派开发板中,并连接串口,运行程序会,将会每秒钟打印一次温湿度数据。向着DHT11吹口热气,将会观察到打印的温湿度数值都将会增加。

 由聚沃科技原创,来源于【红枫派开发板】第二十四讲 DHT11温湿度传感器检测实验 - 苏州聚沃电子科技有限公司 (gd32bbs.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1856756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【人工智能】百度文心一言智能体:AI领域的新里程碑

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

关于正点原子stm32f103精英板v1的stlink通信失败问题解决方案

由于最新的固件不适配&#xff0c;我们要想其工作要下载007的固件。 https://www.st.com/en/development-tools/stsw-link007.html?dlredirect 版本选择最低的。然后选择windows文件夹&#xff0c;更新程序 然后进keil就能正常识别到了

ICMAN液位检测之WS003B管道检测模组

ICMAN液位检测之WS003B管道检测模组 体积小&#xff0c;成本低&#xff0c; 液位检测精度高&#xff0c; 有水输出低电平无水高电平&#xff0c; 适用于饮水机、咖啡机、扫地机器人、洗地机等。 有需要朋友快联系我吧&#xff01;

Flex 布局教程:语法篇

网页布局(layout)是 CSS 的一个重点应用。 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 20

Redis-在springboot环境下执行lua脚本

文章目录 1、什么lua2、创建SpringBoot工程3、引入相关依赖4、创建LUA脚本5、创建配置类6、创建启动类7、创建测试类 1、什么lua “Lua”的英文全称是“Lightweight Userdata Abstraction Layer”&#xff0c;意思是“轻量级用户数据抽象层”。 2、创建SpringBoot工程 3、引入相…

java基于ssm+jsp 美食推荐管理系统

1前台首页功能模块 美食推荐管理系统&#xff0c;在系统首页可以查看首页、热门美食、美食教程、美食店铺、美食社区、美食资讯、我的、跳转到后台等内容&#xff0c;如图1所示。 图1前台首页功能界面图 用户注册&#xff0c;在注册页面可以填写用户名、密码、姓名、联系电话等…

cpci和ei会议哪个好?

目前国际学术会议出版的会议论文集有两种收录方式&#xff0c;一是cpci数据库收录&#xff0c;另一个是ei数据库收录&#xff0c;那么两者都是会议论文&#xff0c;哪个好一些?下面学术顾问在这里做出全面的分析&#xff0c;帮助作者能够选择到适合自己的会议论文。 EI(CA)与…

【数据分析实战】—预测宠物收养状况数据分析

文章目录 数据集数据集描述特征用途注意 宠物收养预测环境准备探索数据帧数据预处理机器学习数据预处理&#xff1a;模型培训和评估&#xff1a;合奏学习&#xff1a; 添加底部名片获取数据集吧&#xff01; 数据集 数据集描述 宠物收养数据集提供了对各种因素的全面调查&…

工程文档CAD转换必备!在 Java 中将 DWG 转换为 JPG

Aspose.CAD 是一个独立的类库&#xff0c;以加强Java应用程序处理和渲染CAD图纸&#xff0c;而不需要AutoCAD或任何其他渲染工作流程。该CAD类库允许将DWG, DWT, DWF, DWFX, IFC, PLT, DGN, OBJ, STL, IGES, CFF2文件、布局和图层高质量地转换为PDF和光栅图像格式。 Aspose AP…

众所周知,配置即代码≠基础设置即代码

​前段时间翻到几条留言&#xff0c;问&#xff1a; “配置即代码和基础设施即代码一样吗&#xff1f;” “配置即代码是什么&#xff1f;怎么都是基础设施即代码&#xff1f;” 我们都是知道&#xff0c;DevOp的快速发展&#xff0c;让服务器管理与配置的时间大大减少&#x…

AI入门系列:工具篇之ChatGPT的优秀的国内替代品

文章目录 一&#xff0c;智谱清言(ChatGLM)1&#xff0c;智谱清言简介2&#xff0c;[智谱清言地址&#xff0c;点我开始用吧](https://chatglm.cn/) 二&#xff0c;Kimi智能助手1&#xff0c;Kimi简介2&#xff0c;[Kimi地址&#xff0c;点我开始用吧](https://kimi.moonshot.c…

VPDBVE16E、VPDBVE32A、VPDBVE32B比例控制阀放大器

VPDBPC06A、VPDBPC06B、VPDBPC06C、VPDBPC06D、VPDBPC06E、VPDB08PC06100、VPDB08PC06200、VPDB08PC06315、VPDBVE16A、VPDBVE16B、VPDBVE16C、VPDBVE16D、VPDBVE16E、VPDBVE32A、VPDBVE32B、VPDBVE32C、VPDBVE32D、VPDBVE32E、VPDM2VE16A、VPDM2VE16B、VPDM2VE16C、VPDM2VE16D…

HTTP3(QUIC)详解

文章目录 一、HTTP3简述二、为什么不升级改造TCP而使用UDP&#xff1f;三、QUIC的实现四、HTTP3改进详解1. 快速连接建立(1-RTT初次建立&#xff0c;0-RTT恢复&#xff09;2. 无队头阻塞&#xff08;Head-of-Line Blocking&#xff09;重传机制HTTP/2 中的流HTTP/3 中的流 3. 移…

2024年6月24日v1.0.3优雅草超级站长工具开发进度

https://doc.youyacao.com/9/2151 v1.0.3优雅草超级站长工具开发进度 2024年6月24日v1.0.3优雅草超级站长工具开发进度- 演示地址-可测试 https://test2.youyacao.com 介绍 本产品是一款针对站长使用的工具&#xff0c;针对网站域名的多维信息查询工具&#xff0c;本产品…

【自动控制原理课程设计】

利用频率法设计控制器&#xff0c;对象模型采用二阶传递函数&#xff0c;使得校正后的系统的性能指标满足&#xff1a; 1&#xff09;位置误差系统kp10; 2)相角裕度y45&#xff1b; 3&#xff09;幅值裕度h>10dB&#xff1b; 绘制出校正前后的Bode图&#xff0c;并进行闭环…

特征工程与数据预处理全解析:基础技术和代码示例

在机器学习和数据科学的世界里&#xff0c;数据的质量是建模成功与否的关键所在。这就是特征工程和数据预处理发挥作用的地方。本文总结的这些关键步骤可以显著提高模型的性能&#xff0c;获得更准确的预测&#xff0c;我们将深入研究处理异常值、缺失值、编码、特征缩放和特征…

Springboot拦截器使用及其底层源码剖析

博主最近看了一下公司刚刚开发的微服务&#xff0c;准备入手从基本的过滤器以及拦截器开始剖析&#xff0c;以及在帮同学们分析一下上次的jetty过滤器源码与本次Springboot中tomcat中过滤器的区别。正题开始&#xff0c;拦截器顾名思义是进行拦截请求的一系列操作。先给大家示例…

Java学习 - 网络TCP,UDP协议讲解

TCP协议 TCP协议特点 面向连接 应用程序在使用TCP协议之前&#xff0c;必须先建立TCP连接在数据传输完毕后&#xff0c;必须释放已经建立的TCP连接类似于打电话 点对点通信 TCP协议就像打电话&#xff0c;只能一对一&#xff0c;不能一对多或多对多 可靠传输 TCP协议能够保证…

分布式锁实现方案-基于Redis实现的分布式锁

目录 一、基于Lua看门狗实现 1.1 缓存实体 1.2 延迟队列存储实体 1.3 分布式锁RedisDistributedLockWithDog 1.4 看门狗线程续期 1.5 测试类 1.6 测试结果 1.7 总结 二、RedLock分布式锁 2.1 Redlock分布式锁简介 2.2 RedLock测试例子 2.3 RedLock 加锁核心源码分析…

OpenAI CTO谈GPT-5将达博士生智力水平;斯坦福评估排名前十两款来自中国

&#x1f989; AI新闻 &#x1f680; OpenAI CTO谈GPT-5将达博士生智力水平 摘要&#xff1a;美国达特茅斯工程学院采访了OpenAI首席技术官米拉・穆拉蒂&#xff0c;她表示GPT-4的智力相当于高中生&#xff0c;而GPT-5将在一年半后发布&#xff0c;预计达到博士生水平。穆拉蒂…