倉庫有點潮?阿明博士用 ESP32-S3 做一台溫濕度計
內容整理:台灣智能感測科技|導讀角色:阿明博士
紙箱摸起來有些軟,收納櫃裡也開始有悶悶的味道,卻不知道是短暫下雨,還是環境一直太潮。這一篇,阿明博士帶你用 ESP32-S3 和 SHT20 做一台溫濕度計:手機連上同一個 Wi-Fi,就能開網頁看數字,不必先安裝 Home Assistant。
ESP32-S3 可以用 ESPHome 讀取 SHT20,再透過 Wi-Fi 網頁顯示溫濕度,無須 Home Assistant。只想在區網看即時數字時,也不必先架 MQTT 或其他後端。
- 手機從區網網頁查看溫度與濕度
- 看見資料停更,方便發現接線問題
- 之後可接到第六課,增加歷史紀錄
先看見變化,才知道該怎麼處理
把感測器放在平常存放物品的位置,觀察下雨、開門、開冷氣或使用除濕機時,溫濕度怎麼變。對小倉庫、工作室或收納空間來說,這比偶爾拿手機看一次天氣預報,更接近物品真正處在的環境。
本課使用小巧的 SHT20 I²C 模組。它透過兩條訊號線和 ESP32-S3 溝通,再由主板把數值放到區網網頁。日常查看時,電腦不必一直開著,主板有供電、Wi-Fi 連得上即可。
感測器的位置,比多一位小數還重要
不要把它緊貼主板的穩壓器、放在太陽直曬的位置,或封在沒有通氣孔的盒子裡。你想知道的是物品周圍的空氣,而不是電子零件旁邊有多熱。先選一個有代表性的位置,固定放好,再比較不同時段。
範例每 10 秒讀一次,適合看一般室內環境的變化。要設定提醒時,請依實際存放的物品決定門檻;紙材、金屬件和電子零件,對儲存環境的要求並不相同。
數字停住了,也要看得出來
感測器的接頭鬆掉時,畫面可能還留著最後一次數值。因此除了溫度與濕度,網頁也會顯示資料是否持續更新。超過 35 秒沒有新樣本,就先檢查接線,別把停住的數字當成環境沒有變化。
想多了解:這份 SHT20 設定為什麼附元件資料夾?
這份教學附有對應 SHT20 的本機元件。下載時,請把 examples/components 一起保留,單獨複製 YAML 會找不到元件。它依 Sensirion 資料表讀取溫濕度,檢查傳輸的 CRC,再換算數值;讀取出錯時,保留舊值並讓更新狀態反映問題。
元件也處理資料表提到的 No-Hold 通訊注意事項,使用每次量測重新載入 OTP 的做法。完整原始碼隨教學提供,日後更換 ESPHome 版本時,可以一起檢查相容性。
先準備這些材料
| 材料 | 準備重點 |
|---|---|
| ESP32-S3 N16R8 | 主板、資料 USB 線、2.4GHz Wi-Fi |
| SHT20 I²C 模組 | 商品 6129,使用 3.3V 供電 |
主板請確認為 WROOM-1-N16R8,範例使用 16MB Flash 與 Octal PSRAM。接線先斷電,表格中的 GPIO 是腳位名稱,不是排針從上往下數的位置。
照著圖,把線一條條接好
依名稱逐條對照接線

| 感測器接腳 | ESP32-S3/電源 | 核對事項 |
|---|---|---|
| SHT20 VCC | 主板 3V3 | 本課限 3.3V I²C 模組,先核對實物 |
| SHT20 GND | 主板 GND | 所有訊號參考共地 |
| SHT20 SDA | GPIO8 | 上拉至 3.3V |
| SHT20 SCL | GPIO9 | 100kHz;先用短線 |
所有模組都要與主板共地。若使用外接電源,不要把外接 5V 和 USB 5V 直接並接,也不要把獨立 3.3V 穩壓器的輸出接到主板 3V3 輸出。先量好電壓,再接入訊號線。
把設定放進主板
- 下載整個 examples 資料夾,保留 components;把 secrets.yaml.example 複製成 secrets.yaml,填入自己的 Wi-Fi 與密碼。
- 依照Windows 燒錄指南安裝 ESPHome 2026.10.1,選擇本課 YAML,先檢查設定、再編譯與 USB 燒錄。
- 在 USB 日誌或路由器裝置清單找到主板 IP,瀏覽器輸入該 IP,再用 secrets 裡的網頁帳密登入。
以下命令在 examples 資料夾執行,COM5 請換成自己的埠號。USB 接頭、日誌與後續 OTA 更新的操作,都整理在共用指南。
..\.venv\Scripts\python.exe -m esphome config 01-sht20.yaml
..\.venv\Scripts\python.exe -m esphome compile 01-sht20.yaml
..\.venv\Scripts\python.exe -m esphome upload 01-sht20.yaml --device COM5
下載完整範例(含 01-sht20.yaml) · 下載完整範例(含 secrets.yaml.example)
完整 YAML:點此展開
esphome:
name: course-01-sht20
friendly_name: "SHT20 區網溫濕度計"
min_version: 2026.10.1
compile_process_limit: 1
esp32:
board: esp32-s3-devkitc-1
flash_size: 16MB
framework:
type: esp-idf
psram:
mode: octal
speed: 80MHz
logger:
hardware_uart: USB_SERIAL_JTAG
level: DEBUG
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
power_save_mode: none
reboot_timeout: 0s
ota:
- platform: esphome
password: !secret ota_password
web_server:
port: 80
version: 3
local: true
auth:
type: digest
username: !secret web_username
password: !secret web_password
i2c:
id: sensor_bus
sda: GPIO8
scl: GPIO9
scan: true
frequency: 100kHz
external_components:
- source:
type: local
path: components
components: [sht20_local]
sensor:
- platform: sht20_local
id: sht20_driver
address: 0x40
update_interval: 10s
temperature:
id: sht_temperature
name: "SHT20 Temperature"
on_value:
then:
- lambda: |-
id(last_sht_ms) = millis();
id(sht_seen) = true;
humidity:
id: sht_humidity
name: "SHT20 Humidity"
on_value:
then:
- lambda: |-
id(last_rh_ms) = millis();
id(rh_seen) = true;
globals:
- id: last_sht_ms
type: uint32_t
restore_value: false
initial_value: '0'
- id: sht_seen
type: bool
restore_value: false
initial_value: 'false'
- id: last_rh_ms
type: uint32_t
restore_value: false
initial_value: '0'
- id: rh_seen
type: bool
restore_value: false
initial_value: 'false'
binary_sensor:
- platform: template
name: "SHT20 Temperature Fresh"
lambda: |-
return id(sht_seen) && (uint32_t)(millis() - id(last_sht_ms)) < 35000;
- platform: template
name: "SHT20 Humidity Fresh"
lambda: |-
return id(rh_seen) && (uint32_t)(millis() - id(last_rh_ms)) < 35000;
接好後,先試這幾件事
先從正常顯示開始,再試一次拔除、恢復或更換環境條件。這些小步驟有助於確認你看到的資料,確實來自現在的接線與位置。
| 測試項目 | 應觀察的結果 |
|---|---|
| 正常更新 | 每約 10 秒出現新樣本,新鮮度轉為有效 |
| 拔除 SHT20,主板保持供電 | 35 秒後溫度/濕度新鮮度失效;不出現假 0 |
| 重新插回感測器 | 觀察重置與重新取樣;記錄實際恢復時間 |
| 關閉 AP 後恢復 | 本機持續採樣;網頁重新連線後讀到新值 |
遇到問題時,從這裡開始找
先查供電和共地,再核對端子名稱與訊號方向。I²C 裝置可看掃描位址;PMS5003T 走 UART,不會出現在 I²C 清單。接著確認設定的型號與最後一次更新時間,最後才檢查網頁或後端。資料停住時,不要先把它當成環境一直沒變。
材料與延伸閱讀
ESP32-S3 N16R8 主板 · SHT20 I²C 模組。依實際用途選擇所需感測器即可。
常見問題
不用 Home Assistant,也一定要架 MQTT 嗎?
不一定。這一課由 ESP32-S3 自己提供區網網頁,只看即時溫濕度即可使用;需要集中記錄或多房間整合時,再接到第六課的 MQTT 與 Node-RED。

發佈留言
很抱歉,必須登入網站才能發佈留言。