如果你曾經想要紀錄環境的溫度與濕度,並且能夠遠端透過網站即時查看,那麼ESP32搭配溫濕度感測器上傳數據到ThingSpeak就是一個超棒的解決方案!ESP32不僅功能強大,還能輕鬆連上WiFi,把感測數據傳到雲端;而ThingSpeak則是一個免費又直觀的IoT平台,可以將資料自動轉換成漂亮的圖表。
Table of Contents
Toggle為什麼要用ESP32?
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
- 前往 ThingSpeak 官網,點擊 Sign Up 註冊帳號。
- 填寫電子郵件、帳號名稱與密碼,並完成驗證。
- 登入後,選擇 「Channels → My Channels → New Channel」 來建立一個新頻道。
- 在頻道設定中,輸入專案名稱(例如「ESP32溫濕度紀錄」)。


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

取得API Key
ThingSpeak 與 ESP32 溝通的關鍵在於 API Key:
- 在頻道頁面選擇 「API Keys」。
- 複製「Write API Key」,這是用來授權 ESP32 上傳資料的金鑰。
- 稍後在程式碼中,會需要把這組金鑰填入,才能成功上傳數據。
完成以上設定後,你的 ThingSpeak 帳號與頻道就建立完成了!接下來只要讓 ESP32 上傳數據,就能在網頁上看到自動更新的圖表。


放在自己的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Ω 電阻,以確保訊號穩定。
麵包板接線示意
- 把 ESP32 插在麵包板一側,DHT 感測器插在另一側。
- 用杜邦線將 VCC → 3.3V、GND → GND、DATA → GPIO 4 連接起來。
- 檢查每條線是否插穩,避免接觸不良。
完成以上步驟後,你的感測器就算是「上線」了!接下來我們就可以撰寫程式,讓 ESP32 讀取溫濕度數據,並上傳到 ThingSpeak。
撰寫程式碼
硬體接好後,接下來就是最精彩的部分:寫程式!這裡我們會一步步示範,讓 ESP32 先讀取溫濕度,再透過 WiFi 上傳到 ThingSpeak。
初始化函式庫
首先要在程式中引入必要的函式庫:
#include
#include
#include
// 請修改以下參數--------------------------------------------
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
- 用 USB傳輸線 將 ESP32 連接到電腦。
- 在 Arduino IDE 上方選單選擇:
- 工具 → 開發板 → 選擇 ESP32 Dev Module(或你的板子型號)。
- 工具 → 通訊埠 → 選擇正確的 COM 埠(Windows)或 /dev/ttyUSBx(Mac/Linux)。
- 點擊 IDE 左上角的 「上傳」按鈕 (→)。
- 程式編譯並上傳,大約需要 1 分鐘。
- 如果燒錄失敗,可以按住 ESP32 板上的 Boot 鍵,直到 IDE 顯示「Connecting…」時再放開。
確認ESP32是否成功連線WiFi
- 打開 IDE 下方的 序列埠監控視窗 (Serial Monitor)。
- 設定鮑率為 115200。
- 如果一切順利,你會看到:
- 接著會顯示讀取的溫度與濕度數據。
驗證ThingSpeak是否接收到數據
- 登入 ThingSpeak,進入剛建立的 Channel。
- 在 「Private View」 或 「Public View」 頁面中,查看圖表。
- 若成功上傳,你會看到溫度與濕度的數值逐步更新,並且生成一條隨時間變化的曲線。
常見錯誤排查
- 無法連線WiFi → 檢查 SSID 與密碼是否正確。
- 無法上傳到ThingSpeak → 確認 API Key 是否正確貼上。
- 感測數據為 NaN → 檢查 DHT 感測器接線,或確認有無上拉電阻。
當你在 ThingSpeak 網頁看到第一條即時更新的數據曲線時,那一刻就代表專案成功啦!
在ThingSpeak查看數據
成功上傳數據後,我們就可以在 ThingSpeak 平台上 即時查看與分析感測數據。這個過程就像在監控室觀察環境變化,非常直觀又方便。
即時圖表顯示
- 進入你的 Channel 後,可以看到 溫度與濕度的即時折線圖。
- 圖表會自動隨每次上傳更新,讓你清楚看到環境的變化趨勢。
- 可以調整圖表的時間範圍,例如 最近一小時、一天或一週,快速掌握短期或長期趨勢。
歷史數據紀錄
- ThingSpeak 會自動儲存所有上傳的數據,方便你後續分析。
- 你可以在 「Data Import/Export」 功能中下載 CSV 檔案,匯入 Excel 或 Python 進行統計分析。
- 歷史數據不僅能看趨勢,還可以用來比對不同時間段的溫濕度變化,例如早晚溫差、季節濕度波動等。
進階設定
- 可以自訂 自動更新圖表的間隔,甚至設定警示通知,當溫度或濕度超出範圍時透過 LINE 或 Email 提醒。
- 如果你的專案有多個感測器,也可以在同一個 Channel 顯示多個欄位的數據,方便統一監控。
使用 ThingSpeak 的好處就是 不用自己架設伺服器,也能快速擁有完整的數據視覺化,對新手來說尤其友善。
結論
透過這篇文章,我們完整介紹了如何使用 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 進行進階數據分析。
