【智能家居】樹莓派+DS18B20溫度傳感器+Yeelink實現家庭室內溫度監控(python)

摘自http://www.2fz1.com/post/raspberry-pi-ds18b20-yeelink/

【智能家居】樹莓派+DS18B20溫度傳感器+Yeelink實現家庭室內溫度監控(python)

實現家庭室內溫度遠程監控只是“智能家居”的初步,目的是下班前如果發現家裏溫度過高,可提前用手機發送指令提前5-10分鐘打開空調降溫。

一、硬件準備

1、樹莓派(Raspberry Pi)一個

2、DS18B20溫度傳感器一個(淘寶大概5元左右)

3、4.7k電阻一個 或 DS18B20模塊一個(筆者用,淘寶1.5元一個,其實就是店家幫忙把電阻焊好了,接線稍好看些)。

4、杜邦線三根(雙頭母)

二、接線方式(如圖所示)

三、確認硬件接線是否正確並生效,並讀取溫度

1、首先升級內核(可忽略,但如果版本較老,可能影響設備讀取)

apt-get updateapt-get upgrade

2、確認設備是否生效

sudo modprobe w1-gpio
sudo modprobe w1-therm
cd /sys/bus/w1/devices/
ls

顯示結果:

pi@raspberrypi:~$ cd /sys/bus/w1/devices/
pi@raspberrypi:/sys/bus/w1/devices$ ls28-00000494cb79 w1_bus_master1

28-00000494cb79就是筆者外接的溫度傳感器設備,但並不是每個客戶端都顯示一樣的,這個是傳感器的序列號。

3、查看當前溫度

cd 28-00000494cb79cat w1_slave

顯示結果:

70 01 4b 46 7f ff 10 10 e1 : crc=e1 YES70 01 4b 46 7f ff 10 10 e1 t=23000

第二行的t=23000就是當前的溫度值,要換算成攝氏度,除以1000,即當前溫度爲23000/1000=23攝氏度。

四、用python讀取溫度值

文件存放:/home/pi/temperature.py

內容如下:

#/home/pi/temperature.py#打開溫度傳感器文件t
file = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")#讀取文件所有內容text = tfile.read()#關閉文件tfile.close()#用換行符分割字符串成數組,並取第二行secondline = text.split("\n")[1]#用空格分割字符串成數組,並取最後一個,即t=23000temperaturedata = secondline.split(" ")[9]#取t=後面的數值,並轉換爲浮點型temperature = float(temperaturedata[2:])#轉換單位爲攝氏度temperature = temperature / 1000#打印值print temperature

在命令行運行,即可得出結果數值:
python /home/pi/temperature.py

五、上報到yeelink

yeelink是國內比較知名的免費物聯網數據平臺,國外有COSM(https://cosm.com)。
申請yeelink賬號及添加設備和傳感器,以及API的學習,本文跳過,請大家自行去學習一下。

根據yeelink API的規則,我們需要提供一個文本文件,內容爲一段JSON,如下:

{
“timestamp”:”2012-03-15T16:13:14″,
“value”:294.34}

若未指定timestamp, 服務器會自動加上當前時間,所以本文的操作不添加該字段

1、修改python,將溫度值用JSON格式保存到一個文本文件,全部如下:

#/home/pi/temperature.pytfile = open("/sys/bus/w1/devices/28-00000494cb79/w1_slave")text = tfile.read()
tfile.close()
secondline = text.split("\n")[1]
temperaturedata = secondline.split(" ")[9]
temperature = float(temperaturedata[2:])
temperature = temperature / 1000res = '{"value":%f}' %temperature
output = open('/home/pi/datafile.txt', 'w')
output.write(res)
output.close

python將溫度值寫入:/home/pi/datafile.txt

2、新增yeelink.sh腳本

文件位置:/home/pi/yeelink.sh

內容如下:

sudo python /home/pi/temperature.py
curl --request POST --data-binary @"/home/pi/datafile.txt" --header "U-ApiKey:XXXXXXXXXXXXXXXX" http://api.yeelink.net/v1.0/device/1969/sensor/2533/datapoints

將U-ApiKey:XXXXXXXXXXXXXXXX替換爲自已賬戶的API Key。
後面的URL也需要替換爲自己申請的傳感器URL。

3、添加到計劃任務

#爲腳本增加可執行權限sudo chmod +x yeelink.sh#將腳本加入cronjob(計劃任務)sudo crontab -e#在cornjob文件中添加下面一行,並保存(表示10分鐘執行一下腳本,時間可自行修改)*/10 * * * * /home/pi/yeelink.sh

完了!

我的溫度傳感器數據展示頁面:http://www.yeelink.net/devices/1969

 

補充

 

執行如下操作,把傳感器加入到開機啓動裏面,這樣每次開機就可以使用傳感器了:
把命令sudo modprobe w1-gpio  sudo modprobe w1-therm  加到/etc/rc.local文件中exit之前;

 

參考文檔:

http://www.cl.cam.ac.uk/freshers/raspberrypi/tutorials/temperature/

http://blog.turningdigital.com/2012/09/raspberry-pi-ds18b20-temperature-sensor-rrdtool/

http://webshed.org/wiki/RaspberryPI_DS1820

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章