DHT11温湿度传感器学习

本文介绍了DHT11温湿度传感器的引脚功能、测量范围和工作时序,并提供了使用Python读取数据的简要说明。传感器有4个引脚,包括VCC、GND、DATA和NC,测量温度范围-20℃至60℃,湿度5%RH至95%RH,精度分别为±2℃和±5%RH。数据传输通过单总线完成,接收到40位数据后,数据引脚保持高电平。
AI助手已提取文章相关产品:

 DHT11温湿度传感器共有四个引脚

1个VCC高电平,1个GND接地低电平,1个数据输出引脚,一个空引脚

工作时候,通过out引脚可以向传感器传递应答信号并返回40位的温湿度数据,也就是5个字节

前2个字节表示温度的整数位和小数位,后面两个字节是湿度的整数位和小数位,最后一个字节是校验用

1.引脚

  • 4根引脚,名称与功能如下;
  • vdd 供电 3-5.5VDC
  • GND 接地,电源负极
  • DATA 串行数据,单总线
  • NC 空脚

2.温湿度测量范围

  • 温度范围为: 测量范围为-20~+60℃, 精度±2℃
  • 湿度范围为:测量范围为5~95%RH, 精度为±5%RH

3.工作时序阶段图 

接受数据通过0101010脉冲,数据进行高低电平的不断发送接收,直至40位数据发送完之后,

数据引脚将长时间处于一个高电平状态

python代码----

#!/usr/bin/python
# -*- coding:utf-8 -*-

import RPi.GPIO as GPIO
import time

channel = 7  # 引脚号Pin7
data = []  # 温湿度值
j = 0  # 计数器

GPIO.setmode(GPIO.BOARD)  # 以BOARD编码格式

time.sleep(1)  # 时延一秒

GPIO.setup(channel, GPIO.OUT)

GPIO.output(channel, GPIO.LOW)  #输出低电平
time.sleep(0.02)  # 给信号提示传感器开始工作
GPIO.output(channel, GPIO.HIGH)

GPIO.setup(channel, GPIO.IN)        #进入输入阶段----放弃总线控制权

while GPIO.input(channel) == GPIO.LOW:
    continue

while GPIO.input(channel) == GPIO.HIGH:     #跳出本次循环
    continue

while j < 40:
    k = 0
    while GPIO.input(channel) == GPIO.LOW:
        continue

    while GPIO.input(channel) == GPIO.HIGH:
        k += 1
        if k > 100:
            break                           #持续信号不变情况则,开始读取数据

    if k < 8:  # 通过计数的方式判断是数据位高电平长短,以置0或1。(此方式有待商榷)
        data.append(0)      #append函数 列表末端添加新对象
    else:
        data.append(1)

    j += 1      #直至40位数据传输完毕跳出循环

print("sensor is working.")
print(data)  # 输出初始数据高低电平01010101

humidity_bit = data[0:8]  # 分组40位就是5个字节分段
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]

humidity = 0    #温湿度初始值
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0

for i in range(8):
    humidity += humidity_bit[i] * 2 ** (7 - i)  # 转换成十进制数据加权-----1X2n次幂
    humidity_point += humidity_point_bit[i] * 2 ** (7 - i)  #湿度小数位
    temperature += temperature_bit[i] * 2 ** (7 - i)        #温度整数位
    temperature_point += temperature_point_bit[i] * 2 ** (7 - i)
    check += check_bit[i] * 2 ** (7 - i)#最后一位是校验码

tmp = humidity + humidity_point + temperature + temperature_point  # 十进制的数据相加

if check == tmp:  # 数据校验,相等则输出
    print("temperature : ", temperature, ", humidity : ", humidity)
else:  # 错误输出错误信息,和校验数据
    print("wrong")
    print("temperature : ", temperature, ", humidity : ", humidity, " check : ", check, " tmp : ", tmp)

GPIO.cleanup()  # 重置针脚

您可能感兴趣的与本文相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打CF的小芳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值