樹藝AI故事機開發紀錄V1.0-01:用HUB 8735 Ultra功能鍵控制板載LED
要讓樹藝作品成為一部「會看、會聽、會說、會回應」的AI故事機,第一步不是立刻加入大型語言模型,而是先確認開發板最基本的輸入與輸出功能。本次使用HUB 8735 Ultra,完成「功能鍵控制板載LED」測試,成功驗證按鍵輸入、LED輸出、序列監控與程式燒錄流程。
尚未完成Arduino IDE與HUB 8735 Ultra開發環境設定者,可先閱讀: 《國產Wi-Fi晶片8735 Ultra初體驗》 。
一、為什麼從按鍵與LED開始?
樹藝AI故事機未來預計整合故事按鈕、SD卡音訊、喇叭、燈光、攝影機、語音辨識、RAG知識庫與AI Agent。若一開始就將所有模組接在一起,發生問題時很難判斷究竟是按鍵、電源、音訊、網路還是程式造成。
因此,開發採用逐層驗證方式:
- 先確認開發板可以正常燒錄。
- 確認功能鍵可以被程式讀取。
- 確認板載LED可以被程式控制。
- 確認序列監控能顯示系統狀態。
- 完成後再擴充三個故事按鈕與音訊播放。
二、HUB 8735 Ultra硬體位置
本次使用的主要元件如下:
| 元件 | 功能 |
|---|---|
| HUB 8735 Ultra | 執行按鍵判斷及LED控制程式 |
| 功能鍵/GPIO 12 | 作為使用者輸入 |
| LED_BUILTIN | 顯示按鍵狀態 |
| USB Type-C | 供電、序列通訊及程式燒錄 |
| CH340序列晶片 | 讓Windows以COM埠辨識開發板 |
三、V1.0-01測試目標
本階段預定完成四項驗證:
四、功能鍵控制板載LED程式
本次測試程式如下:
/*
* HUB 8735 Ultra 樹藝AI故事機
* V1.0-01:功能鍵控制板載LED
*/
const int FUNCTION_BUTTON_PIN = 12;
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(FUNCTION_BUTTON_PIN, INPUT_PULLUP);
digitalWrite(LED_BUILTIN, LOW);
Serial.println();
Serial.println("==============================");
Serial.println("HUB 8735 Ultra");
Serial.println("Tree Art AI Story Machine");
Serial.println("V1.0-01 Button Test");
Serial.println("==============================");
Serial.println("請按下功能鍵");
}
void loop() {
bool buttonPressed =
(digitalRead(FUNCTION_BUTTON_PIN) == LOW);
if (buttonPressed) {
digitalWrite(LED_BUILTIN, HIGH);
Serial.println("BUTTON: PRESSED | LED: ON");
} else {
digitalWrite(LED_BUILTIN, LOW);
}
delay(100);
}
五、程式重點說明
1. 功能鍵腳位
const int FUNCTION_BUTTON_PIN = 12;
以GPIO 12作為功能鍵輸入腳位。使用較完整的 FUNCTION_BUTTON_PIN 名稱,也能避免與開發板套件既有的巨集名稱發生衝突。
2. 使用內部上拉電阻
pinMode(FUNCTION_BUTTON_PIN, INPUT_PULLUP);
設定為INPUT_PULLUP後,按鍵未按下時讀到 HIGH,按下並接地時讀到 LOW。
3. 判斷按鍵是否按下
bool buttonPressed =
(digitalRead(FUNCTION_BUTTON_PIN) == LOW);
程式將腳位狀態轉換成容易理解的布林變數。當 buttonPressed 為真,就代表使用者已按下按鍵。
4. 控制板載LED
digitalWrite(LED_BUILTIN, HIGH);
使用開發板套件提供的LED_BUILTIN名稱,可以避免自行指定腳位時產生錯誤,也能提高程式的可讀性。
5. 顯示按鍵事件
Serial.println("BUTTON: PRESSED | LED: ON");
每次偵測到按鍵按下,序列監控會顯示按鍵與LED狀態。未來加入故事播放、Wi-Fi和Agent後,這些除錯訊息會非常重要。
六、HUB 8735 Ultra燒錄操作
HUB 8735 Ultra燒錄前必須手動進入Flash Mode。這項操作與一般可以自動重置的Arduino開發板不同。
七、燒錄成功訊息
本次Arduino IDE顯示的燒錄訊息如下:
Enter Flash Mode!
Start Upload Flash
Uploading................upload success
End Upload Flash
其中upload success代表程式映像檔已成功寫入RTL8735B的Flash記憶體。
八、序列監控開機訊息
燒錄完成並按下RESET後,序列監控首先顯示RTL8735B平台的開機資訊:
== Rtl8735b IoT Platform ==
[Normal mode]
BootFromNORFlash
[Start Boot ROM...]
=== Load PARTBL ===
這些訊息代表:
- RTL8735B已重新啟動。
- 目前進入Normal Mode,而不是Flash Mode。
- 系統由NOR Flash載入程式。
- Boot ROM開始讀取分割表並啟動韌體。
完成底層開機後,才會進入Arduino程式的setup(),並顯示自訂啟動畫面。
==============================
HUB 8735 Ultra
Tree Art AI Story Machine
V1.0-01 Button Test
==============================
請按下功能鍵
按下功能鍵時,序列監控會顯示:
BUTTON: PRESSED | LED: ON
九、本次實測結果
- Arduino IDE顯示 upload success。
- 燒錄完成後按RESET,程式可以正常執行。
- 序列監控可以看到RTL8735B開機及程式啟動畫面。
- 功能鍵可以正確改變板載LED狀態。
| 測試項目 | 結果 | 代表意義 |
|---|---|---|
| CH340/COM10 | 正常 | USB序列通訊正常 |
| Flash Mode | 正常 | 可正常進入燒錄狀態 |
| 程式燒錄 | 成功 | Flash寫入工具正常 |
| RESET啟動 | 正常 | 可由NOR Flash執行新程式 |
| 功能鍵輸入 | 正常 | GPIO數位輸入正常 |
| 板載LED輸出 | 正常 | GPIO數位輸出正常 |
| 序列監控 | 正常 | 可用於後續除錯與事件觀察 |
十、這一步和樹藝AI故事機有什麼關係?
本次雖然只完成一顆按鍵和一顆LED,但已建立故事機最基本的「感知—判斷—回應」架構:
- 感知:功能鍵偵測使用者操作。
- 判斷:RTL8735B判斷按鍵是否被按下。
- 回應:LED改變狀態,序列埠顯示事件。
未來只要將LED回應換成故事播放,就能形成:
再進一步連接Raspberry Pi或雲端AI,就能擴充為:
結語
V1.0-01完成的不只是LED控制,而是確認HUB 8735 Ultra從USB連線、Flash燒錄、系統啟動、GPIO輸入、GPIO輸出到序列監控的完整基礎流程。
採用逐步驗證的方法,可以讓後續的SD卡、MP3播放、燈光、攝影機與AI對話模組,都建立在已確認正常的基礎上。
下一階段將進入V1.0-02:水井三寶故事按鈕,為烏龜、白馬與姻緣花分別建立獨立按鍵事件,並加入按鍵除彈跳與單次觸發機制。
延伸閱讀: 《國產Wi-Fi晶片8735 Ultra初體驗》
沒有留言:
張貼留言