最近文章

Raspberry Pi 筆記(三十五):DS18B20 溫度紀錄- 使用 Cayenee 及 Thingspeak

[2017/03/07]
試著要將 DS18B20的溫度資料儲存起來,想到幾個方法?(1) 使用 Cayenne 紀錄,再將資料匯出,(2) 使用Thingspeak 紀錄並描繪圖形,(3)本機安裝資料庫,透過程式將資料寫入自訂的Table。方法(1)比較簡單,以下就敘述如何在Cayenne中新增溫度紀錄,再看看方法(2)如何將資料上傳 Thingspeak。下次再來看看如何將溫度資料寫入資料庫後,透過 gunplot 軟體繪製曲線圖。

要再Cayenne中新增溫度紀錄很簡單,要先到Cayenne網站註冊帳號 (參考:Raspberry Pi 筆記(二十七):監測 Pi & Arduino 及其感測器的雲端系統 Cayenne),再依照以下說明,將 DB18B20線路接好,插上 Pi 的電源,即可完成設定,真的很容易。

若要將溫度資料上傳 Thingspeak,需要使用程式讀取溫度值,再透過 Thingspeak 的API上傳到 Channel定義的格式中。上傳完成後,即可看到溫度的變化曲線。

[Cayenee 新增溫度紀錄]

先將 Raspberry Pi關機,將 DS18B20的各接腳,如下表方式接上。

• DB18B20連接線路
DB18B20
Raspberry Pi
Pin 1 GND
GND     Pin 6
Pin 2 Data
GPIO4  Pin 7
Pin 3 VDD
3.3V      Pin 1



將 Pi 接上電源,Cayenne就可自動會在儀表板產生一個溫度的方塊。

如果要改成攝氏度數,可按方塊右上方的 Settings,修改為攝氏。

如果按方塊右上方的 Details & Chart 圖示,可以產生溫度的曲線圖。

按下圖形下方的 [Download Chart Data] 即可下載一個 CSV檔,可用 Excel打開檔案進行編輯。

[Thingspeak紀錄溫度]

 先到 Thingspeak 網站申請帳號,通過驗證後,即可登入:

 登入後按 [Channels] ➜ [New Channel],輸入 Name、Description、Field 1的欄位名稱、Make Public 打勾,可以將資料公開。


 按下 [Save Channel] 後,出現以下畫面:



• 選擇 [API keys] 頁簽,可以看到有兩個Key:Read & Write。


 查看我的 Thingspeak 的個人檔案,我可上傳的資料筆數是 3,000,000筆,距離 2018/03/02 還有364天,因此每天建議不超過 8,219 筆。



• 撰寫程式上傳溫度資料,設定每 15秒傳送 1筆
import sys
import RPi.GPIO as GPIO
import urllib2
from time import sleep
temper2 = 0

def getSensorData():
    tempfile = open("/sys/bus/w1/devices/28-041663143dff/w1_slave")
    thetext = tempfile.read()
    tempfile.close()
    tempdata = thetext.split("\n")[1].split(" ")[9]
    temperature = float(tempdata[2:])
    temperature = temperature / 1000
    return (temperature)

# main() function
def main():
    # use sys.argv if needed
    baseURL = 'https://api.thingspeak.com/update?api_key=BRCADRBIGV4LCU8D'

    while True:
        try:
            temper2 = getSensorData()
            f = urllib2.urlopen(baseURL + "&field1=%s" % (temper2))
            print f.read()
            f.close()
            sleep(15)
        except:
            print 'exiting.'
            break

# call main
if __name__ == '__main__':
    main()

程式中 getSensorData() 就是讀取存放溫度的檔案。DS18B20 的溫度值,存放在特定目錄下的一個檔案,只要讀取該檔案,即可看到溫度值。讀取的說明如下:

載入核心模組w1-gpio及w1_therm:
$ sudo modprobe w1-gpio
$ sudo modprobe w1_therm

列出/sys/bus/w1/devices/下的檔案,列出所有目錄,找到28-開頭的目錄:
$ ls -l /sys/bus/w1/devices/

察看w1_slave檔案內容,28-041663143dff 是我的 DS18B20 在 Pi 建立的號碼,每部序號會不同。
$ cat /sys/bus/w1/devices/28-041663143dff/w1_slave

執行上述程式即可開始上傳溫度資料:
$ python temp2.py


上圖 cat 指令後的第二行 t=20187,將這個數字除以 1000,即是當時的溫度。


 上傳溫度資料,Thingspeak自動產生曲線圖:


[參考資料]

Cayenne/docs 
• Dexterindustries:ThingSpeak Temperature with Raspberry Pi
• Instructables:Read temperature with DS18B20 | Raspberry Pi 2
• Electronut Labs:Plotting DHT11 sensor data at Thingspeak.com using Rsaspberry Pi Model A+

沒有留言