標籤:訊號 tin 重設 cleanup span tracking rpi.gpio wro 使用
-
DHT11作為一個廉價配件,同時包含了溫度、濕度感應器,而且,編碼使用也非常簡單。 本文介紹如果在樹莓派中使用 DHT11,代碼是Python。如果有任何疑問,歡迎在下面留言。
- VCC接5V或者3.3V
- DATA接GPIO(我接的是BCM的16號針腳,物理針腳是36)
- GND接GND
[codesyntax lang="python"]
- [python] view plain copy
- #!/usr/bin/python
-
- import RPi.GPIO as GPIO
- import time
-
- channel = 16 #引腳號16
- data = [] #溫濕度值
- j = 0 #計數器
-
- GPIO.setmode(GPIO.BCM) #以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, ", humidity : " , humidity
- else: #錯誤輸出錯誤資訊,和校正資料
- print "wrong"
- print "temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp
-
- GPIO.cleanup() #重設針腳
執行:sudo chmod 777 程式名.py
python 程式名.py
樹莓派串連DHT11溫濕度感應器(python)