2025年1月28日

023-1.SPIKEプライム Bluetooth入門-第5回「センサーの読み取り&モーターを動かす」

この連載ではBluetooth Low Energy(ブルートゥース・ロー・エナジー。以下、Bluetooth LE)という機能を使って、「レゴ エデュケーションSPIKEプライム(以下、SPIKE)」のラージハブと通信する方法について紹介します。この技術を応用すると、パソコンからラージハブにプログラムを送ったり、パソコンでセンサーの測定値を受け取ったり、いろいろなことができるようになります。なお、この記事ではWindows10以上のパソコンを推奨しています。(文/松原拓也)

◆ 用意するもの

前回のプログラムはモーターを制御するだけでしたが、今回はこれにセンターの読み取り機能を追加したいと思います。 センターの読み取りについては、この連載の第3回目で取り上げていて、モーターの制御については第4回目で取り上げていますので、この2つのプログラムを合体させればいいのですが、そう単純にはうまくいきません。 モーターを制御するには、キー入力を待たないといけないのですが、センサー入力のメッセージ(DeviceNotification)のレスポンスが周期的に発生するので、 同時に処理しにくいためです。

ハードウェアを用意します。ラージハブにセンサーとモーターを接続するだけです。センサーは何でも構いませんが、ここではきょりセンサーを接続しました。

公式資料の「SPIKE Prime protocol」を確認します。 https://lego.github.io/spike-prime-docs/#
資料によると、「DeviceNotificationRequest」の2番目の引数(通知の周期)を0にすると、DeviceNotificationを無効にできると書かれています。この機能を使って、キー入力時にはセンサー情報を読み取らないことにします。これで技術的な問題は解決できます。

◆ プログラムを作成する

公式資料「LEGO Education SPIKE Prime protocol documentation」に付いてくるサンプルプログラム(examples/python/~)を改造します。
https://github.com/LEGO/spike-prime-docs/tree/main/examples/python
上記のWebページからソースファイル「app.py」「cobs.py」「crc.py」「messages.py」を入手します。そして、「app.py」「messages.py」を修正します。
2025年1月現在では、まだカラーセンサーが正しく読み取れないバグが残っています。バグの修正方法については、この連載の第2回目の記事で紹介しています。
センサー情報を1回だけ読み取るには図のようにプログラムを作成します。 DeviceNotificationRequestの周期を1秒に設定してから、sleep関数を使って1秒待ちます。その後、DeviceNotificationRequestの周期を0秒に設定して、センサー情報の読み取りを停止させます。

モーターを動かすにはinput関数を使ってキーを入力して、ポートの名前を変数に格納します。この時、 変数をチェックして、A~Fではない場合にはプログラムを停止することにします。
前回はこのチェック機能がなかったので、プログラムを停止するにはCtrl+Cを押すしかありませんでした。

プログラムを実行します。Thonnyで「app.py」を開いた状態でF5キーを押します。実行する前にラージハブの電源を入れ、Bluetoothボタンを長押しして、Bluetoothの接続の待機状態にします。

ラージハブとの接続に成功すると、シェル画面にセンサーとモーターの情報が表示されます。

「Motor」はモーターの情報です。戻り値の4番目は回転センサーの絶対的な角度を示しています。値の単位は度です。
「Distance」はきょりセンサーの情報です。戻り値の3番目はきょりを示しています。値の単位はミリメートルです。

◆ 動作の確認

例として、モーターを90度だけ回してみることにします。 この場合、モーターはポートFに接続していますので、「F[Enter]」「90[Enter]」と入力します。

モーターを90度ずつ回転させると、回転センサーの角度も約90度ずつ増えていきます。絶対的な角度なので、値の範囲は-180~+179度です。
資料によると、 戻り値の7番目は累積した角度のはずなのですが、なぜか戻り値の4番目と値は同じでした。資料のミスなのか、プログラムのミスなのか、原因はわかりません。

プログラムを終了するにはポート名の入力時にEnterキーだけを押します。
ラージハブとの接続が切断されます。

これでBluetooth LEを使ったラージハブとの通信方法についての連載を終ります。今回はPythonを使って通信をしましたが、JavaScriptでも通信することが可能です。パソコンやタブレットやスマートフォンを使って通信できるというメリットを活かして、面白い使い道を見つけてみましょう。
今回作成したプログラム

当ブログの内容は、弊社製品の活用に関する参考情報として提供しております。
記載されている情報は、正確性や動作を保証するものではありません。皆さまの創意工夫やアイデアの一助となれば幸いです。