• 【Raspberry Pi】DHT11 温度湿度传感器数据读取


    时序图参考厂家说明书:DHT11数字湿温度传感器的原理和应用范例

    四个阵脚连接:VCC接3.3伏电源,Dout接GPIO口,我接的是物理12针脚,NC留空,GND接地。

    波折1:电阻被错接进了VCC,于是看了无数遍时序图,改了无数遍的驱动无论怎么改都是读不出数据。

    波折2:偶然看了网上的DHT11上拉电阻电路图才发现错误,于是果断去掉电阻。但为了显示传感器工作正常在电源和VCC间接了个发光二极管进去,数据倒是读出来了,但各种错误。(原因不明)

    去掉了电阻,去掉了led,优化了写的python,读数正常。再一次赞一个python。

    写DHT11的驱动需要注意时序之间很紧密,python执行任何程序都要花费时间,在获取时序时需要注意所写调试用的代码也是占用时序的,在这一点上也走了一点弯路。

    # -*- coding: utf-8 -*-
    """
    Created on Sun Jan 26 14:24:43 2014
    
    @author: pi
    """
    
    import RPi.GPIO as gpio
    import time
    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(12,gpio.OUT)
    #gpio.output(12,gpio.HIGH)
    #delay(10)
    gpio.output(12,gpio.LOW)
    time.sleep(0.02)
    gpio.output(12,gpio.HIGH)
    i=1
    i=1
     
    #wait to response
    gpio.setup(12,gpio.IN)
    
    
    while gpio.input(12)==1:
        continue
    
    
    while gpio.input(12)==0:
        continue
    
    while gpio.input(12)==1:
            continue
    #get data
    
    while j<40:
        k=0
        while gpio.input(12)==0:
            continue
        
        while gpio.input(12)==1:
            k+=1
            if k>100:break
        if k<3:
            data.append(0)
        else:
            data.append(1)
        j+=1
    
    print "Sensor is working"
    #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
        
        

    测试python程序时间代码

    # -*- coding: utf-8 -*-
    """
    Created on Sun Jan 26 16:01:59 2014
    
    @author: pi
    """
    
    import time
    def delay(i):
        k=0
        for j in range(i):
            k+=1
    n=5000
    j=0
    
    a=time.time()
    i=1
    c=time.time()
    d=c-a
    print d
    
    a=time.time()
    for i in range(n):
        j+=1
    c=time.time()
    d=c-a
    print d
    
    a=time.time()
    delay(n)
    c=time.time()
    d=c-a
    print d
  • 相关阅读:
    十一周
    第五次作业
    第十周
    测试作业
    2016.06.24-2016.06.30这周工作时间和内容
    2016.06.10-2016.06.16这周工作时间和内容
    2016.06.03-2016.06.09这周工作时间和内容
    2016.05.26-2016.06.02这周工作时间和内容
    2016.05.20-2016.05.26这周工作时间和内容
    分答
  • 原文地址:https://www.cnblogs.com/colipso/p/3535901.html
Copyright © 2020-2023  润新知