SPIKEプライムのBluetooth通信はSPPでJSON-RPC風のデータをやり取りしている

SPIKEプライムのハブとホストがBluetooth上でどのようなやり取りをしているか調べます。Macの場合はPacketLoggerを使うのが簡単です。下記URLからダウンロードできるAdditional Toolsの中に含まれています。要Xcode。

SPIKEプライムとmacOS版アプリをBluetooth接続した状態でPacketLoggerを起動すると、下記のように通信内容をすべて見ることができます。Device Filterで「LEGO Hub@」で始まるデバイスだけを表示するようにすると見やすいです。

画像1

大量のRFCOMM Receiveの合間にたまにRFCOMM Sendが出てきています。RFCOMMというのはBluetooth上でRS-232Cのシリアルポートをエミュレーションするためのプロトコルスタックです。

Bluetooth Explorerという別のアプリでデバイスの情報を見てみます。MINDSTORMS NXTやEV3がそうであったようにSPP(Serial Port Profile)で通信しているようです。

画像5

RFCOMM Receiveのログの一つを展開してみます。ハブから送られてくるデータはJSONでした。JSON-RPC 1.0のようなフォーマットです。

画像2

これはダッシュボードで見られるハブ内のセンサーや各ポートの情報を一括で送信するコマンドのようです。

画像3

今度はRFCOMM Sendの中身をを見てみます。こちらもRFCOMM Receiveと同じフォーマットです。アプリから何か命令を出す時に送られるようです。

画像4

テキストとして抜き出すとこんな感じ。このコマンドはストリーミングモードに切り替えた時に送られます。

{"m":"program_modechange","p":{"mode":"play"}}

ダウンロードモードへの切り替えは同じコマンドのパラメータ違いでした。

{"m":"program_modechange","p":{"mode":"download"}}

ストリーミングモード中はモーターの制御やLEDの表示など、各命令ごとにコマンドを送っているようでした。拙作Boost Remoteのようなリモコンアプリも作れそうですね。

ただ、これはあれですね、Bluetooth対応のレゴ製品の通信内容解析を趣味としている僕には、わかりやすすぎて正直物足りないです…。

いいなと思ったら応援しよう!