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