美文网首页电子电路与传感信号
树莓派控制DHT11温度湿度传感

树莓派控制DHT11温度湿度传感

作者: ATangYaaaa | 来源:发表于2018-09-29 20:08 被阅读0次

    作为最常见的传感器,本篇实现温度/湿度传感的交互:

    1. 首先把树莓派GPIO结构图放上来:

    图一  树莓派GPIO结构图

    2.  接线图:

    图二 树莓派GPIO对DHT11传感器接线图

    这里需要说明的是:红线,黑线和蓝线分别代表传感器的VCC/DATA/GND,实际操作中只要把红线接在任意一个3.3V正极,黑线接在任意一个GPIO输出输出极,蓝线接在地线就可以了,不过在脚本的编写时要注意DATA接的是哪一根GPIO,上图接的是pin 21。

    3. 写脚本:

    #!/usr/bin/env python

    import RPi.GPIO as GPIO

    import time

    def DHT11(pin):

        data = []

        GPIO.setmode(GPIO.BCM)

        time.sleep(1)

        GPIO.setup(pin, GPIO.OUT)

        GPIO.output(pin, GPIO.LOW)

        time.sleep(0.02)

        GPIO.output(pin, GPIO.HIGH)

        GPIO.setup(pin, GPIO.IN)

        while GPIO.input(pin) == GPIO.LOW:

            continue

        while GPIO.input(pin) == GPIO.HIGH:

            continue

        i = 0

        while i < 40:

            j = 0

            while GPIO.input(pin) == GPIO.LOW:

                continue

            while GPIO.input(pin) == GPIO.HIGH:

                j += 1

                if j> 100:

                    break   

             if j < 8:

                data.append(0)

            else:

                data.append(1)

            i += 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, "*C, humidity:", humidity, "%"

            return(temperature,humidity)

        else:

            print("wrong")

            return(False,False)

        GPIO.cleanup()

    if __name__=='__main__':

        pin =21

        T,H = DHT11(pin)

    执行命令只需要在python 环境下引入DHT11模块:

    >>>import DHT11

    >>>DHT11.DHT11(21)

    重点学习BCM针脚编码的写法,更接近于底层。还有传感器高低电平的处理。

    程序是从网络上借鉴的,原理还没有学的很清楚,但是已经能实现温度湿度的传感,只不过有少许的错误数据产生,需要测一段时间取平均。结合定时脚本,和数据库能实现每天固定时间获取温湿度数据并写入数据库,非常实用的程序。

    相关文章

      网友评论

        本文标题:树莓派控制DHT11温度湿度传感

        本文链接:https://www.haomeiwen.com/subject/hebboftx.html