2025年1月28日
023-1.SPIKEプライム Bluetooth入門-第4回「センサーを入力する」
この連載ではBluetooth Low Energy(ブルートゥース・ロー・エナジー。以下、Bluetooth LE)という機能を使って、「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」のラージハブと通信する方法について紹介します。この技術を応用すると、パソコンからラージハブにプログラムを送ったり、パソコンでセンサーの測定値を受け取ったり、いろいろなことができるようになります。なお、この記事ではWindows10以上のパソコンを推奨しています。(文/松原拓也)
◆ 用意するもの
Bluetoothでモーターを動かすにはどうしたら良いのでしょうか。 公式資料の「SPIKE Prime protocol」を確認してみましょう。
https://lego.github.io/spike-prime-docs/#
これによると、モーターを直接動かすためのメッセージが見当たりません(レゴ マインドストームEV3にはモーターを直接動かすためのダイレクトコマンドがあったのですが、、、)。
ここで技術的な問題にぶつかってしまいます。
そこで、苦肉の策ですが、モーター制御用のプログラムをラージハブに転送してから実行することにします。具体的には次の5種類のメッセージを送信します。
(1)「InfoRequest」メッセージを送信して、チャンクの最大サイズを取得する。
(2)「ClearSlotRequest」メッセージを送信して、スロットを消去する。
(3)「StartFileUploadRequest」メッセージを送信して、モーター制御のプログラムの転送を開始する。
(4)「TransferChunkRequest」メッセージを送信して、モーター制御のプログラムを転送する。
(5)「ProgramFlowRequest」メッセージを送信して、モーター制御のプログラムを実行する。
◆ サンプルプログラムを改造する
公式資料「LEGO Education SPIKE Prime protocol documentation」に付いてくるサンプルプログラム(examples/python/~)を改造します。やることが多いので、要点だけを説明します。
まず、次のWebページからソースファイル「app.py」「cobs.py」「crc.py」「messages.py」を入手します。
https://github.com/LEGO/spike-prime-docs/tree/main/examples/python
Thonnyを起動して、「app.py」を修正します。画面はキーの入力とプログラムのデータ作成を行うためのコードです。
キー入力には「input」関数を使います。動かしたいモーターのポートと角度を変数に格納します。
続いて、ラージハブで実行するプログラムのデータを作成します。サンプルのプログラムは「Hello World」という文字を表示していましたが、これをモーター制御に書き換えます。
「code」という文字列型の変数にPythonのコードを格納します。Thonnyでは「¥(円)」は「\(バックスラッシュ)」として表示します。「\n」で改行コードという意味になります。そして、「~.encode」関数を使って、プログラムをbytes型に変換して、「EXAMPLE_PROGRAM」という変数に格納します。
◆ プログラムの実行
今回はモーターを回すだけで、センターの入力を行いませんでした。モーターを回すため、キー入力を待たないといけないのですが、センサー入力のメッセージ(DeviceNotification)はいつレスポンスが到着するのかわからず、同時に処理を行うことが難しかったためです。次回にはこの問題をどうにか解決して、センサー入力とモーター制御を同時に行う方法を紹介したいと思います。
今回作成したプログラム
当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。