作為最常見的傳感器栖疑,本篇實現(xiàn)溫度/濕度傳感的交互:
1. 首先把樹莓派GPIO結(jié)構(gòu)圖放上來:
2.? 接線圖:
這里需要說明的是:紅線丸冕,黑線和藍線分別代表傳感器的VCC/DATA/GND,實際操作中只要把紅線接在任意一個3.3V正極折砸,黑線接在任意一個GPIO輸出輸出極,藍線接在地線就可以了,不過在腳本的編寫時要注意DATA接的是哪一根GPIO丈挟,上圖接的是pin 21。
3. 寫腳本:
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
def DHT11(pin):
????data = []
????GPIO.setmode(GPIO.BCM)
????time.sleep(1)
????GPIO.setup(pin, GPIO.OUT)
????GPIO.output(pin, GPIO.LOW)
????time.sleep(0.02)
????GPIO.output(pin, GPIO.HIGH)
????GPIO.setup(pin, GPIO.IN)
????while GPIO.input(pin) == GPIO.LOW:
????????continue
????while GPIO.input(pin) == GPIO.HIGH:
????????continue
????i = 0
????while i < 40:
????????j = 0
????????while GPIO.input(pin) == GPIO.LOW:
????????????continue
????????while GPIO.input(pin) == GPIO.HIGH:
????????????j += 1
????????????if j> 100:
????????????????break? ?
?????????if j < 8:
????????????data.append(0)
????????else:
????????????data.append(1)
????????i += 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, "%"
????????return(temperature,humidity)
????else:
????????print("wrong")
????????return(False,False)
????GPIO.cleanup()
if __name__=='__main__':
????pin =21
????T,H = DHT11(pin)
執(zhí)行命令只需要在python 環(huán)境下引入DHT11模塊:
>>>import DHT11
>>>DHT11.DHT11(21)
重點學(xué)習(xí)BCM針腳編碼的寫法锐墙,更接近于底層礁哄。還有傳感器高低電平的處理。
程序是從網(wǎng)絡(luò)上借鑒的溪北,原理還沒有學(xué)的很清楚桐绒,但是已經(jīng)能實現(xiàn)溫度濕度的傳感,只不過有少許的錯誤數(shù)據(jù)產(chǎn)生之拨,需要測一段時間取平均茉继。結(jié)合定時腳本,和數(shù)據(jù)庫能實現(xiàn)每天固定時間獲取溫濕度數(shù)據(jù)并寫入數(shù)據(jù)庫蚀乔,非常實用的程序烁竭。