使用樹莓派3b+和DHT11監控溫溼度。
DHT11整合了溫度和溼度感測器,通過度娘能找到一大堆關於樹莓派+DHT11進行溫溼度監控的文章,其中程式碼不乏C系列的,Python系統的,我基本上也編輯實踐了。C系列的程式基本上沒有讀取成功的,Python系列的也基本上沒有成功的,在不斷實踐中終於發現一個好用的Python程式碼,記錄下來以備後用。
#! /usr/bin/env python3
# encoding=utf-8
# power by : FUNCO_小風
import RPi.GPIO as GPIO
import time
# 延時函式
def delay(i):
while i:
i -= 1
# 初始化dht11連線引腳
# dht11_pin - dht11連線的引腳號
def init_dht11(dht11_pin):
# 輸出模式 初始狀態給高電平
GPIO.setup(dht11_pin, GPIO.OUT)
GPIO.output(dht11_pin, 1)
# 用於獲取
# dht11_pin - dht11連線的引腳號
# 返回二元組 [ 溼度 , 溫度 ]
def get_dht11(dht11_pin):
buff=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
GPIO.output(dht11_pin,0)
time.sleep(0.02) # 拉低20ms
GPIO.output(dht11_pin,1)
GPIO.setup(dht11_pin,GPIO.IN) # 這裡需要拉高20-40us,但更改模式需要50us,因此不呼叫延時
while not GPIO.input(dht11_pin): # 檢測返回訊號 檢測到啟示訊號的高電平結束
pass
while GPIO.input(dht11_pin): # 檢測到啟示訊號的高電平則迴圈
pass
i=40
while i:
start=time.time()*1000000 # 為了嚴格時序 迴圈開始便計時
i-=1
while not GPIO.input(dht11_pin):
pass
while GPIO.input(dht11_pin):
pass
buff[i]=time.time()*1000000-start# 為了嚴格時序 每次測得資料後都不馬上處理 先儲存
GPIO.setup(dht11_pin,GPIO.OUT) # 讀取結束 復位引腳
GPIO.output(dht11_pin,1)
# print "buff - ",buff
# 開始處理資料
for i in range(len(buff)): # 將時間轉換為 0 1
if buff[i]>100: # 上方測試時是測試整個位的時間
# 因此是與100比較 大於100為1(位週期中 低電平50us)
buff[i]=1
else:
buff[i]=0
# print "After - ",buff
i=40
hum_int=0
while i>32: # 溼度整數部分
i-=1
hum_int<<=1
hum_int+=buff[i]
# print "hum - ",hum_int
tmp_int=0
i=24
while i>16: # 溫度整數部分
i-=1
tmp_int<<=1
tmp_int+=buff[i]
# print "tmp - ",tmp_int
return [hum_int,tmp_int]
GPIO.setmode(GPIO.BOARD)
init_dht11(7)
print get_dht11(7)
GPIO.cleanup()
# 注意
# 若非連續測量 可以不延時 但連續測量時建議每次測量間間隔0.2s以上再呼叫get_dht11(dht11_pin)獲取資料(樹莓派不穩定)
# DHT11雖然有40位 實際溫度和溼度的小數部分讀數總為0
# 如果程式無法正常讀取,可以考慮是否起始部分的延時不準確,可以參考註釋以及實際環境的測量結果調整延時
# 程式測試環境為 $樹莓派3代B+$ $python2.7.9 $Raspbian GNU/Linux 8$
相關文章
- 「玩轉樹莓派」樹莓派 3B+ 配置無線WiFi樹莓派WiFi
- 【.NET 與樹莓派】溫度/溼度感測器——SHT30樹莓派
- 使用樹莓派搭建區域網監控樹莓派
- 軟體工程師樹莓派獲取室內溫溼度的坎坷之旅軟體工程工程師樹莓派
- 教你如何使用樹莓派搭建區域網監控樹莓派
- DHT11溫溼度感測器原理剖析
- 樹莓派使用樹莓派
- 樹莓派使用入門:如何更新樹莓派樹莓派
- 樹莓派3B+安裝64位ubuntu系統和docker工具樹莓派UbuntuDocker
- 用樹莓派USB攝像頭做個監控樹莓派
- 樹莓派使用入門:用樹莓派學 Linux樹莓派Linux
- 樹莓派+串列埠墨水電子螢幕+溫度溼度感測器打造專屬時鐘樹莓派串列埠
- 基於arduino uno的DHT11溫溼度感測器的使用UI
- 樹莓派使用入門:如何用樹莓派來娛樂樹莓派
- 樹莓派使用入門:如何購買一個樹莓派樹莓派
- 樹莓派使用入門:慶祝樹莓派的 14 天樹莓派
- 2022年寫的香橙派 OrangePi Zero 用python獲取dht11溫度和溼度Python
- 「玩轉樹莓派」搭建智慧家居遠端監控系統樹莓派
- 樹莓派:開機使用樹莓派
- 利用python獲取樹莓派的溫度Python樹莓派
- 樹莓派使用入門:如何為樹莓派社群做出貢獻樹莓派
- 樹莓派3B+新安裝系統+python+opencv要點樹莓派PythonOpenCV
- 樹莓派是什麼 樹莓派能做什麼 樹莓派的功能用途樹莓派
- 樹莓派使用入門:透過樹莓派和 kali Linux 學習電腦保安樹莓派Linux
- 樹莓派 | 修改樹莓派3熱點的名稱和密碼樹莓派密碼
- 樹莓派使用入門:如何啟動一個新的樹莓派樹莓派
- 樹莓派使用入門:進入物理世界 —— 如何使用樹莓派的 GPIO 針腳樹莓派
- 使用樹莓派構建一個嬰兒監視器樹莓派
- 樹莓派3B+ python第三方處理庫安裝樹莓派Python
- Ubuntu和樹莓派遠端操作Ubuntu樹莓派
- 用樹莓派 + Python + OpenCV 實現家庭監控和移動目標探測(下)樹莓派PythonOpenCV
- 【.NET 與樹莓派】使用 GPIO 庫樹莓派
- 樹莓派CM4(四):樹莓派映象替換核心樹莓派
- 樹莓派筆記樹莓派筆記
- 樹莓派與FileZilla樹莓派
- 折騰樹莓派樹莓派
- 樹莓派裝opencv樹莓派OpenCV
- 新樹莓派入手樹莓派