# 溫濕度感測器本範例使用DHT-11
首先將DHT-11的VCC接腳接至樹莓派的1腳,DATA接至7腳,GND接至6腳。 樹莓派接腳圖 DHT-11簡易介紹 DATA腳用於微處理器與DHT-11之間的通訊,一次通訊時間為4ms左右,數據分為小數與整數,一次完整的數據傳輸為40bits。 數據格式:8bits濕度整數數據+8bits濕度小數數據 +8bits溫度整數數據+8bits溫度小數數據 +8bits校驗和 數據傳輸正確時,8bits的校驗和等於8bits濕度整數數據+8bits濕度小數數據+8bits溫度整數數據+8bits溫度小數數據之和。 使用者發送一次開始信號之後,DHT-11從低功耗模式轉到高速模式,等待主機開始信號結束後,DHT-11發送響應信號,送出40bits的數據,當數據傳輸完之後,DHT-11會切回至低功耗模式直到再次接到開始訊號。 以下為使用python的範例程式
import RPi.GPIO as GPIO //載入GPIO函式庫
import time //載入TIME函式庫
while(1):
channel =7
data = []
j = 0
GPIO.setmode(GPIO.BOARD)//使用電路板上定義的腳位
time.sleep(1)
GPIO.setup(channel, GPIO.OUT) //設定7腳為輸出
GPIO.output(channel, GPIO.LOW) //發送開始訊號
time.sleep(0.02)
GPIO.output(channel, GPIO.HIGH)
GPIO.setup(channel, GPIO.IN) //將7腳設定為輸入
while GPIO.input(channel) == GPIO.LOW:
continue
while GPIO.input(channel) == GPIO.HIGH:
continue
while j < 40: //擷取DHT-11傳送過來的資料
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()
time.sleep(5)