內容目錄
什麼是ThinkSpeak?
ThinkSpeak是一個物聯網平台,可以將感測器所收集到的數據,透過網路上傳至他的雲端資料庫,再透過其他裝置,就可以遠端即時的檢視資料或是數據分析。
而且ThinkSpeak有提供免費帳戶,包含了非常多的服務,對於我這種新手,且又不想自己弄一個伺服器來做資料庫(偷懶),ThinSpeak就再適合不過了。
免費帳戶提供:
- 每年最多上傳300萬筆資料,平均一天可以傳8000筆資料。
- 限制使用最多4個channel
- 每年最多發送800警示mail
註冊ThinkSpeak帳號
點選”Get Started For Free”來開始註冊新免費帳戶
之後點選”Create one!”
依序輸入Email、Location(所在地)、First Name(名)、Last Name(姓)
上面的資料都填寫完後按Contiune,你的email收件匣會收到一封驗證信如下,點選Verify email來完成驗證。
驗證完後,就可以開始設定你的密碼了
完成後他會問你打算要怎麼使用ThinkSpeak
我是選擇”個人,非商業用途”,也可以直接選擇”學生使用”
建立channel
在開始上傳資料前,我們必須先建立一個Channel,這就像是規劃一個空間,讓他知道每筆資料要塞哪個位置,以後我們才能查詢跟管理這些資料。
設定channel
1.點選”New Channel”就可以開始建立了
2.設定Channel名稱,因為我是要用來上傳感測器所蒐集到的資料,因此取名SenorValue。
3.在Channel底下有8個Field可以使用,這裡我先實驗一個,名稱設定為土壤濕度。
4.將頁面往下滑,就可以看到Save Channel,點選後就完成了。
測試channel
建立完Channel就會直接到主頁,厲害的是它直接幫你輸出一張圖表,但現在還沒有資料所以都是空的。
接著我們要來手動測試看看是不是真的能將資料傳進去。
1.先點選API Keys
2.這裡要複製框起來的網址,API Key是為了保護你的資料不被其他人亂改。
將複製起來的網址貼到瀏覽器上,網址中預設field1=0,這裡把它改成1000,也就是在filed1這個欄位中新增一筆資料且內容為1000。
圖中的1,代表新增成功,會隨著每新增一次資料也跟著+1,我下次再傳一次就會顯示為2。
最後再回到Channel主頁,就會發現圖表中多一筆1000的資料,這樣就測試成功啦~
做到這裡,我真的覺得ThinkSpeak真的太方便了,他讓初學者可以輕鬆地開發一些物聯網的東西。
接下來我就要將土壤濕度感測器抓到的資料上傳到ThinkSpeak了。
ESP32資料上傳ThinkSpeak
硬體架構
程式流程
本篇著重在資料上傳ThinkSpeak,因此不多敘述前兩個區塊,有需要的朋友可以參考這兩篇: ESP32連線 WiFi教學、Arduino土壤溼度感測器使用
從上一節我們可以知道,只要在網頁中更新field1的數值,就可以將資料上傳到ThinkSpeak。
所以我們只要讓ESP32將土壤濕度寫入field1即可,用字串合併:
//把土壤濕度數值寫入網址
String url1= url+"&field1="+(int)sensorValue;
再來要提交網址,但ESP32並沒有瀏覽器,那要如何提交網址呢??
這裡就要用到HTTPClient這個網路物件,他可以讓ESP32提交網址,這樣就ThinkSpeak就可以收到這個請求,然後更新資料了!
//將資料上傳ThinkSpeak
void UploadData(){
//建立一個網頁
HTTPClient http;
//把土壤濕度數值寫入網址
String url1= url+"&field1="+(int)sensorValue;
//提交網址
http.begin(url1);
//讀取網頁內容
int httpCode = http.GET();
if(httpCode == HTTP_CODE_OK){
String payload = http.getString();
Serial.print("網頁內容=");
Serial.println(payload);
}
else{
Serial.println("網路傳送失敗");
}
程式範例
#include<WiFi.h>
#include <HTTPClient.h>
const char ssid[]="WiFi網路名稱"; //修改為你家的WiFi網路名稱
const char pwd[]="WiFi密碼"; //修改為你家的WiFi密碼
int sensorValue;
String url = "https://api.thingspeak.com/update?api_key=改成你的API Key";
//讀取土壤濕度感測器
void ReadSensor(){
sensorValue=analogRead(A0); //讀取感測器回傳值
Serial.print("value:");
Serial.println(sensorValue);
}
//將資料上傳ThinkSpeak
void UploadData(){
//建立一個網頁
HTTPClient http;
//把土壤濕度數值寫入網址
String url1= url+"&field1="+(int)sensorValue;
//提交網址
http.begin(url1);
//讀取網頁內容
int httpCode = http.GET();
if(httpCode == HTTP_CODE_OK){
String payload = http.getString();
Serial.print("網頁內容=");
Serial.println(payload);
}
else{
Serial.println("網路傳送失敗");
}
//關閉網頁
http.end();
}
void setup() {
pinMode(A0,INPUT);
Serial.begin(115200);
WiFi.mode(WIFI_STA); //設置WiFi模式
WiFi.begin(ssid,pwd);
Serial.print("WiFi connecting");
//當WiFi連線時會回傳WL_CONNECTED,因此跳出迴圈時代表已成功連線
while(WiFi.status()!=WL_CONNECTED){
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.print("IP位址:");
Serial.println(WiFi.localIP()); //讀取IP位址
Serial.print("WiFi RSSI:");
Serial.println(WiFi.RSSI()); //讀取WiFi強度
}
void loop() {
ReadSensor();
UploadData();
delay(30000);
}
成果
實際接線的樣子,目前還沒有植物,之後再來想要種啥,如果有推薦的植物,歡迎在下面留言🤣🤣
上傳完程式之後,打開序列埠監
控視窗,每30秒就會讀取一次土壤濕度(value),之後提交網址並讀取網頁內容(就是前面用瀏覽器測試時顯示的數字)。
把土壤潮濕的盆栽放置一段時間後,打開ThinkSpeak,從圖表中可以很快發現,隨著時間增加,土壤濕度就逐漸下降。有圖表真的讚,而且看起來也很專業~
到這邊就算是上傳成功啦,整體用下來真的覺得ThinkSpeak真的很方便,而且他的圖表其實還可以設定很多東西,只是我這裡用的很陽春。
之後再做自動澆花系統,就可以透過圖表來監測是否有正常運作了,真是令人期待。
本文章參考資料: 第十四篇 ESP32 資料庫存取ThingSpeak圖表製作
最後!! 如果你喜歡這篇文章,或是這篇文章對你有幫助的話,也歡迎分享出去給需要的人,訂閱免費電子報獲得最新資訊😄😄😄