2019年12月10日火曜日

Raspberry PiからBluetooth経由でKitronik :MOVE miniを操作する

Raspberry PiからBluetooth経由でKitronik :MOVE miniを操作するには、以下の手順を実行します。

1. Raspberry Piにbluepyをインストール
bluepyをRaspberry Piにインストールするの手順で、bluepyをインストールします

2. micro:bitでbluetoothサービスを使用するプログラム作成
以下のような感じで入出力端子bluetoothサービスを最初に追加します
また、ペアリングをしなくても利用できるようにします
※6桁キーでペアリングしたい場合は「6桁のキーでmicrobitとRaspberry PiをBluetoothペアリングする」を参照してください。

3. Kitronik :MOVE miniを操作するプログラム
pwm.py
import struct
from bluepy import btle
import time

#struct PwmControlData
#{
# uint8_t     pin;
# uint16_t    value;
# uint32_t    period;
#}
def move(chPWM, angle1, angle2):
  us1 = round(600 + (2400-600) * angle1/180)
  duty1 = (us1 * 1024 * 50 // 1000000)
  us2 = round(600 + (2400-600) * angle2/180)
  duty2 = (us2 * 1024 * 50 // 1000000)
  print("angle1={},us1={},duty1={}".format(angle1,us1,duty1))
  print("angle2={},us2={},duty2={}".format(angle2,us2,duty2))
  data = struct.pack('<BHIBHI', 1, duty1, 20000, 2, duty2, 20000)
  chPWM.write(data)

per = btle.Peripheral("XX:XX:XX:XX:XX:XX", btle.ADDR_TYPE_RANDOM)

svcIOPIN = per.getServiceByUUID("E95D127B-251D-470A-A062-FA1922DFA9A8")
chPWM = svcIOPIN.getCharacteristics("E95DD822-251D-470A-A062-FA1922DFA9A8")[0]

move(chPWM, 80, 100)
time.sleep(1.0)
move(chPWM, 100, 80)
time.sleep(1.0)
move(chPWM, 100, 100)
time.sleep(2)
move(chPWM, 70, 70)
time.sleep(2)
move(chPWM, 90, 90)

4. Kitronik :MOVE miniを操作するプログラムの実行
$ python3 pwm.py
angle1=80,us1=1400,duty1=71
angle2=100,us2=1600,duty2=81
angle1=100,us1=1600,duty1=81
angle2=80,us2=1400,duty2=71
angle1=100,us1=1600,duty1=81
angle2=100,us2=1600,duty2=81
angle1=70,us1=1300,duty1=66
angle2=70,us2=1300,duty2=66
angle1=90,us1=1500,duty1=76
angle2=90,us2=1500,duty2=76

〇参考情報
Bluetooth Developer Studio Level 3 Profile Report


0 件のコメント:

コメントを投稿