ラズパイのBLEでtoioと遊ぶ (2) モータ①

 モータを動かします。単に二つあるモータを動かす機能だけでなく、速度、速度の変化などのパラメータも用意されています。

 最初に、仕様書にある命令を実行します。

RSL10 Bluetooth Low Enaergy Exploerでデータを書き込む

 前回のコラムで利用しましたが、オン・セミコンダクターのRSL10 Bluetooth Low Enaergy Exploerを使って、モータへデータを送ります。このユーティリティは、セントラルの機能の働きをします。scanしてアドバタイズしているペリフェラル見つけると、左の欄にデバイスのlocal Nameとデバイス・アドレスが表示します。それをマウスで選択し、connect、Discovery Servicesをクリックして表示されたのが次の画面です。

 技術資料のモータの最初のサンプル、0x01、0x01、0x01、0x64、0x02、0x02、0x14は、モータ制御、左のモータのID、回転方向「前」、速度指示値「100」、右モータのID、回転方向「後ろ」、速度指示値「20」を打ち込み(バイト列なので、0x01010164020214)、Write without responsをクリックすると、toio本体が同じ場所で回転し始めます。Disconnectで通信を切るまで続きます。

ラズパイのプログラム

 MotorControl は、モータのキャラUUIDのインスタンスです。このキャラUUIDのvalueを読み書きできます。モータは書き込みをサポートしています。

from bluepy import btle

Motor_Characteristic_UUID = "10B20102-5B3B-4571-9508-CF3EFCD7BBAE"
deviceAddr = "c3:f0:86:ef:c7:62"
commandList = [0x01,0x01,0x01,0x64,0x02,0x02,0x14]

peri = btle.Peripheral()
peri.connect(deviceAddr, btle.ADDR_TYPE_RANDOM)
MotorControl = peri.getCharacteristics(uuid=Motor_Characteristic_UUID)[0]
print("send command to motor")
MotorControl.write(bytearray(commandList))
peri.disconnect()
print("done")

 実行した様子です。toio本体が同じ場所で回転し始めます。Ctrl-Dで中断、もしくはStopをクリックすると、disconnectが実行され、モータは動作を止めます。正常にdisconnectされたかは不明です。