SPIKEプライムのハブにTerminal.appからコマンドを送る

macOS版のSPIKE.appからハブにBluetooth接続をすると、以下のようなデバイスファイルが作成されます。"SPIKE" の部分はハブの名前によって変わります。

/dev/tty.LEGOHubSPIKE-SerialPort

Terminal.app から screen コマンドか cu コマンドでこのデバイスファイルを指定すると、ハブにシリアル接続をすることができます。以下はscreenコマンドを使った例です。ボーレートの設定は不要です。

$ screen /dev/tty.LEGOHubSPIKE-SerialPort

接続するとハブの情報が断続的に送られてきて画面が埋め尽くされたりします。ここは設定によって変わるかもしれません。

画像1

そのまま気にせずに、前回の記事で調べた以下のコマンドをコピー&ペーストしてからリターンキーを押します。これでハブがストリーミングモードになるはずです。

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

以下のコマンドを送るとダウンロードモードになります。

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

Ctrl-A Ctrl-\ と押すと接続を切ることができます。以下が接続からコマンド送信、切断までをしている様子です。

ストリーミングモードにすると、各プログラミングブロックをコマンドとして実行することができます。例えばLEDにデフォルトの笑顔を表示するプログラミングブロックは以下のようなコマンドになります。メソッド名が scratch からはじまっているのが面白いですね。

{"i":"YiuR","m":"scratch.display_image","p":{"image":"99099:99099:00000:90009:09990"}}

はおそらくJSON-RPCでいう id のことで、その id を持つ以下のようなレスポンスから、コマンドの実行完了を知ることができます。

{"i":"YiuR","r":"done"}

SPIKE.app が id をどうやって生成しているかはわかりませんが、毎回ランダムな文字列が設定されているように見えます。色々試してみたところ、0文字以上の文字列ならなんでもいいみたいです。

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