IoT · 3D Printing · Firmware
機房溫濕度監測器
一句需求,約 14 小時後在機房上線。
ESP32+DHT11、自己列印的滑蓋殼、只提供 API 的韌體。
闔蓋上線的實物・背景螢幕已模糊
起因只有一句話
機房需要一台能從網路讀取溫濕度的設備。範圍一開始就收窄:只量測,不控制除濕機或加濕機;USB 5V 供電;外殼用家裡的 Ender‑3 以 PLA 列印。
裝置只提供 API。要不要告警、資料存多久,交給另外的巡檢服務判斷;之後加監測點或改門檻,都不必重燒韌體。
買料、列印、接線、組裝由我自己做;接線圖、CAD 建模、韌體與監看頁由 AI 協助實作,每一段都有書面任務單,寫明範圍與驗收標準。
從需求到上線
中間轉折四次:換硬體、板型未知、接線插反、需求從「會告警」改成「只量測」。
採購:以實際買到的零件為準
原本規劃 ESP32‑C3+SHT31,當天改用材料行買得到的 ESP32 開發板+DHT11。BOM 依實物更新,另以網路同等規格商品完成比價。
接線圖:用現成元件庫產生
Wokwi 開源元件庫(MIT)在無頭瀏覽器裡算繪,線端座標取元件自帶的腳位定義。只有三條線:3V3、GND、GPIO4。
建模:OpenSCAD 參數化滑蓋殼
殼身+滑蓋兩件,一盤免支撐印完。買回來時看不出是 30 腳還是 38 腳,兩種板型都做;每種各跑 15 項自動檢查。
切片:三版 G-code
Cura、PLA、0.28 mm 層高,一盤約 6 小時。最後一版加 brim、提高熱床溫度、前 3 層關風扇,降低細長零件翹邊的機率。
韌體:只量測+API
每 5 秒取樣一筆,RAM 保留約 1 小時;提供 latest、增量 history、health 與 Prometheus 格式 metrics。核心邏輯先在主機端測過才上板。
閉環:插反的兩條白線
第一次燒錄每筆都讀不到。診斷程式量出資料腳被拉到地,判斷是模組端兩條同色線插反;對調後上線,監看頁連續 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 實機驗證