zoukankan      html  css  js  c++  java
  • Raspberry Pi开发之旅-空气温湿度检测(DHT11)

    一、首先,简单介绍下DHT11:

    DHT11是一个温湿度传感器,分为3个接口,分别为:VCC, DATA, GND

     引脚号名称类型说明
    1 VCC 电源 +级,输入3V-5.5V
    2 DATA 数据输出 输出引脚
    3 GND 接地 接地引脚

    之前看网上说,需要在DHT11VCCDATA之间加一个电阻,经试验完全不需要。

    二、引脚连接:

    1.VCC接上3V,可以选择1口或者17

    2.DATA接上GPIO口,我选的是GPIO4,第7

    3.GND接上接地口,我选的是第14

    三、Python获取温湿度:

    #!/usr/bin/python
    import RPi.GPIO as GPIO
    import time
    
    channel =4 
    data = []
    j = 0
    
    GPIO.setmode(GPIO.BCM)
    
    time.sleep(1)
    
    GPIO.setup(channel, GPIO.OUT)
    GPIO.output(channel, GPIO.LOW)
    time.sleep(0.02)
    GPIO.output(channel, GPIO.HIGH)
    GPIO.setup(channel, GPIO.IN)
    
    while GPIO.input(channel) == GPIO.LOW:
      continue
    while GPIO.input(channel) == GPIO.HIGH:
      continue
    
    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 < 8:
        data.append(0)
      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, "*C, humidity :", humidity, "%"
    else:
      print "wrong"
      print "temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmp
    
    GPIO.cleanup()
    

    四、展示结果:

    root@raspberrypi:/data/basedata# python/dht11.py
    sensor is working.
    [0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0]
    temperature : 23 *C, humidity : 93 %
    

    为了测试结果是否准确,我把手指放到传感器上,测试的数据为:

    root@raspberrypi:/data/basedata/python# python dht11.py
    sensor is working.
    [0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1]
    temperature : 36 *C, humidity : 95 %
    

    测试无误~

    PS: 如果你用的是DS18B20,需要做以下动作:

    root@raspberrypi:/# apt-get update
    root@raspberrypi:/# apt-get upgrade #更新内核
    root@raspberrypi:/# reboot
    root@raspberrypi:/# vi /boot/config.txt #在最后一行手动添加:dtoverlay=w1-gpio-pullup,gpiopin=4 来支持新系统读取w1总线设备
    root@raspberrypi:/# modprobe w1-gpio #确认设备是否生效
    root@raspberrypi:/# modprobe w1-therm
    root@raspberrypi:/# cd /sys/bus/w1/devices/
    
  • 相关阅读:
    委托系列整理
    EF Lambda 多表查询
    枚举,Enum,常规使用demo记录
    自定义Window 服务
    xpath 操作XML
    MVC 自定义过滤器
    时间比对,常用细节记录
    Lock锁_线程_线程域
    break、continue和goto 三者作用介绍
    .net 学习路线感想
  • 原文地址:https://www.cnblogs.com/sirius-swu/p/6680952.html
Copyright © 2011-2022 走看看