ESP32結合溫濕度感測器,上傳數據至ThingSpeak完整教學

如果你曾經想要紀錄環境的溫度與濕度,並且能夠遠端透過網站即時查看,那麼ESP32搭配溫濕度感測器上傳數據到ThingSpeak就是一個超棒的解決方案!ESP32不僅功能強大,還能輕鬆連上WiFi,把感測數據傳到雲端;而ThingSpeak則是一個免費又直觀的IoT平台,可以將資料自動轉換成漂亮的圖表。

ESP32 是一款由 Espressif Systems 推出的高效能微控制器,相比早期的 Arduino 或 ESP8266,它具備更多優勢。首先,它內建 WiFi 與藍牙雙模功能,不需要額外模組就能直接連線到網路,這對 IoT(物聯網)應用來說非常方便。

其次,ESP32 的 運算速度與記憶體容量 都比 Arduino UNO 或 ESP8266 更強大,可以處理更複雜的感測資料,同時還能支援多個任務平行運行,像是同時讀取感測器、傳送數據到雲端,甚至還能開啟一個小型網頁伺服器。

另外,ESP32 的 GPIO 腳位數量多,能支援多種通訊協定(I2C、SPI、UART 等),這讓它可以輕鬆整合各式感測器與模組。更重要的是,ESP32 的價格依然非常親民,對於學生、自學者或 DIY Maker 來說,CP 值極高。

總結來說,如果你想要打造一個 低成本、功能完整、可無線上傳數據的感測系統,ESP32 絕對是首選。

ThingSpeak的優勢

當你擁有感測數據後,如何讓這些資料變得有價值?這時候 ThingSpeak 就派上用場了。ThingSpeak 是一個專門為 IoT 設計的雲端平台,它最大的特色就是能 自動把感測器上傳的數據轉換成即時圖表,讓使用者能夠隨時透過瀏覽器或手機查看環境變化。

最大的好處是 操作簡單。只要註冊一個免費帳號,就能建立「Channel(頻道)」,設定對應的資料欄位,並使用 API Key 上傳數據。即使是剛入門的初學者,也能在短時間內看到第一個圖表出現在網頁上。

此外,ThingSpeak 也支援 歷史數據儲存與分析,使用者可以下載 CSV 檔案,進一步用 Excel 或 Python 做數據處理。如果想要更進階,ThingSpeak 還整合了 MATLAB,可以直接進行統計分析或自動化運算。

另外,ThingSpeak 的 社群公開功能 讓你能與他人分享資料,例如展示室內空氣品質、農業監測結果,甚至打造自己的環境觀測站。

總結來說,ThingSpeak 就像是一個現成的「數據儀表板」,免去自己架設伺服器的麻煩,讓你能專注在數據收集與應用上。

ThingSpeak官網連結: https://thingspeak.mathworks.com/

準備所需材料

在開始動手之前,我們需要先把所有必備的材料準備好。這部分就像煮飯前要備好食材,工具齊全才能順利完成整個專案。以下是你會用到的主要元件:

ESP32開發板

ESP32 是整個專案的核心,大部分開發板都已經內建 USB 轉序列晶片,只要用 USB 線連接電腦即可燒錄程式。

優良店家推薦: https://s.shopee.tw/AUkQj8V528

DHT11 或 DHT22 溫濕度感測器

這是用來量測環境溫度與濕度的感測器。

  • DHT11:價格便宜,適合入門,不過精度較低。

優良店家推薦: https://s.shopee.tw/10oDQFIFG

  • DHT22:量測範圍與精度更高,適合需要長期紀錄或對數據要求更精準的應用。

優良店家推薦: https://s.shopee.tw/1BClbmIWb6

杜邦線與麵包板

這些是連接 ESP32 與感測器的好幫手。杜邦線讓你不用焊接就能快速測試電路,麵包板則方便插拔與修改接線。

優良店家推薦: https://s.shopee.tw/4VTDaen3W5

安裝開發環境

有了硬體,接下來就是軟體環境的準備。這一步很關鍵,因為只有正確安裝好開發工具,我們才能順利撰寫程式並將它上傳到 ESP32。

這部份可以參考之前文章"ESP32的創新與應用:引領未來技術趨勢",完整安裝教學。

ThingSpeak帳號與設定

當 ESP32 準備好之後,我們需要一個平台來接收與顯示感測數據,而 ThingSpeak 正是最適合的選擇。以下將帶你一步一步完成帳號申請與頻道建立:

ThingSpeak官網連結: https://thingspeak.mathworks.com/

註冊與建立新Channel

  1. 前往 ThingSpeak 官網,點擊 Sign Up 註冊帳號。
  2. 填寫電子郵件、帳號名稱與密碼,並完成驗證。
  3. 登入後,選擇 「Channels → My Channels → New Channel」 來建立一個新頻道。
  4. 在頻道設定中,輸入專案名稱(例如「ESP32溫濕度紀錄」)。
ThingSpeak Website
ThingSpeak Website
點擊"Create one!"註冊ThingSpeak新帳號
點擊”Create one!”註冊ThingSpeak新帳號

設定欄位 (Field) 對應溫度與濕度

  • 在新頻道的設定頁面中,你可以勾選並命名不同的欄位 (Field)。
  • 建議設定:
    • Field 1 → Temperature (溫度)
    • Field 2 → Humidity (濕度)
  • 你也可以額外新增欄位,未來若要加裝更多感測器就能直接使用。
在New Channel建立"Field1=Temperature (溫度) & Field2=Humidity (濕度)"
在New Channel建立”Field1=Temperature (溫度) & Field2=Humidity (濕度)”

取得API Key

ThingSpeak 與 ESP32 溝通的關鍵在於 API Key:

  1. 在頻道頁面選擇 「API Keys」。
  2. 複製「Write API Key」,這是用來授權 ESP32 上傳資料的金鑰。
  3. 稍後在程式碼中,會需要把這組金鑰填入,才能成功上傳數據。

完成以上設定後,你的 ThingSpeak 帳號與頻道就建立完成了!接下來只要讓 ESP32 上傳數據,就能在網頁上看到自動更新的圖表。

API Keys
API Keys
程式中放上自己API Keys
程式中放上自己API Keys

放在自己的API Keys後,將https://的”s”去除http://,資料才上傳的到。

要記得把第二個Field2加入網址中,ThingSpeak才讀得到資料,如下:

http://api.thingspeak.com/update?api_key=XXXXXXXXX&field1=0&field2=0

接線教學

在進入程式編寫之前,我們需要先把硬體正確接線。接線就像蓋房子的地基,如果一開始連錯腳位,後面不管程式怎麼寫都不會成功。以下以 DHT11/DHT22 搭配 ESP32 為例,帶你完成接線:

DHT感測器與ESP32腳位對應

大部分的 DHT11/DHT22 模組會有 3 或 4 個腳位,常見的接法如下:

  • VCC → 3.3V (ESP32)
  • GND → GND (ESP32)
  • DATA → GPIO 5 (可更改,但程式需一致)

如果是 4 腳版本的模組,通常第 3 腳是空腳,可以不用接。

詳細教學請參考:Arduino UNO + DHT11 + OLED:溫濕度即時顯示完整教學(含程式碼)

注意電壓與接地

  • ESP32 的邏輯電壓是 3.3V,而 DHT11/DHT22 也能在 3.3V 下穩定運作,所以直接供電即可。
  • 確保 所有模組的 GND 必須共地,否則即使接對 VCC 與 DATA,感測器也無法正常工作。

是否需要電阻?

有些 DHT 模組已經內建 上拉電阻,你只要照上面接線即可。若你的模組沒有,建議在 DATA 與 VCC 之間加一顆 10kΩ 電阻,以確保訊號穩定。

麵包板接線示意

  1. 把 ESP32 插在麵包板一側,DHT 感測器插在另一側。
  2. 用杜邦線將 VCC → 3.3V、GND → GND、DATA → GPIO 4 連接起來。
  3. 檢查每條線是否插穩,避免接觸不良。

完成以上步驟後,你的感測器就算是「上線」了!接下來我們就可以撰寫程式,讓 ESP32 讀取溫濕度數據,並上傳到 ThingSpeak。

ESP32與DHT11接線圖

撰寫程式碼

硬體接好後,接下來就是最精彩的部分:寫程式!這裡我們會一步步示範,讓 ESP32 先讀取溫濕度,再透過 WiFi 上傳到 ThingSpeak。

初始化函式庫

首先要在程式中引入必要的函式庫:

				
					#include <WiFi.h>
#include <HTTPClient.h>
#include <SimpleDHT.h>
// 請修改以下參數--------------------------------------------
char ssid[] = "自己Wifi名稱";
char password[] = "自己Wifi密碼";
// 請修改為你自己的API Key,並將https 改為http
String url = "http://api.thingspeak.com/update?api_key=你的APIKeys";
int pinDHT11 = 5;  // 修改腳位為5
//---------------------------------------------------------
SimpleDHT11 dht11(pinDHT11);  // 宣告SimpleDHT11 物件
				
			

設定WiFi連線

在 setup() 函式中,我們要讓 ESP32 先連上 WiFi:

				
					void loop() {
  Serial.println("=============");
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
    Serial.print("溫度計讀取失敗,錯誤碼=");
    Serial.println(err);
    delay(1000);
    return;
  }
  // 讀取成功,將溫濕度顯示在序列視窗
  Serial.print("溫度計讀取成功:");
  Serial.print((int)temperature);
  Serial.print(" *C, ");
  Serial.print((int)humidity);
  Serial.println("H");
  // 開始傳送到thingspeak
  Serial.println("啟動網頁連線");
  HTTPClient http;
  // 將溫度及濕度以HTTP Get 參數方式補入網址後方
  String url1 = url + "&field1=" + (int)temperature + "&field2=" + (int)humidity;
  // http client 取得網頁內容
  http.begin(url1);
  int httpCode = http.GET();
  if (httpCode == HTTP_CODE_OK) {
    // 讀取網頁內容到payload
    String payload = http.getString();
    // 將內容顯示出來
    Serial.print("網頁內容=");
    Serial.println(payload);
  } else {
    // 讀取失敗
    Serial.println("網路傳送失敗");
  }
  http.end();
  delay(20000);  // 休息20 秒
}
				
			

讀取溫濕度數據

在 loop() 中讀取數據,並做錯誤檢查:

				
					void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();

  if (isnan(h) || isnan(t)) {
    Serial.println("讀取DHT感測器失敗!");
    delay(2000);
    return;
  }

  Serial.print("溫度: ");
  Serial.print(t);
  Serial.print(" °C  濕度: ");
  Serial.print(h);
  Serial.println(" %");

  // 上傳至ThingSpeak
  WiFiClient client;
  if (client.connect(server, 80)) {
    String postStr = apiKey;
    postStr += "&field1=";
    postStr += String(t);
    postStr += "&field2=";
    postStr += String(h);
    postStr += "\r\n\r\n";

    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("X-THINGSPEAKAPIKEY: " + apiKey + "\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(postStr.length());
    client.print("\n\n");
    client.print(postStr);

    Serial.println("已上傳數據到ThingSpeak!");
  }
  client.stop();

  delay(20000); // ThingSpeak免費版最短間隔15秒
}

				
			

程式說明

  • DHT dht(DHTPIN, DHTTYPE); → 初始化 DHT 感測器。
  • WiFi.begin() → 讓 ESP32 連上無線網路。
  • client.connect(server, 80) → 建立 HTTP 連線。
  • postStr → 包含上傳的數據與 API Key。
  • delay(20000) → 每20秒上傳一次,避免超過 ThingSpeak 的限制。

完成以上程式後,就可以把程式燒錄進 ESP32,開始測試了!

上傳程式與測試

程式碼準備好後,接下來就是實際把它燒錄進 ESP32,並驗證是否能順利把數據傳送到 ThingSpeak。

如何將程式上傳到ESP32

  1. 用 USB傳輸線 將 ESP32 連接到電腦。
  2. 在 Arduino IDE 上方選單選擇:
    • 工具 → 開發板 → 選擇 ESP32 Dev Module(或你的板子型號)。
    • 工具 → 通訊埠 → 選擇正確的 COM 埠(Windows)或 /dev/ttyUSBx(Mac/Linux)。
  3. 點擊 IDE 左上角的 「上傳」按鈕 (→)。
  4. 程式編譯並上傳,大約需要 1 分鐘。
  5. 如果燒錄失敗,可以按住 ESP32 板上的 Boot 鍵,直到 IDE 顯示「Connecting…」時再放開。

確認ESP32是否成功連線WiFi

  • 打開 IDE 下方的 序列埠監控視窗 (Serial Monitor)。
  • 設定鮑率為 115200。
  • 如果一切順利,你會看到:
  •  
  • 接著會顯示讀取的溫度與濕度數據。

驗證ThingSpeak是否接收到數據

  1. 登入 ThingSpeak,進入剛建立的 Channel。
  2. 在 「Private View」 或 「Public View」 頁面中,查看圖表。
  3. 若成功上傳,你會看到溫度與濕度的數值逐步更新,並且生成一條隨時間變化的曲線。

常見錯誤排查

  • 無法連線WiFi → 檢查 SSID 與密碼是否正確。
  • 無法上傳到ThingSpeak → 確認 API Key 是否正確貼上。
  • 感測數據為 NaN → 檢查 DHT 感測器接線,或確認有無上拉電阻。

當你在 ThingSpeak 網頁看到第一條即時更新的數據曲線時,那一刻就代表專案成功啦!

在ThingSpeak查看數據

成功上傳數據後,我們就可以在 ThingSpeak 平台上 即時查看與分析感測數據。這個過程就像在監控室觀察環境變化,非常直觀又方便。

即時圖表顯示

  • 進入你的 Channel 後,可以看到 溫度與濕度的即時折線圖。
  • 圖表會自動隨每次上傳更新,讓你清楚看到環境的變化趨勢。
  • 可以調整圖表的時間範圍,例如 最近一小時、一天或一週,快速掌握短期或長期趨勢。

歷史數據紀錄

  • ThingSpeak 會自動儲存所有上傳的數據,方便你後續分析。
  • 你可以在 「Data Import/Export」 功能中下載 CSV 檔案,匯入 Excel 或 Python 進行統計分析。
  • 歷史數據不僅能看趨勢,還可以用來比對不同時間段的溫濕度變化,例如早晚溫差、季節濕度波動等。

進階設定

  • 可以自訂 自動更新圖表的間隔,甚至設定警示通知,當溫度或濕度超出範圍時透過 LINE 或 Email 提醒。
  • 如果你的專案有多個感測器,也可以在同一個 Channel 顯示多個欄位的數據,方便統一監控。

使用 ThingSpeak 的好處就是 不用自己架設伺服器,也能快速擁有完整的數據視覺化,對新手來說尤其友善。

Thing Speak紀錄下ESP32上傳的溫度&濕度

結論

透過這篇文章,我們完整介紹了如何使用 ESP32 控制板搭配 DHT11/DHT22 溫濕度感測器,將感測數據上傳到 ThingSpeak,並透過圖表進行即時監控與歷史紀錄。從準備材料、安裝開發環境、接線、撰寫程式到數據上傳,每一個步驟都清楚呈現,讓初學者也能輕鬆上手。

這個專案不僅可以作為 智慧家庭或環境監控入門,更能延伸到 智慧農業、室內空氣品質監測 等應用場景。ESP32 的高效能與 ThingSpeak 的簡易圖表化功能,讓每個人都能在短時間內看到成果,增加學習成就感。

總結來說,結合 ESP32 與 ThingSpeak,不只是技術操作,更是一個將物聯網概念實際落地的好方法。只要掌握了這套流程,你就能打造屬於自己的 智慧感測系統,輕鬆監控與管理環境數據。

常見問答 (FAQ)

Q1:ESP32 與 ESP8266 的差異?

ESP32 功能更強大,內建 WiFi 與藍牙雙模,GPIO 腳位更多,適合多任務應用。ESP8266 僅支援 WiFi,功能較簡單。

Q2:DHT11 與 DHT22 哪個比較好?

DHT22 精度與量測範圍較高,適合對數據要求精準的專案;DHT11 適合入門或短期實驗。

Q3:ThingSpeak 免費版有什麼限制?

免費版每 15 秒可上傳一次數據,並有限制頻道與欄位數量,但足夠一般入門與學習使用。

Q4:是否能同時上傳多個感測器數據?

可以,只要設定多個欄位 (Field),並在程式中分別讀取不同感測器,再上傳對應欄位即可。

Q5:資料能否匯出做進一步分析?

可以,ThingSpeak 支援 CSV 匯出,也可結合 MATLAB 或 Python 進行進階數據分析。

參考資料

發佈留言

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

返回頂端