TicTacToe 是一套面向 IoT 裝置的開源框架,最初運行於 TI Sitara AM335x Linux 系統,後續移植至其他 Linux 平台。設計目標是在不要求終端使用者設定網路的情況下,仍能讓工程師取得遠端裝置狀態與日誌,進行診斷及修復。

不遺失的感測資料上傳

為了在偏遠地區 LTE 等不穩定網路下維持高頻率採樣並完整上傳資料,我設計了以 JSON 為基礎的壓縮格式、裝置端離線快取,以及雲端資料去重與完整性驗證。

壓縮格式將感測資料的 tag 與 value 分離,使用字典編碼把重複文字標籤映射為整數索引。單獨使用時可減少約 40%–50% 資料量;搭配 gzip 後,整體可降低約 70%–85%,同時降低傳輸成本與裝置儲存需求。

部分裝置沒有硬體 RTC,因此我另外設計雙時間戳機制,同時記錄 epoch time 與 system uptime,再由雲端比對及修正,以降低斷線或時鐘不準造成的採樣時間偏差。

零設定遠端診斷

我以 WebSocket 設計遠端診斷通道,裝置只需具備一般 HTTPS 對外連線能力,不需要使用者調整路由器或防火牆,即可把狀態及日誌送往雲端。這項能力最初服務家用 Wi-Fi 場景,後續也延伸至工業 IoT。

相關功能後來拆分為兩個開源專案:rds-agent 負責裝置端資料收集,rds-relay-server 負責雲端接收與轉發。

可復原的 Factory Reset

Linux IoT 裝置可能因意外斷電或更新失敗而無法開機。我採用唯讀 rootfs 與可寫 overlayfs 分離系統核心、使用者資料與設定,再客製化 U-Boot 啟動流程:裝置啟動時檢查 dirty flag;若前次啟動失敗,便清除可寫層並恢復出廠狀態,避免永久磚化。

AM335x 的啟動鏈是 ROM code → SPL → U-Boot → kernel;Raspberry Pi 則是 GPU firmware → bootloader → kernel。為沿用相同復原策略,我在 Raspberry Pi 啟動鏈加入 U-Boot 作為 second-stage bootloader。