一、首先,简单介绍下DHT11:
DHT11是一个温湿度传感器,分为3个接口,分别为:VCC
, DATA
, GND
引脚号 | 名称 | 类型 | 说明 |
---|---|---|---|
1 | VCC | 电源 | +级,输入3V-5.5V |
2 | DATA | 数据输出 | 输出引脚 |
3 | GND | 接地 | 接地引脚 |
之前看网上说,需要在DHT11VCC
和DATA
之间加一个电阻,经试验完全不需要。
二、引脚连接:
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/