树莓派python学习篇(一)温湿度传感器

一、DHT11硬件

1.1 硬件介绍

在这里插入图片描述

在这里插入图片描述

1.2 工作原理及时序图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、DHT11代码(python)

2.1 python代码

**Tips:**该python代码转载,注释为本人理解实验后注释,初学python,有错误请不吝赐教

#Toggle Comment By wuxulong,1324483661@qq.com
import RPi.GPIO as GPIO
import time
 
channel =16 #传感器输出口接BCM模式 GPIO16
data = []
j = 0
 
GPIO.setmode(GPIO.BCM)
 
time.sleep(1)
/*MCU向DCT发射启动信号*/
GPIO.setup(channel, GPIO.OUT)
GPIO.output(channel, GPIO.LOW)#数据总线空闲状态为高电平,通信开始时,将电平拉低
time.sleep(0.02)#此过程至少需要18ms才能确保DHT检测到MCU信号
GPIO.output(channel, GPIO.HIGH)#上拉电压20us~40us回应DHT
GPIO.setup(channel, GPIO.IN)
 /*DHT响应MCU*/
while GPIO.input(channel) == GPIO.LOW:#DHT检测到启动信号,发出持续80us的低电平响应信号
  continue
while GPIO.input(channel) == GPIO.HIGH:#DHT程序准备向数据总线拉高保持80us,以便DHT准备发送数据
  continue
 /*DHT传送数据*/
while j < 40:#单线串行发送数据,共40位数据
  k = 0
  while GPIO.input(channel) == GPIO.LOW:#每个数据位都以50us低电平开始,后续高电平信号长度决定01
    continue
  while GPIO.input(channel) == GPIO.HIGH:#判断高电平信号长度
    k += 1
    if k > 100:#始终高电平,代表DHT未正确响应
      break
  if k < 8:
    data.append(0)#高电平信号持续为26~28us,写0
  else:
    data.append(1)#高电平持续信号为70us左右,写1
 
  j += 1#读取一位数据成功
 
print ("sensor is working.")
print (data)#打印读出的40位数据
 
humidity_bit = data[0:8]#湿度位
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)#换算湿度
  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, "*C, humidity :", humidity, "%")
else:
  print ("wrong")#检测失败,输出错误数据
  print ("temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmp)
 
GPIO.cleanup()

2.2 运行结果

在这里插入图片描述

2.3 接线及实物图

在这里插入图片描述

  • 3
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值