摘自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