2026年8月24日 星期一

[水井村USR] 從AP/STA衝突走到穩定上線:HUB 8735 Ultra故事機的網路與時間校正實戰

水井三寶故事機|V1.0-09h

從AP/STA衝突走到穩定上線:HUB 8735 Ultra故事機的網路與時間校正實戰

這次測試不是單純把Wi-Fi連上,而是一步步找出RTL8735B在AP+STA共存時的限制,最後確立「STA為主、AP為故障備援」的穩定架構。實測結果顯示,故事機能透過分享器取得IP、自動完成NTP校時,手機控制頁、管理後台、播放統計與實體按鈕皆能正常運作。

一、這一版完成了什麼?

  • 以STA模式連接既有Wi-Fi,IP由分享器DHCP自動分配。
  • STA連線成功後自動執行NTP,不需由手機按鈕觸發。
  • NTP失敗時自動嘗試HTTP Date;手機時間只作最後備援。
  • STA連線、上網或校時失敗時,才啟動192.168.4.1備援AP設定入口。
  • STA與AP互斥,不再使用不穩定的Concurrent Mode。
  • 首頁可播放五組內容、停止播放、調整音量並查看即時狀態。
  • 管理後台可查看時間來源、STA狀態、統計、最近事件及下載CSV。
  • 保留JQ6500非阻塞播放、中途切歌、停止及提示音寬容Watchdog。

二、最終網路架構:STA為主,AP為輔

開機讀取Flash
連接STA
DHCP取得IP
自動NTP/HTTP校時
STA Web服務

若沒有STA設定、Wi-Fi連線逾時、連線中斷,或NTP與HTTP都無法驗證外網,系統才切換到:

關閉STA
啟動備援AP
SSID:Shuijing-Story
192.168.4.1
重新設定Wi-Fi
設計原則:正常展場使用STA,讓手機與故事機同在既有區域網路;只有網路故障時才開AP。如此可避開RTL8735B Concurrent Mode造成的socket、路由及UDP不穩定問題。

三、為什麼不再同時開啟AP與STA?

早期版本曾讓AP與STA同時運作。手機剛連上192.168.4.1時,Web短暫正常;但STA連上分享器後,即使把預設路由切回AP,Web仍然失效。這表示問題不只在IP路由,而是STA加入時可能重建底層網路介面,使原本的TCP監聽socket失效。

另一個現象是Concurrent Mode執行NTP UDP請求時,曾直接重新開機。反覆修正路由並不能真正解決底層模式切換問題,因此最後不再勉強共存,而是採用互斥模式。

架構測試結果決策
AP固定192.168.1.1+STAAP與分享器Gateway同網段,路由衝突淘汰
AP固定192.168.4.1+STA ConcurrentSTA加入後Web只能短暫使用,NTP亦可能不穩淘汰
STA主要+AP故障備援STA Web、NTP、播放與統計均正常採用

四、NTP自動校時測試成功

RTL8735B STA取得IP並成功完成NTP校時的序列監控畫面
STA取得192.168.1.122,NTP自動校時成功,系統進入STA online service ready。
[STA] IP: 192.168.1.122
[STA] Gateway: 192.168.1.1
[TIME] STA connected; automatic NTP queued
[NTP] Attempting UDP time sync
[TIME] Synced by NTP | 2026-08-24 21:02:08
[MODE] STA online service ready

這段紀錄證明NTP不是由手機按鈕決定,而是STA取得DHCP位址後由狀態機自動排程。分享器IP仍維持原設定,故事機不會要求使用者修改Gateway。

五、手機故事控制首頁

手機與故事機連接同一部分享器後,以序列監控器顯示的STA IP進入首頁。本次測試網址為http://192.168.1.122/。這個IP由DHCP分配,實際部署時可能不同。

六、管理後台:從播放控制走向可維護系統

後台不只是遠端按鈕,而是展場維運工具:可以確認現在是否CONNECTED、時間是否來自NTP、RSSI是否足夠、各故事被播放幾次,以及播放器是否曾進行自動復原。

七、後台畫面的JavaScript除錯經驗

V1.0-09h初版曾出現:

null is not an object
(evaluating $('channel').textContent=s.staChannel||1)

原因是新版不再要求AP與STA同頻道,因此畫面移除了「頻道」欄位,但JavaScript仍更新channel元素。API其實已正常回傳,卻因前端找不到DOM元素而中斷。

修正方式:保留隱藏的相容欄位,讓舊JavaScript仍可安全更新;使用者不必再設定頻道。這提醒我們:後端欄位、HTML元素與JavaScript選擇器必須同步修改。

八、JQ6500播放與Watchdog經驗

JQ6500的BUSY腳位實測定義為:

BUSY狀態
LOW(0)待機
HIGH(1)播放中

故事曲目001~005採嚴格Watchdog;若沒有進入播放狀態,程式會復原播放器。但006~009屬短提示音,部分JQ6500不一定可靠回報BUSY,因此採「寬容Watchdog」:提示音未回報BUSY時只推進狀態,不再重複Pause、Reset與播放008,以免提示音造成系統鎖定。

檔案內容用途
001.mp3白馬故事故事
002.mp3烏龜故事故事
003.mp3姻緣花故事故事
004.mp3水井三寶總故事故事
005.mp3創作者資訊故事
006.mp3開機提示系統提示
007.mp3準備完成系統提示
008.mp3錯誤提示系統提示
009.mp3停止提示系統提示

九、主要接線

HUB 8735 Ultra連接裝置功能
GPIO8/Serial2 TXJQ6500 RX播放命令
GPIO15/Serial2 RXJQ6500 TX播放器回傳
GPIO4JQ6500 BUSY播放狀態
GPIO10白馬按鈕→GND001.mp3
GPIO11烏龜按鈕→GND002.mp3
GPIO12姻緣花按鈕→GND003.mp3
GPIO20停止按鈕→GND中斷播放
GPIO7音量+→GND增加音量
GPIO6音量-→GND降低音量
供電經驗:PC USB供電曾造成反覆重置與重播開機提示;改用穩定、合格的市電轉低壓電源後,系統才真正穩定。市電不可直接接入開發板。

十、測試結論

  1. 故事機成功連接STA並取得192.168.1.122
  2. NTP由STA連線後自動啟動並校時成功。
  3. 手機控制首頁可正常播放、停止、切歌及調整音量。
  4. 管理後台可正確顯示CONNECTED、NTP、RSSI、統計及事件。
  5. 實體按鈕與Web操作皆維持非阻塞。
  6. STA與AP互斥後,不再發生Concurrent Mode導致的Web短暫可用問題。

這次最寶貴的經驗,不是找到一個能編譯的Wi-Fi函式,而是從真實紀錄判斷:能連線不代表架構穩定;展場系統應優先選擇可預測、可復原、可維護的模式。

測試平台:HUB 8735 Ultra(RTL8735B)+JQ6500;測試日期:2026年8月24日。

沒有留言:

張貼留言