方式1 直接讀取
https://blog.csdn.net/u010900754/article/details/53078615
在連線的時候注意編碼方式,注意樹莓派引腳圖的方向,如上圖所示。我用的是三個頭的dht11傳感器,因此連線方式是:
VCC(或正極) --- 樹莓派的3v電源
GND (地線或者負極)--- 樹莓派的gnd接口
DATA (D或者out) ---樹莓派的GPIO引腳
注意自己的傳感器的接口的順序。
import RPi.GPIO as GPIO import time channel =4 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)編碼方式:PR庫有兩種方式,一種是bcm另一種是wiringPi的方式,兩者的區別大致是bcm的的pin的序號0,1,3,。。。是與每一個gpio引腳對應的,不包含gnd和電源之類的在內,而wiringPi則是從電源開始為0,然后按增序排。使用python的腳本,只需要在setmode函數里面制定編碼方式即可。
(2)引腳號:程序里面用的是bcm的4號(即channel變量),注意連線方式是否與代碼匹配
方式2 間接USB讀取
Arduino讀取DHT11溫度濕度數據
https://marshal.ohtly.com/2017/02/26/arduino-and-dht11
#include <dht.h> dht DHT; #define DHT11_PIN 7 void setup(){ Serial.begin(9600); } void loop() { int chk = DHT.read11(DHT11_PIN); Serial.print("Temperature = "); Serial.println(DHT.temperature); Serial.print("Humidity = "); Serial.println(DHT.humidity); delay(1000); }
然后上傳,就可以在串口監視器中看到類似這樣的信息:
Temperature = 26.00 Humidity = 32.00 Temperature = 26.00 Humidity = 32.00 Temperature = 26.00