從 ESP32 小專案開始:原來我也能做出自己想用的裝置

Updated: at 03:20 AM

做這個 ESP32 專案,最讓我興奮的是:我真的做出了一個自己用得上的小工具。

我沒有設計 PCB 的經驗,C++ 也已經好多年沒什麼寫了。以前想到嵌入式系統,總覺得有一大段距離要補,這類點子很容易就被放進「以後有空再研究」的清單。這次有 coding agent 一起做,事情開始變得不同。

我用的是現成的 Freenove FNK0104B 開發板,以 ESP32-S3 為核心,配有 2.8 吋觸控螢幕、Wi-Fi、Bluetooth LE,以及板載麥克風和音訊 codec。專案指南整理了它的能力和相關實驗。

這並不代表我已經學會從零設計電路板。硬體是現成的,但把它變成想要的裝置,仍然需要跨過韌體、介面和系統整合的門檻。AI 讓我有辦法一邊動手,一邊補上這些理解。

先做出有用途的東西,學習就有了方向

這個專案其中一個方向是 Codex monitor:放在桌上的小型儀表板,用來呈現用量與 agent 活動,也包含語音控制和訊息傳送的路徑。

原本都在電腦視窗裡的工作流程,有了另一種介面。我可以開始思考,哪些資訊適合留在桌上的小螢幕,哪些操作適合用觸控或語音完成。

這個裝置背後仍有其他系統配合。Wi-Fi 儀表板透過電腦上的本機 bridge 取得狀態;Wi-Fi 語音訊息則還需要 bridge 和設定好的語音轉文字服務。韌體專案 README說明了各個應用程式和設定方式。釐清哪些工作由開發板負責、哪些交給電腦或服務,也正是我想學的系統觀念。

它不需要成為人人都會買的產品,才值得投入。只要能改善我自己的工作方式,就已經有足夠的理由繼續做。學習也因此有了很具體的方向。

我學整個系統怎麼運作,AI 幫我往實作走

這次和 AI 合作,很有意思的一點是,我可以在不同層次之間來回。

我先從整體行為理解嵌入式系統:輸入怎麼進到韌體、畫面如何回應、資料存在哪裡、開發板又怎麼和電腦溝通。再往下,才是實現這些行為的程式碼,包括那些我早已生疏的 C++。

Coding agent 可以協助把我描述的行為寫成程式,也能解釋各個部分如何串起來。我因此能先把注意力放在系統的關係上,碰到某個細節時,再往下研究。

這讓學習的順序變得更有彈性。我不用先把 C++ 全部複習一遍,才有資格開始。可以先選一個小功能,和 AI 一起看實作,再學懂這個功能牽涉的觀念。

當然,有了程式碼,不代表我就理解了它。對我來說,真正有幫助的是反覆追問:這段程式在系統裡做什麼?它應該帶來什麼可觀察的結果?看到結果之後,我又能問出什麼更具體的問題?

實機讓抽象的觀念有了落點

韌體編譯成功是一個進展,但裝置是否照預期運作,還得實際確認。

專案裡把顯示、觸控、網路、音訊等能力拆成小型診斷程式,讓各個部分能先獨立觀察,再組合成完整應用。開發紀錄留下過程中的發現,monitor 驗證紀錄則區分已實作、已經過實機驗證,以及仍待確認的項目。

我喜歡這種學習節奏:先讓一個行為看得見,從結果理解下一個問題,再逐步加上其他功能。裝置出現問題時,也有一個具體現象可以帶回來和 AI 一起研究。

螢幕、觸控事件或音訊訊號,讓原本抽象的解釋有了落點。理解不再只停在「我讀過這個概念」,而是能連到眼前的裝置。

下一個點子,也開始值得認真想了

談 coding agent 時,我們常會想到它能把熟悉的工作做得多快。這次經驗讓我在意另一件事:有些原本不敢開始的專案,現在也可以試了。

我有好奇心,也有自己想解決的需求。缺的是 PCB 設計背景,以及近期的 C++ 實作經驗。有了現成開發板和 AI 協助,這些落差變成可以在專案裡逐步補上的東西,而不再只是把點子擱置的理由。

我把這種感受叫作 opportunity AI:AI 讓我願意嘗試的範圍變大了。它帶來的機會很個人,就是能多做一些自己想用的東西。

現在,我已經開始想,也許可以再找另一個裝置,替自己做更多事情。還沒決定具體要做什麼,但這個念頭已經值得認真看待,因為我知道可以從小地方開始,邊做邊學。

這塊 ESP32 帶給我的,除了桌上的小工具,還有對下一個專案的期待。原來有些以前覺得離自己很遠的事,現在真的有機會動手完成。