專案紀錄 · IoT · 3D 列印 · 韌體 · 跨域協作

機房溫濕度監測器:從需求、採購、建模、切片到上線的跨域協作紀錄

日期 2026-11-11 · 硬體 ESP32(30 腳 DOIT DevKit V1)+DHT11 · 韌體 th_monitor 0.3.0

先講結論:機房需要一台能從網路讀取的溫濕度監測設備。從 11/10(二)17:26 開始做外殼,到 11/11(三)07:18 裝殼上線、監看頁顯示 24.8 °C/55.0 %RH、開機以來 923 筆讀值 0 失敗,前後約 14 小時。成品是一塊 30 腳 ESP32 開發板加一顆 DHT11,裝在一個 PLA 列印的滑蓋殼裡,用 USB 5V 供電,透過 HTTP JSON API 提供資料。

過程中有四次轉折:硬體從原先規劃的 ESP32-C3+SHT31 換成在材料行直接買到的 ESP32+DHT11;板型買回來前看不出是 30 腳還是 38 腳,所以兩種殼都做;第一次燒錄每筆都讀不到,查出是模組端兩條同色線插反;韌體需求從「裝置自己告警」改成「裝置只量測、判斷交給巡檢服務」。

分工上,需求方本人負責買料、列印、接線、組裝和調整需求;接線圖、CAD 建模、韌體、監看頁由 AI 協助實作;另有角色負責採購清單、列印性審查,以及派工與驗收。下文依序說明每一段用了什麼技術、遇到什麼問題、怎麼驗證。

時間發生什麼
11/10(二)17:26提出需求:做一個可 3D 列印、滑蓋安裝的模組,裝開發板與溫濕度感測器(當時規劃 ESP32-C3 SuperMini+SHT31)。
11/10(二)20:00 前後改用在材料行買到的 ESP32 開發板與 DHT11,殼體重新設計。
11/10(二)20:10–20:59殼體(OpenSCAD)與接線圖、編譯環境、韌體 v0.1.0 兩條線同時進行;殼體 15 項檢查全過,出第一版 G-code。
11/10(二)21:43需求轉折:裝置只持續量測、提供 API,異常由自建巡檢服務判斷。22:07 完成 v0.2.0 與主機端測試。
11/10(二)22:26–22:39改切 30 腳版 G-code,再出一版置中+brim。
11/10(二)22:49–23:06第一次燒錄:每筆 read_error。診斷出模組端兩條線插反,對調後讀到 26.7 °C/64 %RH。
11/10(二)23:51連上 Wi‑Fi,API 實機驗收 30/30。
11/11(三)00:00–01:09即時監看頁;韌體 v0.3.0(多組 Wi‑Fi、支援企業驗證)。
11/11(三)清晨殼體列印完成(約 6 小時),裝入板子與感測器、闔蓋上電。
11/11(三)07:18監看頁:#923、成功 923/失敗 0,閉環完成。

01發想:為什麼是「可列印模組+網路 API」

起因只有一句話:機房需要溫濕度網路監控設備。

需求方一開始就把範圍收得很窄:只量溫濕度,走內網 Wi‑Fi 提供資料;不控制除濕機或加濕機,也不接智慧插座。機房溫度約 25 °C,現場用 USB 5V 供電。這幾個條件決定了後面的做法:

DHT11 溫濕度感測 GPIO4 ESP32(30 腳) 每 5 秒取樣一筆 RAM 保留 720 筆(約 1 小時) /api/v1/* · /metrics HTTP JSON 受信任區網 即時監看頁(瀏覽器) 只顯示,不判斷 巡檢服務(自建) 門檻判斷、告警、長期保存
圖 1 資料流。裝置只量測並保留最近約 1 小時的樣本;要不要告警、資料存多久,都由巡檢服務決定。

02採購:從規劃清單到實際落地的 BOM

清單換過一次,現在的版本以實際買到、裝進殼裡的零件為準。

第一版清單(11/10 下午,採購端列出):ESP32‑C3 SuperMini 開發板+GY‑SHT31‑D 溫濕度模組(I²C),每個監測點一組,需求方已有母對母杜邦線與 Type‑C 充電頭。依這組硬體做的第一代滑蓋殼,已經做到切片和 CAD 核對。

實際落地:同一天,需求方在桃園的健新電子材料行直接買到 ESP32 開發板和 DHT11,當晚硬體就改用這組。代價是外殼得重新設計,而且買回來時板子還在防靜電袋裡,看不出是 30 腳還是 38 腳(見第 04 節)。DHT11 的規格精度是 25 °C 時 ±2 °C、±5 %RH,用來看機房趨勢夠用;限制見第 10 節。

兩包零件:ESP32 開發板 WiFi+藍芽 售價 420,電阻式溫濕度傳感器 DHT11 售價 80,健新電子材料行標籤
圖 2 材料行購入的兩包零件。ESP32 開發板 Wi‑Fi+藍芽 NT$420(店內編號 102924)、電阻式溫濕度傳感器 DHT11 NT$80(店內編號 102754,附 3 線杜邦線)。
品項規格(實物確認)數量實購標價(11/10)網路同等品現價/估算(11/11(三)查)
ESP32 開發板30 腳 DOIT DevKit V1、ESP‑WROOM‑32(ESP32‑D0WD‑V3)、4MB flash、USB‑C、CP21021NT$420健新電子材料行
店內編號 102924
台灣物聯科技 NT$210(含稅;頁面標未稅 NT$200)ESP-WROOM-32 DevKit V1,頁面寫明 30 Pin、CP2102、Type‑C酷澎市集・維貿企業社 NT$202(免運)選項「便宜板ESP32s Doit開發板」,30 腳;頁面沒寫死 USB 轉串列晶片
DHT11 模組轉接板絲印 + out −(板上標 V1.82),3 針模組(非裸探頭)1NT$80同上
店內編號 102754
台灣物聯科技 NT$63(含稅;頁面標未稅 NT$60)3 線有燈模組,3.3–5 V,附 3 條杜邦線酷澎市集・傑森創工商號 NT$553 針 DHT11 模組;傑森創工官網同價
PLA 線材1.75 mm;殼身+滑蓋一盤,Cura 估 15.95 m,以密度 1.24 g/cm³ 換算約 47.6 g(含 brim,未實秤)約 47.6 g已有約 NT$14(47.6 g × NT$300/kg)耗材成本估算,單價為需求方指定的估算值,不是某家店的當日標價
母對母杜邦線DHT11 接 3V3/GND/GPIO4,共 3 條3已有—(不計入)
USB‑C 線+5V 充電頭一般手機充電頭即可1已有—(不計入)部分同等板是 Micro‑USB,買之前看清接頭
固定件(選用)M3×6 自攻螺絲(固定 DHT 板)、M3 或 ≤3.5 mm 木螺絲/束帶/VHB 背膠(上機櫃)—已有—(不計入)

比價摘要:一組開發板+感測器(不含運費與 PLA)

方案小計ESP32DHT11運費與說明
健新電子材料行(實購)NT$500NT$420NT$80門市標價(圖 2)。官網查無這兩個店內編號,這次也沒有再向門市詢價。
台灣物聯科技NT$273NT$210NT$63同一家,可一起出貨。未滿 NT$1,000 要付運費:超商取貨 NT$50、掛號 NT$60、黑貓 NT$80。
酷澎市集
(維貿+傑森創工)
NT$257NT$202NT$55兩個賣家分開出貨。開發板免運;DHT11 同商家滿 NT$149 免運,只買一顆未達門檻,要另計運費。

加上 PLA 估算:實機材料約 NT$514(420+80+14);網路同等品約 NT$287(台灣物聯科技)或 NT$271(酷澎市集),運費另計。杜邦線、USB 線與充電頭、固定件都是已有的,不計入。

價格說明:網路價是 11/11(三)早上查到的公開標價,屬於同等規格的網路商品,不是健新實購的同一批貨,也不保證板型或 USB 晶片完全相同;NT$420/NT$80 是 11/10(二)在健新的實購標價。依需求方的決定,這次詢價改用網路同等品的現價完成,沒有再向門市電話或書面詢價,也沒有加入購物車或下單。比價時排除了規格對不上的低價選項:同一個酷澎商品頁上 NT$145 的選項其實是天線;酷澎上 NT$35 的 DHT11 是裸探頭,不是模組(另一家 NT$35 的模組已售完);另一家 NT$140 的 DevKit‑32E 沒寫腳位,這個型號通常是 38 腳,裝不進本篇的 30 腳殼。

03接線圖:用現成元件庫產生,而不是從零畫

需求方的要求是「不要從 0 到 1,去找現成的套件繪製,讓我很容易接線」。

AI 選了 Wokwi 的開源元件庫 @wokwi/elements(MIT 授權):30 腳板用 wokwi-esp32-devkit-v1,感測器借用 wokwi-dht22 的外形(腳位功能與 DHT11 相同,改成藍色並標 DHT11)。元件在無頭瀏覽器裡算繪成 SVG,線端座標直接取元件自帶的腳位定義,再用 Python 組成接線圖,因此每條線都畫在真實的腳位上。同一組接線也輸出成 Wokwi 的 diagram.json,可以直接拿去模擬。

接法只有三條線,都在 USB 那一端的右排:

DHT11 轉接板絲印接到 ESP3230 腳 DOIT 位置(從 USB 端數)為什麼
VCC/+3V3右排第 1 腳DHT11 可用 3.3–5.5 V。接 3V3 時,DATA 被拉高後也只有 3.3 V,對 ESP32 腳位安全;不要接 VIN(5V)。
GND/−GND右排第 2 腳和 3V3 相鄰,走線最短。
DATA/outGPIO4(D4)右排第 5 腳避開 SPI flash 腳(GPIO6–11)、開機設定腳(0/2/5/12/15)、USB 序列腳與只能輸入的腳。
ESP32 30 腳 DOIT DevKit V1 與 DHT11 接線圖:紅線 3V3 接 VCC、黑線 GND 接 GND、黃線 GPIO4 接 DATA
圖 3 AI 產生的 30 腳接線圖。元件圖取自 Wokwi Elements(MIT);DHT 外形改自 wokwi-dht22(改藍色、字樣改 DHT11)。圖中板子畫的是 Micro‑USB,實物是 USB‑C,腳位相同。圖內提到的 WIRING.md 是專案內的接線步驟文件。
DHT11 模組(板上標 V1.82,絲印 + out −)以紫、白、白三條杜邦線接到 30 腳 ESP32 的 3V3、GND、D4
圖 4 實物接線。DHT11 模組(板上標 V1.82)用紫、白、白三條杜邦線接到 30 腳 ESP32 的 3V3、GND、D4。實物線色和圖上的紅、黑、黃不同,兩條白線也容易混淆,第 08 節的第一次故障就出在這裡。

38 腳 DevKitC 版也畫了一張,但那張板圖的來源 repo 沒有附授權檔,只能內部參考,本文不收錄。

04建模:OpenSCAD 參數化兩件式滑蓋殼

殼身+滑蓋兩件,一盤印完、免支撐;板型尺寸放在一張查表裡,換板子只改一列。

外殼用 OpenSCAD 寫成參數化原始檔,AI 協助建模,用 Manifold 後端輸出 STL。從前一代(C3+SHT31)沿用了幾個已驗證過的特徵:45° 燕尾滑蓋沿長軸滑入、配合間隙 0.30 mm、滑蓋貼床面做 0.3 mm 防象腳倒角、前端彈片加兩側 1.0 mm 切縫(根部 R0.5),以及安裝耳上的沉頭孔和束帶槽。這次重新設計的部分:

板型不確定,所以兩種都做。買回來時無法從照片判斷板型,查不到店家頁面,也還沒有實物可以量。殼體預設做 38 腳 DevKitC(尺寸取自 Espressif 官方圖面與 DXF),另出一套 30 腳 DOIT 版(尺寸取自第三方實測圖)。實物確認是 30 腳 DOIT 後,就改印這一版:殼身約 35 × 124 × 36 mm,含安裝耳長 142 mm。

檢查自動化,而且要能抓到錯。建置腳本對兩種板型各跑 15 項檢查,包括:STL 封閉流形、參考零件與殼身干涉、閉合與整段滑出時的滑蓋干涉、楔口間隙、USB 端斜插角度、杜邦線路徑、天線淨空、切縫寬度、扣點實測尺寸、最小肋厚,以及 0.28 mm 層高量化後的實際間隙。結果全部 PASS。為了確認檢查本身有效,也刻意把參數改壞(走線孔縮小、楔口伸進模組、插頭開口縮小、滑蓋壓低等),結果都如預期判為干涉。STL 也曾匯入雲端 CAD 平台,核對外框與體積,數字與 STL 一致。

過程中真的出過的錯:

可旋轉的 3D 模型(30 腳 DOIT 版,殼身+滑蓋)

模型載入中…

—
拖曳旋轉;滾輪或雙指縮放;右鍵或雙指拖曳平移。滑蓋沿長軸往 USB 端滑出,跟實際開蓋方向相同。

模型檔(相對路徑,隨本頁一起提供):GLB(殼身、滑蓋為兩個獨立零件)・STL(組裝態,單一網格)。檢視器以 three.js r160(MIT)實作。模型本身沒有動畫,滑開時程式只沿長軸平移滑蓋零件,沒有修改模型檔。

30 腳版殼體閉合等角圖,藍色滑蓋,殼身側面與端面有通風格柵,兩端有安裝耳
圖 5 閉合外觀。藍色是滑蓋。左下為 DHT 端,有格柵與彈片扣;右上為 USB 端,蓋上有 BOOT/EN 按壓孔。
滑蓋往 USB 端滑開一半,露出 DHT11 艙與杜邦線
圖 6 滑蓋半開(靜態示意)。滑蓋往 USB 端退出,DHT11 艙先露出來。實際操作請用上方檢視器。
拿掉滑蓋的俯視圖:ESP32 板在 USB 端、DHT11 在另一端,中間是隔牆與走線孔
圖 7 拿掉滑蓋(含參考零件)。ESP32 板在上方,天線朝隔牆;三色線穿過隔牆底部的走線孔,接到 DHT11。
側剖面:左側 DHT11 艙,右側 ESP32 板與板下杜邦母頭,線沿底部穿過隔牆
圖 8 側剖面。右側 ESP32 板下方是杜邦母頭和彎線空間;三條線沿殼底穿過隔牆,接到左側 DHT11 艙。

05切片:Cura 產生 G-code,三版逐步調整

PLA、層高 0.28 mm、免支撐、一盤約 6 小時。

切片用 Cura 5.6(CuraEngine 5.6.0),機型 Creality Ender‑3,0.4 mm 噴嘴,沿用需求方原本的 Low 0.28 mm 設定:2 道牆 0.8 mm,不加支撐。設計時就把牆厚做成 0.8 的倍數,懸空都 ≤45°,橋接只出現在 2.0 mm 通風槽頂與 6 mm 走線孔頂。印表機設定裡的噴頭 Y offset −20 是刻意的,任務單寫明不要補償;熱床後緣 20 mm 不放零件。

版本內容Cura 預估線材
11/10 20:5938 腳預設版一盤。殼身與滑蓋在床上轉 90°,長邊沿 X 軸排;200 °C/熱床 50 °C。6 h 00 m16.04 m
11/10 22:26改切 30 腳 DOIT 版,其他條件相同。5 h 51 m15.64 m
11/10 22:3930 腳版:以實體熱床座標(扣掉 −20 offset)把整盤置中,加 5 mm brim;熱床 60 °C、首層 205 °C、之後 200 °C;前 3 層關風扇,第 4 層起全速(G-code 後處理)。127 層,最高 35.56 mm。5 h 59 m15.95 m

第三版主要在加強附著:零件細長、底面大,brim、較高的熱床溫度和前幾層關風扇,都是為了降低翹邊的機率。第一版 G-code 另外做了逐層檢查:滑蓋兩條切縫在 8 層裡都沒有被擠出線填住,彈片能獨立彎曲;楔口在 0.28 mm 層高下的實際間隙是 0.36 mm。

G-code 第 1 層路徑圖:殼身背面與滑蓋並排在熱床中央,外圍橘色為 5 mm brim,後緣 20 mm 為紅色禁區
圖 9 第三版 G-code 的第 1 層。藍色是殼身背板與滑蓋,橘色是 5 mm brim;紅色是熱床後緣 20 mm 禁區,十字是熱床中心。
Ender-3 熱床上剛印完的黑色殼身,兩端有安裝耳,側面是通風格柵
圖 10 Ender‑3 上剛印完的黑色殼身。面板顯示列印約 6 小時。

06韌體:從「會告警」改成「只量測+API」

韌體只用 arduino-cli 編譯,過程不需要 sudo;在主機端寫測試,有板子之前先把邏輯驗完。

編譯環境:用 Homebrew 裝 arduino-cli 1.5.1,再裝 Espressif 官方 ESP32 Arduino core 3.3.12,函式庫用 Adafruit DHT sensor library 1.4.7 與 Adafruit Unified Sensor 1.1.15。macOS 已內建 CP210x 與 CH34x 的驅動,不必另外安裝。Wi‑Fi 帳密放在 secrets.h,這個檔被 .gitignore 排除,不進版本控制;沒有這個檔也能編譯,此時進入離線模式。

v0.1.0(11/10 晚間):每 5 秒讀一次 DHT11,讀取失敗時重試,取最近 6 筆做滑動平均。溫度超過門檻或連續讀取失敗時,在序列埠印出警示。另提供 /metrics 與 /json。這時還沒有板子,只做了編譯。

需求轉折(11/10 21:43),需求方原話:

「韌體變成持續量測,但是有 API 接口,讓我自己開發服務去巡數據,巡到異常我再處理。」

v0.2.0 據此重寫:

端點用途
GET /api/v1/latest最新一筆(成功或失敗)+最後一次成功的讀值
GET /api/v1/history?since=<seq>&limit=N增量拉取。回應附 oldest_seq、latest_seq、has_more、gap、missed、next_since;limit 預設 100、上限 720,超出範圍回 400
GET /api/v1/healthuptime、重開原因、NTP、Wi‑Fi 訊號、heap、讀取計數、最後錯誤、緩衝狀態、取樣間隔、韌體版本
GET /metricsPrometheus 文字格式,只有原始值與計數;告警規則寫在 Prometheus 端
GET /說明頁
# GET /api/v1/latest(API 文件中的範例,由主機端模擬器產生)
{
  "api_version": 1, "boot_id": "a21982ee",
  "seq": 5, "uptime_ms": 27000, "epoch": 1794318632,
  "temp_c": null, "humidity_pct": null, "status": "read_error",
  "time_utc": "2026-11-10T13:50:32Z",
  "last_ok": { "seq": 4, "temp_c": 25.4, "humidity_pct": 49.0, "status": "ok", ... }
}

先在主機上驗證:核心邏輯(環形緩衝、history 的視窗與缺口判斷、參數檢查、JSON 輸出)抽成一份與平台無關的標頭檔,韌體和 Mac 上的測試共用同一份程式。測試用 clang 加 AddressSanitizer 與 UBSan 編譯,結果單元測試 158 項、假裝置情境測試 47 項全數通過。為了確認測試真的抓得到錯,也刻意植入 4 種錯誤(例如缺口計算差一、has_more 恆為 false),每一種都會被測出來。

v0.3.0(11/11 凌晨):secrets.h 最多可設 4 組 Wi‑Fi,支援一般密碼(WPA2/WPA3‑Personal)和企業帳號(WPA2‑Enterprise,PEAP/TTLS)。開機時用非同步掃描,取樣不受影響,自動連到訊號最強的已設定網路;某組連不上就扣分,改試下一組。實機測過第 1 組密碼錯誤的情況:連線失敗後,韌體自動改連第 2 組。主機端測試增加到 181+47 項,Flash 用量 83%、RAM 20%。

實機驗收:板子上的晶片是 ESP32‑D0WD‑V3、4MB flash,有自動重置,燒錄時不用按 BOOT。API 驗收 30/30 通過:取樣間隔 4,998–5,002 ms,60 秒內 seq 增加 12,heap 最低剩 189,444 B;用 RTS 重開機後 boot_id 改變,巡檢範例程式也偵測到重開機。另外發現 mDNS 名稱在 Mac 上第一次解析要約 5 秒,因此建議巡檢服務改用 DHCP 保留的固定位址。

安全邊界API 沒有登入機制,也只走 HTTP,所以只適合放在受信任的區域網路:不做 port forwarding、不對外開放 80 埠,需要跨網段時走 VPN。之後可以加 Bearer token,CORS preflight 已預留 Authorization 標頭。

07即時監看頁:一個 HTML 檔,直接打 API

不需要後端,也不依賴任何外部資源;用瀏覽器打開檔案,輸入裝置位址就能看。

監看頁是單一 HTML 檔,AI 協助實作。它直接呼叫裝置的 API,因為裝置回應都帶 Access-Control-Allow-Origin: *,瀏覽器可以跨來源讀取。運作方式:

驗證:對實機用 Playwright 跑 Chromium 與 WebKit,兩者直接開本機檔案 28/28 通過;對假裝置模擬讀取失敗、重開機、NTP 未同步,7/7 通過;淺色、深色與手機版都截圖檢查過。

th-monitor 即時監看頁:溫度 24.8°C、相對濕度 55.0%、感測器正常、成功 923 失敗 0、最新樣本 #923 07:18:42,韌體 0.3.0,每 5 秒取樣
圖 11 裝殼上線後的監看頁(11/11 07:18)。韌體 0.3.0、boot_id 28b24fe1、每 5 秒取樣;24.8 °C、55.0 %RH,感測正常,開機以來成功 923/失敗 0,最新樣本 #923(07:18:42)。上方是 10 分鐘溫度與濕度趨勢。

08列印、接線、組裝、上線:閉環證據

實體的部分都由需求方本人完成;每一步都有照片或 log 可以對照。

第一次燒錄就失敗:兩條白線插反

11/10 22:49 第一次燒錄 v0.2.0(離線模式)。韌體正常開機,每 5.00 秒取樣、seq 也照常遞增,但每一筆都是 read_error。AI 另寫了一支診斷程式,只讀取各腳位電位並記錄 GPIO4 的回應波形,結果發現:

由此判斷問題在模組那端的接線。請需求方拍照後確認:板子是 30 腳 DOIT(USB‑C、CP2102),模組絲印是 + out −,紫線接 3V3→+ 沒錯;兩條白線在模組端插反了(D4 接到 −、GND 接到 out)。23:04 對調後,診斷程式讀到 83 個邊緣、checksum 正確、26.7 °C/64 %RH;燒回主程式後,連續 8 筆都是 ok。之後文件補上「同色線容易插反,請對照絲印或換不同顏色的線」。

印好的黑色殼身內:ESP32 開發板在 USB 端,DHT11 在格柵端,紫白杜邦線穿過隔牆
圖 12 組裝中。30 腳 ESP32(USB‑C)卡進 ESP32 艙,天線朝隔牆;紫、白線穿過隔牆接到 DHT11 模組,模組網格面朝上。
組裝完成闔上滑蓋的黑色殼體,側面與蓋上有通風格柵,兩端有安裝耳
圖 13 闔蓋上線。滑蓋扣上,側牆、蓋上都有通風格柵,安裝耳有沉頭孔與束帶槽。這張照片與圖 11 的監看畫面是同一時段拍的。背景螢幕已模糊處理。

把時間串起來:11/11 清晨殼體印完(圖 10),約 06:00 裝好板子與感測器(圖 12)、上電;07:18 闔蓋的外觀(圖 13)與監看頁(圖 11)顯示這次開機已連續取樣 923 筆(約 77 分鐘),失敗 0 筆。從需求到上線形成閉環。

09技術與職能分工

一個人加幾個各管一段的 AI 協作者;每段都有書面任務單,明定範圍與驗收標準。

職能這次做的事
需求方(本人)提出機房需求;到材料行買料;做決定,例如只用 PLA、改用實際買到的硬體、裝置只量測;自己建 Wi‑Fi 帳密檔;列印、接線、組裝、拍照回報;發現接線問題後重接。
總管:派工與驗收把需求拆成任務單,寫明可寫入的目錄、禁止事項(例如板子還沒到不准燒錄、不准用 sudo、−20 offset 不准補償、帳密不准進 repo),以及完成條件;收報告、核對證據,上架前把關去識別。
採購列出第一版 BOM(C3+SHT31);硬體改成實際買到的 ESP32+DHT11 後,依實物與門市標價照片更新 BOM;11/11(三)以網路同等規格商品的現價完成詢價(台灣物聯科技、酷澎市集等),並排除規格對不上的低價選項;PLA 依需求方指定以 NT$300/kg 估算。
機構設計與列印性審查訂出外殼規格(PLA、免支撐、0.28 mm 層高量化、熱床禁區、要沿用的滑蓋特徵);切片並逐層檢查 G-code;在雲端 CAD 平台核對外框與體積;提供本篇的 30 腳版算繪圖與 GLB 模型。
CAD 建模(AI 協助)查尺寸並標示來源可信度;OpenSCAD 參數化建模、輸出兩種板型的 STL;寫 15 項自動檢查與反向測試;產出預覽圖、組裝與列印說明。
接線圖/韌體(AI 協助)用元件庫產生接線圖;安裝編譯環境;寫韌體 v0.1→v0.3、主機端測試與巡檢範例;燒錄、寫診斷程式找出接線錯誤、做實機驗收。
監看頁(AI 協助)單檔 dashboard;用 Playwright 對實機與假裝置驗證。

幾個讓協作順利的做法:

10限制與後續