2021/12/15 よりサイトリニューアルしました

Raspberry Piステアリング付ラジコンをM5Stack core2からBLEで操作

BLE ラズパイラジコン

 

前回、ESP32を載せたステアリング付ラジコンをM5stackからUDPで操作する内容についてまとめました。↓

 

今回は、通信にBLEを使ってやってみましたので、その辺りについてまとめようかと思います。

初めは前回と同じ構成、ESP32とM5Stack core2を使ってmicropythonでやってみたのですが、いかんせんmicropythonのBLEライブラリの「ubluetooth」がセントラル側のESP32でうまく機能しなかった(スキャンは出来るがコネクトできない。。)ため、なくなくセントラル側をRaspberryPiに変更しました。bluepyが使えるので、こちらではうまくいきました。

pythonでBLE通信をやってみたい、と思っている方の参考になれば幸いです。

 

 

概要

使ったもの

・Raspberry Pi ZERO W(セントラル)

・M5stack core2(ペリフェラル)

・タミヤBUGGY CAR CHASSIS SET

・サーボモーター

・バッテリ

・ブレッドボード、ジャンピングワイヤ

・ステアリング固定治具

※ステアリング固定治具など、冒頭の前回の記事にて詳細をまとめています。

 

構成

M5Stack ⇒ BLE ⇒ Raspberry Pi ⇒モーター駆動

M5Stack core2のスライダーの値をBLEでRaspberry Piに転送、Raspberry Piで随時値を受信させ、値に応じてモーターを制御。

Raspberry Piはpython、M5Stackはmicropythonでプログラムを作成します。

 

 

プログラム

M5Stack core2(micropyton)

BLE通信の基本は、ペリフェラル側がアドバタイズしてセントラルに存在を知らせて、セントラルがペリフェラルにコネクトし、以後はサービスUUIDを介して情報のやり取りを行います。

今回の場合ですと、M5StackでUUIDを定義し、メインループで定義したUUIDのハンドルを指定し、そこにスライダーの値を随時格納しています。この辺りのBLE通信に関する詳(python)も過去記事でまとめていますので、是非参考にしてください。↓

 

あとはセントラル側で、このUUIDの値をreadすればOKです。

なお、アドバタイズはループに入ると止まるようになっています。

 

Raspberry Pi(python)

ペリフェラルのUUIDとハンドルは下記プログラムで調べることができます。↓

プログラム名 MACアドレス を実行すればOKです。

MACアドレスについては、Raspberry Piからbluetoothctlでscan on して確認するか、下記プログラムをペリフェラル側で実行することでも確認する事ができます。

 

 

BLEでラジコン操作

こんな感じで操作できました。

https://twitter.com/ketunorobio/status/1507907202786373632

 

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です