您好,登錄后才能下訂單哦!
樹莓派如何控制溫濕度傳感器DHT11,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
小π因為好幾次斷電之前沒有關掉系統,導致系統老是起不來。無奈只好重寫了SD卡。裝好后前天晚上把一個溫濕度傳感器(DHT11)接到了小π上,順利讀出數據來了。廢話不多說了,進入正題:
首先,簡單介紹下DHT11:
DHT11是一個溫濕度傳感器,分為3個接口,分別為:VCC
, DATA
, GND
引腳號 | 名稱 | 類型 | 說明 |
---|---|---|---|
1 | VCC | 電源 | +級,輸入3V-5.5V |
2 | DATA | 數據輸出 | 輸出引腳 |
3 | GND | 接地 | 接地引腳 |
配一個DHT11
的圖片:
DHT11說明書200808修訂版.pdf
之前看網上說,需要在DHT11VCC
和DATA
之間加一個電阻,經試驗完全不需要。
引腳連接:
關于樹莓派二代的引腳可以看下上篇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() |
展示結果:
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 % |
為了測試結果是否準確,我把手指放到傳感器上,測試的數據為:
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 % |
確認正確~
備注: 如果你用的是DS18B20
,需要做以下動作:
1 2 3 4 5 6 7 | 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/ |
關于樹莓派如何控制溫濕度傳感器DHT11問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。