跳到內容

IoT · 3D Printing · Firmware

機房溫濕度監測器

一句需求,約 14 小時後在機房上線。
ESP32+DHT11、自己列印的滑蓋殼、只提供 API 的韌體。

2026 ESP32 + DHT11 PLA 滑蓋殼 HTTP JSON API
闔蓋上電的機房溫濕度監測器實物

闔蓋上線的實物・背景螢幕已模糊

起因只有一句話

機房需要一台能從網路讀取溫濕度的設備。範圍一開始就收窄:只量測,不控制除濕機或加濕機;USB 5V 供電;外殼用家裡的 Ender‑3 以 PLA 列印。

裝置只提供 API。要不要告警、資料存多久,交給另外的巡檢服務判斷;之後加監測點或改門檻,都不必重燒韌體。

買料、列印、接線、組裝由我自己做;接線圖、CAD 建模、韌體與監看頁由 AI 協助實作,每一段都有書面任務單,寫明範圍與驗收標準。

從需求到上線

中間轉折四次:換硬體、板型未知、接線插反、需求從「會告警」改成「只量測」。

01

採購:以實際買到的零件為準

原本規劃 ESP32‑C3+SHT31,當天改用材料行買得到的 ESP32 開發板+DHT11。BOM 依實物更新,另以網路同等規格商品完成比價。

02

接線圖:用現成元件庫產生

Wokwi 開源元件庫(MIT)在無頭瀏覽器裡算繪,線端座標取元件自帶的腳位定義。只有三條線:3V3、GND、GPIO4。

03

建模:OpenSCAD 參數化滑蓋殼

殼身+滑蓋兩件,一盤免支撐印完。買回來時看不出是 30 腳還是 38 腳,兩種板型都做;每種各跑 15 項自動檢查。

04

切片:三版 G-code

Cura、PLA、0.28 mm 層高,一盤約 6 小時。最後一版加 brim、提高熱床溫度、前 3 層關風扇,降低細長零件翹邊的機率。

05

韌體:只量測+API

每 5 秒取樣一筆,RAM 保留約 1 小時;提供 latest、增量 history、health 與 Prometheus 格式 metrics。核心邏輯先在主機端測過才上板。

06

閉環:插反的兩條白線

第一次燒錄每筆都讀不到。診斷程式量出資料腳被拉到地,判斷是模組端兩條同色線插反;對調後上線,監看頁連續 923 筆、0 失敗。

滑蓋殼

45° 燕尾滑蓋沿長軸往 USB 端滑出;格柵通風、天線上方留淨空;不開蓋也能插線、按 BOOT/EN。

滑蓋半開的殼體算繪圖,可見開發板、走線與感測器艙

30 腳版算繪圖・滑蓋半開(完整紀錄裡有可旋轉、可滑開滑蓋的 3D 模型)

~14h

需求到上線

923

筆讀值・0 失敗

15

項殼體自動檢查

181+47

項主機端測試

關鍵設計決策

裝置只量測,判斷交給巡檢服務

第一版韌體會在裝置上告警,後來拿掉,只留原始值與健康計數。門檻、告警管道和保存期限都在服務端改,不必重燒。

不確定就標出來,兩種都做

每個尺寸標明來源是官方、第三方實測還是估計。板型無法確認時,30 腳和 38 腳各出一版,不把猜測當定案。

驗證要能失敗

殼體檢查和韌體測試都刻意改壞過一次,確認真的抓得到錯;實機驗收另列清單逐項打勾。

API 只放在受信任的區網

API 沒有登入、只走 HTTP,所以不對外開放;需要跨網段時走 VPN。之後可以加 Bearer token,CORS 已預留 Authorization 標頭。

技術

Hardware

ESP32 30 腳 DOIT DevKit V1
DHT11 模組
杜邦線免焊接

CAD / Print

OpenSCAD(Manifold)
Python 干涉檢查
Cura 5.6・G-code 逐層分析

Firmware

arduino-cli・ESP32 Arduino core
C++ 主機端測試(ASan/UBSan)
NTP・Prometheus 格式

Dashboard

單一 HTML 檔直接打 API
只顯示、不判斷
Playwright 實機驗證

BOM 與比價、接線圖、可旋轉的 3D 模型、G-code、API 與閉環證據,都在完整紀錄裡