1 / 7

🎥 DJI Controller

Garmin Edge 1050 × DJI Osmo Action 5

用 Shimano R8170 Di2 電變按鍵,單鍵控制 DJI 錄影開關

Connect IQ Widget Monkey C BLE GATT Di2 ANT+ SDK 9.1.0

開發日期:2026-05-07  專案路徑:C:\Users\t02786\garmin-dji-controller\

2 / 7

專案目標

Shimano R8170 頂端自訂按鍵(單次按下) ↓ ANT+ Di2 BDS Profile Garmin Edge 1050(DJI Controller Widget) ├─ 攔截 Di2 按鍵事件 ├─ 管理 BLE 連線狀態 └─ 發送 GATT Write 指令 ↓ Bluetooth LE DJI Osmo Action 5 → 錄影開始 / 停止

使用場景

  • 公路自行車騎乘中
  • 不需看螢幕、單手操作
  • 無需手機介入
  • 無額外硬體

Widget 三種狀態

  • ⬤ DISCONNECTED — 搜尋中
  • ⬤ STANDBY — DJI 已連線
  • ⬤ RECORDING — 錄影中
3 / 7

整體進度

完成度:70%

階段狀態說明
程式碼撰寫✅ 完成4 個 .mc 檔全部實作完畢
模擬器驗證✅ 完成Edge 1050 模擬器正常顯示
開發環境✅ 完成VS Code + SDK 9.1.0 就緒
DJI BLE 抓包⏳ 待完成需要 DJI Action 5 在身邊
真機 Di2 測試⏳ 待完成需要 Edge 1050 真機
騎車壓力測試⏳ 待完成30 分鐘穩定性驗證
4 / 7

程式碼結構

garmin-dji-controller/ ├── manifest.xml ← Widget 設定、BLE 權限、LauncherIcon ├── monkey.jungle ← Connect IQ 專案識別 ├── resources/ │ ├── strings/strings.xml ← AppName │ └── drawables/ ← 啟動圖示 └── source/ ├── App.mc ← 進入點,連接所有元件 ├── MainView.mc ← 三狀態 UI ├── Di2Delegate.mc ← R8170 按鍵攔截 └── BleManager.mc ← BLE 掃描/連線/GATT 錄影控制

模擬器截圖:黑底 + 灰色圓點 + "Searching DJI..." ✅

5 / 7

下一步:DJI BLE 抓包(需要 Action 5)

工具準備

  • Android 手機
  • nRF Connect App(Play Store)
  • Wireshark(電腦)
  • USB 傳輸線

目標:找出四個值

DJI_SERVICE_UUID_STR = "??-??-??-??"
DJI_CHAR_UUID_STR = "??-??-??-??"
DJI_START_CMD = [0x??]b
DJI_STOP_CMD = [0x??]b

步驟

  1. 開啟 Android HCI Snoop Log
  2. nRF Connect 連接 Action 5
  3. 截圖所有 GATT Service UUID
  4. DJI Fly App 按錄影/停止
  5. 關閉 HCI Log 儲存
  6. Wireshark 過濾 btatt.opcode==0x52
  7. nRF Connect 手動驗證
6 / 7

下一步:真機測試(需要 Edge 1050)

Di2 KeyCode 確認

部署 Widget 到 Edge 1050 後,按 R8170 頂端鍵,從 VS Code Device Console 找到:

onKey fired: 28 ← 實測後更新此值

更新 Di2Delegate.mc 第 12 行

整合測試清單

  • Widget 顯示 STANDBY(DJI 已連線)
  • 按鍵 → Action 5 開始錄影
  • 再按 → Action 5 停止錄影
  • Action 5 關電 → 自動重連
  • 騎車 30 分鐘穩定性

選用:加入 Fenix 6 支援 — manifest.xml 加入 <iq:product id="fenix6"/>,重複 keyCode 確認步驟

7 / 7

下次對話接續方式

告訴 Claude:

「我在開發 Garmin Edge 1050 的 Connect IQ Widget 來控制 DJI Action 5 錄影,
專案在 C:\Users\t02786\garmin-dji-controller\
進度記錄在 PROGRESS.md
現在要繼續完成 DJI BLE 抓包和真機測試。」

關鍵檔案位置

  • 進度:PROGRESS.md
  • 計畫:docs/superpowers/plans/
  • 設計:docs/superpowers/specs/
  • BLE 常數:source/BleManager.mc 第 8–11 行
  • Di2 keyCode:source/Di2Delegate.mc 第 12 行

待填入的值

  • DJI Service UUID
  • DJI Characteristic UUID
  • START 指令位元組
  • STOP 指令位元組
  • Di2 自訂鍵 keyCode