ラズパイの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されたかは不明です。