樹莓派如何控制溫濕度傳感器DHT11,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)公司主營(yíng)灌南網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,APP應(yīng)用開發(fā),灌南h5微信小程序開發(fā)搭建,灌南網(wǎng)站營(yíng)銷推廣歡迎灌南等地區(qū)企業(yè)咨詢
小π因?yàn)楹脦状螖嚯娭皼]有關(guān)掉系統(tǒng),導(dǎo)致系統(tǒng)老是起不來。無奈只好重寫了SD卡。裝好后前天晚上把一個(gè)溫濕度傳感器(DHT11)接到了小π上,順利讀出數(shù)據(jù)來了。廢話不多說了,進(jìn)入正題:
首先,簡(jiǎn)單介紹下DHT11:
DHT11是一個(gè)溫濕度傳感器,分為3個(gè)接口,分別為:VCC
, DATA
, GND
引腳號(hào) | 名稱 | 類型 | 說明 |
---|---|---|---|
1 | VCC | 電源 | +級(jí),輸入3V-5.5V |
2 | DATA | 數(shù)據(jù)輸出 | 輸出引腳 |
3 | GND | 接地 | 接地引腳 |
配一個(gè)DHT11
的圖片:
DHT11說明書200808修訂版.pdf
之前看網(wǎng)上說,需要在DHT11VCC
和DATA
之間加一個(gè)電阻,經(jīng)試驗(yàn)完全不需要。
引腳連接:
關(guān)于樹莓派二代的引腳可以看下上篇Blog:樹莓派控制有源蜂鳴器
VCC
接上3V3
,可以選擇1
口或者17
口
DATA
接上GPIO
口,我選的是GPIO4
,第7
口
GND
接上接地口
,我選的是第14
口
Python獲取溫濕度:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #!/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() |
展示結(jié)果:
1 2 3 4 | 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 : 20 *C, humidity : 38 % |
為了測(cè)試結(jié)果是否準(zhǔn)確,我把手指放到傳感器上,測(cè)試的數(shù)據(jù)為:
1 2 3 4 5 | 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] wrong temperature : 36 *C, humidity : 38 % |
確認(rèn)正確~
備注: 如果你用的是DS18B20
,需要做以下動(dòng)作:
1 2 3 4 5 6 7 | root@raspberrypi:/# apt-get update root@raspberrypi:/# apt-get upgrade #更新內(nèi)核 root@raspberrypi:/# reboot root@raspberrypi:/# vi /boot/config.txt #在最后一行手動(dòng)添加:dtoverlay=w1-gpio-pullup,gpiopin=4 來支持新系統(tǒng)讀取w1總線設(shè)備 root@raspberrypi:/# modprobe w1-gpio #確認(rèn)設(shè)備是否生效 root@raspberrypi:/# modprobe w1-therm root@raspberrypi:/# cd /sys/bus/w1/devices/ |
關(guān)于樹莓派如何控制溫濕度傳感器DHT11問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。