試著要將 DS18B20的溫度資料儲存起來,想到幾個方法?(1) 使用 Cayenne 紀錄,再將資料匯出,(2) 使用Thingspeak 紀錄並描繪圖形,(3)本機安裝資料庫,透過程式將資料寫入自訂的Table。方法(1)比較簡單,以下就敘述如何在Cayenne中新增溫度紀錄,再看看方法(2)如何將資料上傳 Thingspeak。下次再來看看如何將溫度資料寫入資料庫後,透過 gunplot 軟體繪製曲線圖。
要再Cayenne中新增溫度紀錄很簡單,要先到Cayenne網站註冊帳號 (參考:Raspberry Pi 筆記(27):監測 Pi & Arduino 及其感測器的雲端系統 Cayenne),再依照以下說明,將 DB18B20線路接好,插上 Pi 的電源,即可完成設定,真的很容易。
若要將溫度資料上傳 Thingspeak,需要使用程式讀取溫度值,再透過 Thingspeak 的API上傳到 Channel定義的格式中。上傳完成後,即可看到溫度的變化曲線。
• DB18B20連接線路
將 Pi 接上電源,Cayenne就可自動會在儀表板產生一個溫度的方塊。
如果要改成攝氏度數,可按方塊右上方的 Settings,修改為攝氏。
如果按方塊右上方的 Details & Chart 圖示,可以產生溫度的曲線圖。
按下圖形下方的 [Download Chart Data] 即可下載一個 CSV檔,可用 Excel打開檔案進行編輯。
• 登入後按 [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筆
程式中 getSensorData() 就是讀取存放溫度的檔案。DS18B20 的溫度值,存放在特定目錄下的一個檔案,只要讀取該檔案,即可看到溫度值。讀取的說明如下:
載入核心模組w1-gpio及w1_therm:
列出/sys/bus/w1/devices/下的檔案,列出所有目錄,找到28-開頭的目錄:
察看w1_slave檔案內容,28-041663143dff 是我的 DS18B20 在 Pi 建立的號碼,每部序號會不同。
執行上述程式即可開始上傳溫度資料:
上圖 cat 指令後的第二行 t=20187,將這個數字除以 1000,即是當時的溫度。
• 上傳溫度資料,Thingspeak自動產生曲線圖:
• 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+
若要將溫度資料上傳 Thingspeak,需要使用程式讀取溫度值,再透過 Thingspeak 的API上傳到 Channel定義的格式中。上傳完成後,即可看到溫度的變化曲線。
[Cayenee 新增溫度紀錄]
先將 Raspberry Pi關機,將 DS18B20的各接腳,如下表方式接上。• DB18B20連接線路
DB18B20 | Pi接腳 |
---|---|
Pin 1 GND | Pin 6 GND |
Pin 2 Data | Pin 7 GPIO4 |
Pin 3 VDD | Pin 1 3.3V |
如果要改成攝氏度數,可按方塊右上方的 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+
sudo python3 thingspeak.py yourkey......if u use python3.. u need change the program as below
回覆刪除from urllib.request import urlopen
f = urlopen(baseURL + "&field1=%s&field2=%s" % (RH, T))
ref.......https://stackoverflow.com/questions/2792650/import-error-no-module-name-urllib2
張貼留言