SPIKEプライムのハブにTerminal.appからコマンドを送る
macOS版のSPIKE.appからハブにBluetooth接続をすると、以下のようなデバイスファイルが作成されます。"SPIKE" の部分はハブの名前によって変わります。
/dev/tty.LEGOHubSPIKE-SerialPort
Terminal.app から screen コマンドか cu コマンドでこのデバイスファイルを指定すると、ハブにシリアル接続をすることができます。以下はscreenコマンドを使った例です。ボーレートの設定は不要です。
$ screen /dev/tty.LEGOHubSPIKE-SerialPort
接続するとハブの情報が断続的に送られてきて画面が埋め尽くされたりします。ここは設定によって変わるかもしれません。
そのまま気にせずに、前回の記事で調べた以下のコマンドをコピー&ペーストしてからリターンキーを押します。これでハブがストリーミングモードになるはずです。
{"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"}}
i はおそらくJSON-RPCでいう id のことで、その id を持つ以下のようなレスポンスから、コマンドの実行完了を知ることができます。
{"i":"YiuR","r":"done"}
SPIKE.app が id をどうやって生成しているかはわかりませんが、毎回ランダムな文字列が設定されているように見えます。色々試してみたところ、0文字以上の文字列ならなんでもいいみたいです。