1. 程式人生 > >樹莓派+DHT11溫溼度感測器+yeelink物聯網雲

樹莓派+DHT11溫溼度感測器+yeelink物聯網雲

一、配置準備

1.DHT11簡介

DHT11是一款有已校準數字訊號輸出的溫溼度感測器。 精度溼度+-5%RH, 溫度+-2℃,量程溼度20-90%RH, 溫度0~50℃。

這裡寫圖片描述

DHT11有四個引腳,分別是VCC,DATA,NC,GND

這裡寫圖片描述

2.電路連線

本博文中python程式使用的是BCM編號方式,17號即pin11接DHT11的DATA,VCC接3.3V,NC懸空,GND接0V,可通過下圖找到對應引腳,進行連線。

這裡寫圖片描述

二、用python讀取溫溼度資料

關於DHT11具體的時序,以及如何操作,在我的部落格《 51微控制器DHT11溫溼度感測器》中有詳細分析,有興趣可以去了解一下,以便你可以看懂下面的python程式。

#!/usr/bin/python

import RPi.GPIO as GPIO
import time

#BCM編號方式的17對應樹莓派的pin11
channel = 17
data = []
j = 0

#I/O口使用BCM編號方式
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, ", humidity : " , humidity else: print "wrong" print "temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmp GPIO.cleanup()

在python檔案的路徑下輸入命令:

sudo python ./dht11.py

即可獲得資料,效果如圖:

這裡寫圖片描述

可以看到,當校驗不正確時會打印出“wrong”,表示資料錯誤,在讀取一次得到正常的資料。

三、上傳資料到yeelink

1.修改python程式碼

在上面的程式碼後新增如下程式碼,即將溫度和溼度資料儲存到txt檔案裡:

#資料轉換成JSON格式
mytemp = '{"value":%f}' %temperature
myhumi = '{"value":%f}' %humidity

#開啟檔案
tmp_output = open('/home/pi/mytest/DHT11/tmp_data.txt', 'w')
hud_output = open('/home/pi/mytest/DHT11/hud_data.txt', 'w')

#寫資料到文字檔案中
tmp_output.write(mytemp)
hud_output.write(myhumi)

#關閉檔案
tmp_output.close
hud_output.close

2.新增yeelink.sh指令碼

yeelink是一個開源的硬體資料平臺,我喜歡把它定義為一個物聯網雲平臺,因為它給我們提供了API介面,我們可以把資料傳送到雲平臺儲存起來,也可以隨時檢視,真的很棒。具體的操作可以檢視博主的部落格:《 樹莓派+USB攝像頭+yeelink實現雲監控》。

sudo python /home/pi/mytest/DHT11/dht11.py
curl --request POST --data-binary @"/home/pi/mytest/DHT11/tmp_data.txt" --header "U-ApiKey:XXXXXXXXXXXXXXXX" http://api.yeelink.net/v1.0/device/裝置號/sensor/感測器號/datapoints
sleep 10s
curl --request POST --data-binary @"/home/pi/mytest/DHT11/hud_data.txt" --header "U-ApiKey:XXXXXXXXXXXXXXXX" http://api.yeelink.net/v1.0/device/裝置號/sensor/感測器號/datapoints

“/home/pi/mytest/DHT11/tmp_data.txt”是需要上傳到yeelink上的檔案的路徑,將XXXXXXXXXXXXXXXX替換為自已賬戶的API Key,後面的URL也需要替換為自己申請的感測器URL。

注意:因為DHT11可以獲得溫度和溼度兩種值,所以我在yeelink添加了兩個感測器,便於觀察,在這裡有兩次上傳資料,分別是把儲存溫度值得txt文字和儲存溼度值得txt文字通過HTTP協議上傳到雲端。

3.為指令碼增加可執行許可權

sudo chmod +x yeelink.sh

4.將指令碼加入cronjob定時任務

sudo crontab -e

5.讓指令碼自動執行

加入下面一行, 讓指令碼每1分鐘執行一次,即每1分鐘上傳一次資料,然後儲存退出

*/1 * * * * /home/pi/mytest/yeelink.sh

注:我給自己的實驗新建了幾個資料夾,路徑如下:/home/pi/mytest/DHT11/,很多操作都是在這個路徑下完成的。

實驗效果:

溫度:
這裡寫圖片描述

溼度:
這裡寫圖片描述