树莓派应用实例2:环境温湿度测量
轉自:https://blog.csdn.net/weixiazailaide/article/details/52743194
前期準備
已完成上一篇的內容:https://blog.csdn.net/fm0517/article/details/80949387
環境溫濕度測量
創建temhum應用
具體方法見之前博客創建raspberrypistate應用的部分
修改settings.py
修改urls.py
cd ~/helloworld/helloworld vi urls.py urlpatterns = [url(r'^raspberrypistate/', include('raspberrypistate.urls',namespace="raspberrypistate")),url(r'^temhum/', include('temhum.urls',namespace="temhum")),url(r'^admin/', admin.site.urls), ]DHT11與樹莓派連接
DHT11是一款有已校準數字信號輸出的溫濕度傳感器。 精度濕度+-5%RH, 溫度+-2℃,量程濕度20-90%RH, 溫度0~50℃。
產品參數
相對濕度
分 辨 率:16Bit
重 復 性:±1%RH
精 度:25℃ ±5%RH
互 換 性:可完全互換
響應時間:1/e(63%)25℃ 6s
1m/s 空氣 6s
遲 滯:<±0.3%RH
長期穩定性:<±0.5%RH/yr
溫度
分 辨 率:16Bit
重 復 性:±1℃
精 度:25℃ ±2℃
響應時間:1/e(63%) 10S
電氣特性
供 電:DC 3.3~5.5V
供電電流:測量 0.3mA 待機 60μA
采樣周期:次 大于 2 秒
引腳說明
1、VDD 供電 3.3~5.5V DC
2、DATA 串行數據,單總線
3、NC 空腳
4、GND 接地,電源負極
單總線傳送數據位定義
DATA 用于微處理器與 DHT11 之間的通訊和同步,采用單總線數據格式,一次傳送 40 位數據,高位先出。
- 數據格式:
8bit 濕度整數數據 + 8bit 濕度小數數據+8bit 溫度整數數據 + 8bit 溫度小數數據+8bit 校驗位。
注:其中溫濕度小數部分為 0。
- 校驗位數據定義
“8bit 濕度整數數據 + 8bit 濕度小數數據+8bit 溫度整數數據 + 8bit 溫度小數數據”8bit 校驗位等于所得結果的末 8 位。
時序
DHT11上電后停1s,主機進入輸出模式,主機拉低總線電位至少18ms,主機拉高電位,主機進入輸入模式,DHT響應,拉低總線電位80us,在拉高電位80us,開始發送數據,數據是50us低電平加上26-28us高電平為0,50us低電平加上70us高電平為1,40位數據依次讀取,發送結束DHT11拉低電位50us,釋放總線,等待下次檢測
主機從 DHT11 讀取的溫濕度數據總是前一次的測量值,如兩次測間隔時間很長,請連續讀兩次以第二次獲得的值為實時溫濕度值。
接線
查看引腳圖
gpio readall
Physical(物理位置)
【把DHT11模塊正接2腳,負接6腳,data接7腳】
環境溫濕度測量
程序
DHT11的對應Python程序temhum.py
cd /home/pi/helloworld/temhum vi temhum.py # -*- coding:utf-8 -*- import RPi.GPIO as GPIO import time channel = 4 #管腳7 #第一次讀取狀態位 first = True #獲取溫濕度 def readTemHum():global first#上電第一次讀取需要等待1sif first==True:time.sleep(1) #停止1sfirst=False#讀取次數,DHT11讀的是前一次測量的結果,為了避免錯誤,讀取倆次或以上結果times=0while True:#向DHT11發送讀取請求GPIO.setmode(GPIO.BCM) #管腳模式BCMGPIO.setup(channel, GPIO.OUT) #管腳設為輸出模式GPIO.output(channel, GPIO.LOW) #輸出低電位time.sleep(0.02) #延時20usGPIO.output(channel, GPIO.HIGH) #輸出高電位GPIO.setup(channel, GPIO.IN) #輸入模式#DHT11響應#80us低電平,接收到高電平結束循環while GPIO.input(channel) == GPIO.LOW:continue #80us高電平,接收到低電平結束循環while GPIO.input(channel) == GPIO.HIGH:continue#數據data = [] #數據長度jj = 0while j < 40: k = 0while GPIO.input(channel) == GPIO.LOW:continue while GPIO.input(channel) == GPIO.HIGH: k += 1 #高電平,k自加1if k > 100: #k超過100就退出,防止時序錯誤,卡死這兒breakif k < 8: #經實際測算26-28us,大概計數6-7個,data寫0data.append(0)else: #大于8,date寫1data.append(1)j += 1 #j自加1,共讀取40位#數據處理humidity = count(data[0:8])humidity_point = count(data[8:16])temperature = count(data[16:24])temperature_point = count(data[24:32])checksum = count(data[32:40])#讀得數據數據的校驗和tmp=humidity+humidity_point+temperature+temperature_point#讀取次數增加1times+=1#數據校驗和與讀得數據一致,則讀數正確,返回數據if checksum==tmp:if times > 1:break#為了增加保護,不頻繁讀取,停頓0.5stime.sleep(0.5)#GPIO復位GPIO.cleanup()return {'temperature':temperature,'humidity':humidity}def count(data):res=0for i in range(len(data)):res+=data[i]*2**(7-i)return res#返回結果 def getTemHum():res=readTemHum()temperature=res['temperature']humidity=res['humidity']result="空氣溫度: "+str(temperature)+"℃ 空氣濕度:"+str(humidity)+"%"return result建立urls.py,使配置連接
內容和raspberrypistate/urls.py一樣,拷貝過去一份就行
更改views.py,加載視圖
cd ~/helloworld/temhum vi views.py # -*- coding:utf-8 -*- from django.http import HttpResponse from . import temhum# Create your views here. def index(request):tem=temhum.getTemHum() return HttpResponse(tem)測試
重啟uwsgi服
sudo systemctl restart emperor.uwsgi.service在樹莓派瀏覽器輸入 http://127.0.0.1/temhum
或者在電腦瀏覽器輸入 http://raspberrypi/temhum
總結
以上是生活随笔為你收集整理的树莓派应用实例2:环境温湿度测量的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 树莓派应用实例1:树莓派状态读取
- 下一篇: CaCo-2细胞与LS180细胞区别