千家信息网

树莓派如何控制温湿度传感器DHT11

发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,树莓派如何控制温湿度传感器DHT11,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。小π因为好几次断电之前没有关掉系统,导致系统老是起
千家信息网最后更新 2025年02月08日树莓派如何控制温湿度传感器DHT11

树莓派如何控制温湿度传感器DHT11,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

小π因为好几次断电之前没有关掉系统,导致系统老是起不来。无奈只好重写了SD卡。装好后前天晚上把一个温湿度传感器(DHT11)接到了小π上,顺利读出数据来了。废话不多说了,进入正题:

  • 首先,简单介绍下DHT11:

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

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

    配一个DHT11的图片:

    DHT11说明书200808修订版.pdf

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

  • 引脚连接:

    关于树莓派二代的引脚可以看下上篇Blog:树莓派控制有源蜂鸣器

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

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

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

  • Python获取温湿度:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
#!/usr/bin/pythonimport RPi.GPIO as GPIOimport timechannel =4 //GPIO4data = []j = 0GPIO.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:  continuewhile GPIO.input(channel) == GPIO.HIGH:  continuewhile 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 += 1print "sensor is working."print datahumidity_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 = 0humidity_point = 0temperature = 0temperature_point = 0check = 0for 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_pointif check == tmp:  print "temperature :", temperature, "*C, humidity :", humidity, "%"else:  print "wrong"  print "temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmpGPIO.cleanup()
  • 展示结果:

1234
root@raspberrypi:/data/basedata# python/dht11.pysensor 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 : 20 *C, humidity : 38 %

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

12345
root@raspberrypi:/data/basedata/python# python dht11.pysensor 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]wrongtemperature : 36 *C, humidity : 38 %

确认正确~

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

1234567
root@raspberrypi:/# apt-get updateroot@raspberrypi:/# apt-get upgrade #更新内核root@raspberrypi:/# rebootroot@raspberrypi:/# vi /boot/config.txt #在最后一行手动添加:dtoverlay=w1-gpio-pullup,gpiopin=4 来支持新系统读取w1总线设备root@raspberrypi:/# modprobe w1-gpio #确认设备是否生效root@raspberrypi:/# modprobe w1-thermroot@raspberrypi:/# cd /sys/bus/w1/devices/

关于树莓派如何控制温湿度传感器DHT11问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

0