ESP32資料上傳ThinkSpeak

ESP32上傳ThinkSpeak

什麼是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 圖表

到這邊就算是上傳成功啦,整體用下來真的覺得ThinkSpeak真的很方便,而且他的圖表其實還可以設定很多東西,只是我這裡用的很陽春。

之後再做自動澆花系統,就可以透過圖表來監測是否有正常運作了,真是令人期待。

本文章參考資料: 第十四篇 ESP32 資料庫存取ThingSpeak圖表製作

最後!! 如果你喜歡這篇文章,或是這篇文章對你有幫助的話,也歡迎分享出去給需要的人,訂閱免費電子報獲得最新資訊😄😄😄

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *