Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AIoT应用创新大赛-基于i.MX RT1062 SDK的DHT22温湿度传感器驱动程序

AIoT应用创新大赛-基于i.MX RT1062 SDK的DHT22温湿度传感器驱动程序

原创
作者头像
大白菜L
发布于 2022-01-18 15:10:51
发布于 2022-01-18 15:10:51
84520
代码可运行
举报
运行总次数:0
代码可运行

引言:

腾讯举办的AIoT应用创新大赛也开始有一个月时间了,大伙们都该入门的入门了,该折腾IDE的各种倒腾,这个用不习惯就换另一个。也有部分人平时工作,没啥时间瞎捣鼓的,比如我,我就直接用官方的IDE,不顺手,但是能用,省事是比较重要的。那么接下来我就记录一下,基于i.MX RT1062 SDK的温湿度传感器的软件驱动实现过程(官方IDE版本)。

DHT22温湿度传感器简介:

该传感器主要由一个电容式感湿元件和一个NTC测温元件组成,采用单总线通讯,只需要给传感器供电,用mcu的一个IO就能实现温湿度的读取了,非常的简单易用。但这并不代表该传感器不怎么样,在测量精度上,有着不凡的表现,参数如下:

DHT22技术参数:

1、湿度测量范围:0---100%RH

2、湿度测量精度:±2%RH

3、温度测量范围:-40---80℃

4、温度测量精度:±0.5℃

5、工作电压:DC3.3V ~ 5V

6、单总线数字信号输出,串口数据双向口;

DHT22通讯时序简单介绍:

要想驱动DHT22,就要先了解其通讯协议还有通讯时序,通讯数据协议如下:

DHT22通讯协议
DHT22通讯协议

通过上图我们知道DHT22一次通讯会传送40位数据,包含了温湿度数据和校验位,接下来是时序图:

DHT22时序图
DHT22时序图

这里只做简单介绍,网上资料很多,顺便贴上个网址:https://www.docin.com/p-2210836129.html

看时序图写代码:

DHT22启动数据读取时序
DHT22启动数据读取时序

上图是温湿度数据读取启动时序图,上图时序转代码思路如下:

1.设置设备IO为输出模式,将IO拉高500ms(这个时间没有严格要求,不要太短就行);

2.然后将IO拉低1ms(0.8~20ms都可以)。

3.释放总线,将IO拉高50us(20~200us都可以);

4.然后将IO设置为输入模式,等待DHT22拉低数据线应答;

5.判断IO被拉低后,继续等待DHT22将数据线拉高;

6.数据线被拉高后,继续等待DHT22将数据线拉低;

通过以上6点完成是启动时序的步骤,接下来就是40位数据的读取了。下图为数据0和数据1的时序图:

数据0和数据1的时序图
数据0和数据1的时序图

从图中可以看出,数据0和数据1的时序图的低电平时间都是固定50us,只有高电平的时间不一样,高电平时间短的为0,高电平时间长的为1,所以我们只要判断高电平的时间就能知道该位数据是0还是1了。接着上面的6个步骤:

7.等待数据线被拉高后,延时35us,读取当前IO电平,如果是低电平,则该位数据为0,反之为1;

8.每次都是在低电平变高电平的时候开始延时35us,循环40次便可得到传感器的数据;

9.读取完数据后将数据线设置为输出模式,并拉高IO,完成本次数据读取,每次数据读取间隔最好不低于2s;

通过上面的思路,将其转化为代码,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#define DHT22_GPIO	GPIO3
#define DHT22_PIN	17U
#define DHT22_PIN_OUT() 	gpio_set_dir(DHT22_GPIO, DHT22_PIN, kGPIO_DigitalOutput)
#define DHT22_PIN_IN() 	    gpio_set_dir(DHT22_GPIO, DHT22_PIN, kGPIO_DigitalInput)
#define DHT22_PIN_HIGH()	GPIO_PinWrite(DHT22_GPIO, DHT22_PIN, 1U)
#define DHT22_PIN_LOW()		GPIO_PinWrite(DHT22_GPIO, DHT22_PIN, 0U)
#define DHT22_PIN_READ()	GPIO_PinRead(DHT22_GPIO, DHT22_PIN)
#define DHT22_DELAY_US(x)	SDK_DelayAtLeastUs(x, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY)
#define DHT22_DELAY_MS(x)	SDK_DelayAtLeastUs(1000*x, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY)
uint8_t buff[5] = {0};
int humidity=0;
int temperature=0;
void DHT22_read()
{
	int i,j;
	uint8_t bit=0;
	uint8_t temp=0;

	DHT22_PIN_OUT(); //SET PA0 OUTPUT
	DHT22_PIN_HIGH(); //拉高
	DHT22_DELAY_MS(100);
	DHT22_PIN_LOW();
	DHT22_DELAY_US(1000);    //拉低1000us
    DHT22_PIN_HIGH(); //DQ=1
    DHT22_DELAY_US(50);     //50US
	DHT22_PIN_IN();
	while(DHT22_PIN_READ())
	{
		DHT22_DELAY_US(1);
	}
	while(!DHT22_PIN_READ())
	{
		DHT22_DELAY_US(1);
	}
	while(DHT22_PIN_READ())
	{
		DHT22_DELAY_US(1);
	}

	for(i=0; i<5; i++)
	{
		temp = 0;
		for(j=0; j<8; j++)
		{
			while(!DHT22_PIN_READ())
			{
				DHT22_DELAY_US(1);
			}
			DHT22_DELAY_US(35);
			if(DHT22_PIN_READ())
			{
				bit = 1;
				while(DHT22_PIN_READ())
				{
					DHT22_DELAY_US(1);
				}
			}else
			{
				bit = 0;
			}
			temp <<= 1;
			temp |= bit;
		}
		buff[i] = temp;
	}
	humidity = buff[0]<<8|buff[1];
	temperature = buff[2]<<8|buff[3];
}

代码中,我用到的是RT1062的GPIO3,如果是IO口不对,可以在IDE的管脚配置中修改管脚,下面在官方GPIO例程中简单举例一下:

1.选择IDE右上角芯片图标;

2.找到你想要的端口,比如上面代码的GPIO3,然后点击管脚坐标的选项框,会出现一下窗口;

3.然后我们选择上图圈起来的选项,将该管脚复用为普通IO模式;

4.然后你就会看到你配置好的管脚出现下方的配置栏中,如下图:

5.更新代码,即可,如图:

以上就是读取DHT22的所有步骤,初次发文,诸多不足,大伙见谅哈,按照以上步骤没能成功的小伙伴可以留言讨论哈。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
2 条评论
热度
最新
感谢你的分享,我看到你是调用M3的脚,M3好像是板载的LED?方便的能否贴一下你接线图和共享一下代码?
感谢你的分享,我看到你是调用M3的脚,M3好像是板载的LED?方便的能否贴一下你接线图和共享一下代码?
11点赞举报
这个管脚随便设置都可以的,我是从E53那边的接口随便找了一个管脚的,传感器接3.3V和gnd,输出脚再接到板上的IO就可以了
这个管脚随便设置都可以的,我是从E53那边的接口随便找了一个管脚的,传感器接3.3V和gnd,输出脚再接到板上的IO就可以了
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
树莓派基础实验27:温湿度传感器DHT11 实验
   数字温湿度传感器DHT11是一种复合传感器,包含温度和湿度的校准数字信号输出。采用专用数字模块采集技术和温湿度传感技术,确保产品具有高可靠性和优异的长期稳定性。    该传感器包含一个电阻湿感元件和一个NTC温度测量设备,并与一个高性能8位微控制器连接。其精度:湿度+-5%RH, 温度+-2℃。量程:湿度20-90%RH, 温度0~50℃。采样周期:大于等于1秒/次。    在我们刚开始练习写传感器的时序时,DHT11非常适合新手入门练习如何写时序。
张国平
2020/09/27
4.7K0
DHT温湿度传感器的基本探究
由于DHT11需要与主控进行通信,所以必须要涉及到通信时序。也就是约定好通信规则。那么对于DHT11温湿度传感器的通信时序又是怎样的呢?
bigmagic
2020/03/17
1.5K0
STM32外接DHT11显示温湿度
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,包括一个电阻式感湿元件和一个NTC测温元件。
xxpcb
2022/05/25
7600
STM32外接DHT11显示温湿度
Arduino读取DHT11,DHT22,SHTC3温湿度数据
本文章讲解使用NodeMcu开发板读取DHT11、DHT22、SHTC3这三个温湿度传感器的数据并发送至串口。各传感器我都写了使用第三方库和不用第三方库的例程。
zeruns
2020/05/21
3K0
Arduino读取DHT11,DHT22,SHTC3温湿度数据
(37)STM32——DHT11数字温湿度传感器实验
文章目录 学习目标 成果展示 介绍 数据结构 时序 发送数据 复位信号和响应信号 信号"0" 信号"1" 代码 总结 学习目标   今天我们要学习的内容是有关DHT11数字温湿度传感器的实验,采用的原理是单总线通信原理,和我们的DS18B20是一样的通信方式,但是比DS18B20要简单许多,被广泛用来测量湿度。 ---- 成果展示   就是简单的测温以及测湿度,然后通过串口来显示。 介绍   关于单总线的知识就不再做介绍了,之前的文章里面都有,文章就放到这里了,感兴趣同学可以去看看:单总线
小点点
2022/12/12
2.2K0
(37)STM32——DHT11数字温湿度传感器实验
LoRa终端设备ASR6505驱动DHT11
DHT11是一款比较典型的温湿度传感器,温度0-50°±2°,湿度:20-90%RH。几乎是开发板绕不开的东西,读写时序也是比较经典的。
ManInRoad
2020/09/26
1K0
LoRa终端设备ASR6505驱动DHT11
12-开发板接入小五物联实现远程控制(stm32采集温湿度传感器DHT11)
采集DHT11温湿度数据, 使用stm32f103zet6 的GPIOG11引脚读取SHT11数据,通过串口打印采集的温湿度
杨奉武
2018/10/10
1.1K0
树莓派4使用Python通过GPIO从DHT11温湿度传感器读取数据
DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度20-90%RH, 温度0~ 50℃。精度不高,但价格低廉。 DHT11使用单总线通信。供电电压3.3~5V。
zeruns
2021/04/14
3.8K0
树莓派4使用Python通过GPIO从DHT11温湿度传感器读取数据
Linux+Qt驱动dht11实验过程遇到的问题及解决办法
最近想要做一个基于嵌入式Linux+Qt驱动dht11温湿度传感器的实验。想要实现的功能是通过野火的imx6ull开发板控制dht11传感器,然后使用Qt做一个上位机,在上位机上面把数据显示出来。
飞哥
2021/04/08
1.4K0
STM32软件I2C读取AM2320温湿度传感器数据
STM32单片机使用软件IIC读取AM2320温湿度传感器的数据并显示在0.96寸OLED屏上。
zeruns
2022/12/17
8310
STM32软件I2C读取AM2320温湿度传感器数据
STM32+DHT11读取温湿度数据显示
源码下载地址: https://download.csdn.net/download/xiaolong1126626497/18263569
DS小龙哥
2022/01/17
1.1K0
STM32+DHT11读取温湿度数据显示
基于ESP8266 NodeMCU + DHT22 记录室内温湿度
用ESP8266 NodeMCU 和 DHT22模块做了个室内温湿度监控的小系统,DHT22每秒把获取的温湿度发送给开发板,开发板通过HTTP协议把温湿度数据发送到部署在云服务器上的数据管理服务(自己撘的SpringBoot项目和数据库),然后就可以通过h5页面观察室内温湿度的变化。
DannyHoo
2022/05/09
1.2K0
基于ESP8266 NodeMCU + DHT22 记录室内温湿度
树莓派读取DHT11温湿度数据 Python
DHT11是一款有已校准数字信号输出的温湿度传感器。其精度湿度±5%RH, 温度±2℃,量程湿度20-90%RH, 温度0~ 50℃。精度不高,但价格低廉。 DHT11使用单总线通信。供电电压3.3~5V。
zeruns
2021/04/26
8800
树莓派读取DHT11温湿度数据 Python
AIoT应用创新大赛-基于TencentOS Tiny的家庭安全监控系统
随着科技的发展与进步,人们家庭的智能设备和产品越来越多,接入电网的设备也会越来越多,量变导致质变,家庭设备总用电监控,能极大的帮助人们了解日常用电情况;
大白菜L
2022/03/15
1.7K1
AIoT应用创新大赛-基于TencentOS Tiny的家庭安全监控系统
【STM32】STM32F407 + DHT11
关于单总线协议可以查看这篇文章:【STM32】stm32f407 + DS18B20 碰出不一样的火花
AXYZdong
2022/01/07
1K0
AIoT应用创新大赛 基于TencentOS Tiny i.MX RT1062 设计实现的智能医药箱
摘 要 :针对家庭用药的储藏管理和安全使用等问题,提出一种智能家用医药箱控制系统设计方案。该设计以RT1062为核心,融合物联网,实现了对家庭药物的储藏管理、分类和使用指导。通过 RT1062搭建温度采集电路实现医药箱的智能储藏管理,同时采用物联网技术实现手机对医药箱的控制。该设计给家庭用药带来较好的储藏效果,有效提升了家庭医疗的安全性,具有较好的市场价值和实用价值。
用户2322878
2022/03/14
9950
基于STM32的蔬菜大棚温湿度智能控制系统设计
随着人们对健康和可持续生活方式的关注不断增加,蔬菜大棚成为了现代农业中的重要组成部分。蔬菜大棚提供了一个受控的环境,使得农民能够在任何季节种植蔬菜,并根据需要进行调节。为了实现最佳的蔬菜生长和产量,对温度和湿度等环境条件的精确控制至关重要。
DS小龙哥
2023/09/27
1.9K0
基于STM32的蔬菜大棚温湿度智能控制系统设计
esp8266+oled+DHT 11温湿度显示
设备清单 NodeMCU(esp8266)开发板一块 oled屏4pin i2c引脚一块 DHT11温湿度传感器一个 杜邦线 esp8266连接oled 3.3V --- VCC G (GND) --
剧终
2020/08/27
4.9K0
esp8266+oled+DHT 11温湿度显示
ESP8266 nodemcu + DHT11 制作简易温湿度检测器
https://downloads.arduino.cc/arduino-ide/nightly/arduino-ide_nightly-20221114_Windows_64bit.zip
用户9131103
2023/07/17
8611
ESP8266 nodemcu + DHT11 制作简易温湿度检测器
STM32 AHT10温湿度传感器数据
但是DHT11的精度不是很高,湿度±5%RH,温度±1℃,而且测试的时候一般还要延时3S左右测一下,测试频率慢,而且体积大,价格大概3块多一个吧。
CoderEnd
2023/05/07
3870
STM32 AHT10温湿度传感器数据
相关推荐
树莓派基础实验27:温湿度传感器DHT11 实验
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验