DHT11的python读取可以参考:https://github.com/szazo/DHT11_Python
类似以下代码的亲测,测量的数据不准确,原因是对DHT11的时序处理不够精准,导致读到的二进制数据数据错误。
import RPi.GPIO as gpio import time PORT=13 #使用的树莓派的PIN13也就是GPIO27,根据自己连接位置更改此参数 gpio.setwarnings(False) gpio.setmode(gpio.BOARD) time.sleep(1) data=[] def delay(i): #20*i usdelay a=0 for j in range(i): a+1 j=0 #start work gpio.setup(PORT,gpio.OUT) gpio.output(PORT,gpio.LOW) time.sleep(0.02) gpio.output(PORT,gpio.HIGH) i=1 #wait to response gpio.setup(PORT,gpio.IN) while gpio.input(PORT)==1: continue while gpio.input(PORT)==0: continue while gpio.input(PORT)==1: continue #get data while j<40: k=0 while gpio.input(PORT)==0: continue while gpio.input(PORT)==1: k+=1 if k>100:break if k<3: #这边是判断dht11输出是高低电平的关键,可根据实际情况修改大小 data.append(0) else: data.append(1) j+=1 #get temperature 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 is ", temperature,"wet is ",humidity,"%" else: print "something is worong the humidity,humidity_point,temperature,temperature_point,check is",humidity,humidity_point,temperature,temperature_point,check