电子电路与传感信号

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

2018-09-29  本文已影响0人  ATangYaaaa

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

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针脚编码的写法,更接近于底层。还有传感器高低电平的处理。

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

上一篇下一篇

猜你喜欢

热点阅读