長按進入AP+自動重啟+網路診斷:展場維護版實測成功
這一版讓 HUB 8735 Ultra 故事機即使沒有電腦、沒有 Arduino IDE,也能透過一顆實體停止按鈕完成網路救援。短按用來停止播放;長按5秒進入AP設定;長按10秒則清除舊Wi-Fi、自動重新啟動並開放備援設定入口。
一、為什麼需要V1.0-10?
故事機進入展場、社區或教學現場後,最大的維護問題往往不是故事能不能播放,而是現場Wi-Fi環境改變時,設備要如何重新設定。如果每次都要接上電腦、重新編譯並燒錄程式,維護成本會非常高。
因此,V1.0-10將原本的GPIO20停止按鈕擴充成「維護入口」,保留日常操作,同時提供不需電腦的網路救援功能。
設計原則
- STA為主要連線:平時連接現場分享器並由DHCP取得IP。
- AP為故障備援:只有STA設定不存在、連線失敗或使用者主動要求時才啟動。
- 按鈕優先:Web、網路校時與播放程序都不能阻塞實體按鈕掃描。
- 可現場復原:不連電腦也能清除舊Wi-Fi並重新設定。
二、GPIO20一顆按鈕,三種操作
| 操作方式 | 系統動作 | 使用情境 |
|---|---|---|
| 短按GPIO20 | 立即停止目前播放 | 一般使用 |
| 長按5~9秒後放開 | 切換至AP設定模式 | 臨時開啟維護入口,但保留原STA資料 |
| 長按10秒以上後放開 | 清除STA的SSID、密碼與頻道,寫入Flash後自動重啟 | 更換分享器、密碼錯誤或完全無法連線 |
三、這次除錯最重要的發現
第一次測試時,按住停止按鈕只看到:
[BUTTON] Pressed GPIO20 [STOP] Ignored: already idle
當時容易懷疑GPIO20接線、按鈕彈跳或長按計時程式有問題。但進一步檢查開機標題後,發現設備實際執行的仍是:
HUB 8735 Ultra + JQ6500 Story Player V1.0-09h STA Primary + AP Fallback Configuration Portal
也就是說,硬體沒有故障,真正原因是板子仍在執行舊版韌體。重新燒錄V1.0-10後,開機標題正確顯示:
HUB 8735 Ultra + JQ6500 Story Player V1.0-10 Long-Press AP + Auto Restart + Network Diagnostics
四、如何確認長按真的被持續掃描?
管理後台開啟測試模式後,序列監控會定期顯示六顆按鈕的原始電位:
[BUTTON RAW] G10=1 G11=1 G12=1 G20=1 G7=1 G6=1
GPIO按鈕採用上拉輸入並接到GND,因此:
| 數值 | 按鈕狀態 |
|---|---|
| 1 | 未按下 |
| 0 | 已按下 |
實測長按期間,GPIO20持續保持為0:
[BUTTON RAW] G10=1 G11=1 G12=1 G20=0 G7=1 G6=1 [BUTTON] Stop held 5s: release to enter AP setup mode [BUTTON RAW] G10=1 G11=1 G12=1 G20=0 G7=1 G6=1 [BUTTON] Stop held 10s: release to clear Wi-Fi and restart
這證明按鈕、接線、上拉邏輯與非阻塞掃描均正常,主迴圈沒有因STA、NTP、Web或音訊狀態機而停止更新。
五、10秒清除Wi-Fi的完整實測流程
持續按住10秒
清除STA資料並存入Flash
開放AP備援入口
放開按鈕後,系統依序完成:
[MAINTENANCE] Clearing STA credentials [FLASH] Batch saved: STA credentials cleared [SYSTEM] Restart scheduled: STA credentials cleared [SYSTEM] Restarting: STA credentials cleared
重新啟動後,Flash資料區仍可正常讀取音量、開機次數與統計資料,但STA憑證已被清除:
[FLASH] Volume = 16 [FLASH] Boot count = 48 [STA CONFIG] Not configured [STA CONFIG] Missing; AP fallback queued
這也驗證了程式並非清空整個Flash,而是只清除指定的STA網路設定。
六、重新啟動後自動進入AP備援
系統完成開機語音006、準備完成語音007及JQ6500狀態判定後,自動啟動純AP模式:
[AP] Starting pure fallback AP mode [AP NET] IP: 192.168.4.1 [AP NET] DHCP: 192.168.4.x [AP NET] Configuration OK [AP] SSID: Shuijing-Story [WEB] http://192.168.4.1 [ADMIN] http://192.168.4.1/admin [MODE] AP fallback configuration portal
手機維護資訊
| AP名稱 | Shuijing-Story |
|---|---|
| AP密碼 | shuijing8735 |
| 故事控制首頁 | http://192.168.4.1/ |
| 管理後台 | http://192.168.4.1/admin |
| 管理PIN | 8735 |
七、展場人員的標準維護程序
- 確認故事機已正常供電,避免使用供電不穩定的PC USB孔。
- 按住停止按鈕至少10秒,看到燈號快速同步閃爍後再放開。
- 等待設備自動重新啟動。
- 手機連上 Shuijing-Story。
- 在瀏覽器輸入 http://192.168.4.1/admin。
- 輸入管理PIN,重新設定現場分享器的SSID、密碼與頻道。
- 儲存後等待設備自動重啟,再由分享器查詢故事機取得的新STA IP。
八、V1.0-10完成的展場可靠性
| 項目 | 實測結果 |
|---|---|
| 實體故事按鈕 | 正常 |
| Web故事控制 | 正常 |
| GPIO20短按停止 | 正常 |
| GPIO20長按5秒 | 可辨識AP維護動作 |
| GPIO20長按10秒 | 可清除STA設定 |
| Flash延遲保存 | 正常,其他統計資料保留 |
| 自動重新啟動 | 正常 |
| 純AP備援 | 正常,固定為192.168.4.1 |
| STA主要連線與NTP | 有憑證時自動連線與校時 |
九、這次測試留下的寶貴經驗
- 先看韌體版本,再查硬體:序列監控的版本標題是除錯起點。
- 原始GPIO紀錄很重要:
[BUTTON RAW]能區分接線問題與程式狀態問題。 - 長按功能要在放開時決策:才能同時支援5秒與10秒兩種命令。
- 網路程序必須非阻塞:即使STA連線、NTP校時或無手機連入,按鈕仍應持續掃描。
- STA與AP不要勉強同時運作:RTL8735B在本案採「STA主要、AP故障備援」比並行模式穩定。
- Flash只清必要欄位:清除網路憑證時仍保留音量、開機次數及故事統計。
- 穩定供電是系統的一部分:改用可靠市電電源後,可避免USB供電不足造成反覆重置與開機語音重播。
測試平台:HUB 8735 Ultra(RTL8735B)+JQ6500|韌體版本:V1.0-10|測試日期:2026年8月24日
沒有留言:
張貼留言