Raspberry Pi 温湿度传感器DHT11

首先,简单介绍下DHT11:

DHT11是一个温湿度传感器,分为4个接口,分别为:VCCDATANCGND

引脚号 名称 类型 说明
1 VCC 电源(正极) 3V-5.5V DC
2 Dout 数据输出 数据输入/输出引脚(单总线)
3 NC 扩展未用
4 GND 地(负极) 电源地

Ps.

  • 1.传感器管脚方向识别:正面(有通气孔的一面)看过去,从左到右依次为1、2、 3、4 脚;
  • 2.电源引脚,DHT11的供电电压为:3.5~5.5V
  • 3.传感器上电后,要等待 1s 需越过不稳定状态,在此期间不要发送任何指令;
  • 4.建议电源引脚【VDD,GND】之间可增加一个100nF的电容,用于去耦滤波;
  • 5.建议连接线长度短于20米时,【VDD,DATA】之间加一个5K上拉电阻,大于20米时根据实际情况使用合适的上拉电阻

引脚连接:

  • 1.VCC接上3V3,可以选择1口或者17
  • 2.DATA接上GPIO口,我选的是GPIO4,第7口
  • 3.GND接上接地口,我选的是第14

Python获取温湿度:

  • 新建文件 dht11.py ,然后输入以下代码:
#!/usr/bin/python
import RPi.GPIO as GPIO
import time

channel =4 //GPIO4
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()

例如展示结果如下:

执行命令: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 : 20 *C, humidity : 38 %

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

  • 执行命令: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]
wrong
temperature : 36 *C, humidity : 38 %

确认正确~


备注: 如果你用的是DS18B20,需要执行以下命令:

1.

sudo apt-get update #更新软件源
sudo apt-get upgrade #更新已经安装的软件
sudo reboot #重启

2.

  • sudo nano /boot/config.txt #在最后一行手动添加:dtoverlay=w1-gpio-pullup,gpiopin=4 #来支持新系统读取w1总线设备
  • modprobe w1-gpio #确认设备是否生效
  • modprobe w1-therm
  • cd /sys/bus/w1/devices/

⚠️ 转载请注明原博客地址【https://yanhuiblog.tk】Andy所作,谢谢合作!

打赏一个呗

取消

感谢您的支持,我会继续努力的!🤝

让我们一起加油,一起奋斗!💪

扫码支持
扫码支持
扫码打赏,您说多少就多少,请确认账号信息哦!

支付宝🆔:yanhui5858vip

微信🆔:SINAVIO¹⁸⁶₀₀₂₆⁰³⁵⁹

打开相对的扫一扫,即可进行扫码打赏哦,请确认账号信息哦!