树莓派通过DHT11传感器获取温湿度

树莓派通过DHT11传感器获取温湿度

DHT11(温湿度传感器)

工作电压:3v-5.5v

针脚数量:4针脚

测量范围:20-90%RH,0-50’C。

详细资料见:最新版说明书

 

树莓派上运行的python代码

#!/usr/bin/python

import RPi.GPIO as GPIO
import time

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

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

time.sleep(1)			#时延一秒

GPIO.setup(channel, GPIO.OUT)#将IO初始化为输出,等待输出开始信号给传感器

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

GPIO.setup(channel, GPIO.IN)    #将IO初始化为输入,等待接收数据

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

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

#DHT11每一次数据发送由40位bit组成,8bit湿度整数+8bit湿度小数+8bit温度整数+8bit温度小数+8bit数据校验和(温湿度和)
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 < 10:       #程序跑在树莓派3B+上需要调整到10,传感器线缆小于20米需在数据引脚上加一7.5K的上拉电阻,别人写的程序是8,正在研究相差原因
		data.append(0)#累加接收到的bit数据到data数组
	else:
		data.append(1)

	j += 1

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

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, ", humidity:" , humidity
else:										#错误输出错误信息,和校验数据
	print "wrong"
	print "temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp

GPIO.cleanup()									#重置针脚

 

下图为传感器工作时,实时获取到我家客厅的温湿度信息。

发表评论

电子邮件地址不会被公开。 必填项已用*标注