介紹 websockify-msp-js 如何將 Betaflight MSP 橋接至 WebSocket,讓 Betaflight Configurator、Node.js、Python 與 ROS 2 都能透過網路存取飛行控制器。
大多數情況下,Betaflight Configurator 都是透過 USB 與飛行控制器通訊。然而,當飛行控制器部署於 Raspberry Pi Companion Computer、機器人平台,或位於無法直接連接 USB 的環境時,遠端管理與除錯就變得不那麼容易。
為了解決這個問題,我們開發了 websockify-msp-js。它是一個輕量級的 MSP Proxy,可將 Betaflight 的 MultiWii Serial Protocol (MSP) 橋接到 WebSocket,讓既有的 Betaflight Configurator 與各種 WebSocket 應用程式都能透過網路直接與飛行控制器通訊。
MSP 是 Betaflight 最核心的通訊協議之一,負責飛行控制器與上位機之間的資料交換。傳統上,MSP 主要透過 USB 或 UART 傳輸,因此大多數工具都假設飛行控制器直接連接在本機。
Betaflight 社群曾利用 websockify 將 TCP 橋接到 WebSocket,也曾出現 Node.js 版本 websockify-js。然而,這些專案已多年未更新,因此我們重新實作了一個專為 MSP 設計的 Proxy,提供更容易整合與維護的方案。
[Betaflight Configurator] <-> [WebSocket] <-> [RPi 上的 MSP Proxy] <-> [UART/USB] <-> [TFC1]
MSP Proxy 僅負責橋接不同傳輸層,不修改任何 MSP 封包,因此對 Betaflight Configurator 而言,它仍然是一個標準的 MSP Serial 連線。
GitHub Repository:
https://github.com/t2t-io/websockify-msp-js
$ git clone https://github.com/t2t-io/websockify-msp-js.git
$ cd websockify-msp-js
$ npm install
$ node index.js -s /dev/ttyAMA0 -c msp
$ node index.js -s "/dev/ttyUSB0?baudrate=230400" -c msp
使用 Betaflight Configurator 連線至 ws://<RPi_IP>:6761。
Step 1 啟用 Manual Connection Mode。
圖 1:於 Options 啟用 Manual Connection Mode。
Step 2 選擇 Manual Selection,輸入 Raspberry Pi IP 與 Port 6761。
圖 2:透過 WebSocket 連線至 MSP Proxy。
成功連線後,Configurator 的使用方式與 USB 幾乎沒有差異。
圖 3:MSP Proxy Console,可即時觀察與過濾 MSP 封包。
# Inclusion Filter
$ node index.js -s /dev/ttyAMA0 -c msp -f "MSP_STATUS,MSP_ATTITUDE,MSP_ANALOG"
# Exclusion Filter
$ node index.js -s /dev/ttyAMA0 -c msp -f "@MSP_ATTITUDE,@MSP_RAW_IMU"
啟用 Web UI:
$ node index.js -s /dev/ttyAMA0 -c msp -w
圖 4:透過 Web UI 即時檢視 MSP 封包,並動態調整過濾規則。
除了 Betaflight Configurator,websockify-msp-js 也適合:
websockify-msp-js 將 MSP 從傳統的 Serial Transport 延伸到 WebSocket,而不需要修改任何既有的 MSP 工具。
對我們而言,它不只是遠端設定工具,更是 Raspberry Pi Companion Computer 的基礎通訊元件,可作為自主飛行、ROS 2、雲端控制與自動化測試的共同基礎。