2019年12月8日日曜日

Raspberry PiからBluetooth経由でmicrobitの加速度センサーの値を取得する

Raspberry PiからBluetooth経由でmicrobitの加速度センサーの値を取得するには、以下の手順を実行します。

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

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

3. 加速度センサーの値を取得するプログラム
accelerometer.py
from bluepy import btle

class MyDelegate(btle.DefaultDelegate):
  def __init__(self):
    btle.DefaultDelegate.__init__(self)

  def handleNotification(self, hd, data):
    print("notification: {}".format(data))
    x = int.from_bytes(data[0:2], byteorder='little', signed=True)
    print("X: {}".format(x))
    y = int.from_bytes(data[2:4], byteorder='little', signed=True)
    print("Y: {}".format(y))
    z = int.from_bytes(data[4:6], byteorder='little', signed=True)
    print("Z: {}".format(z))

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

# Accelerometer Service
svcAcc = per.getServiceByUUID("E95D07532-51D470AA0-62FA-1922DFA9A8")

# Accelerometer Period
chAccPeriod = svcAcc.getCharacteristics("E95DFB24-251D-470A-A062-FA1922DFA9A8")[0]
period = 80
chAccPeriod.write(period.to_bytes(2, 'little'))

# Accelerometer data
chAccData = svcAcc.getCharacteristics("E95DCA4B-251D-470A-A062-FA1922DFA9A8")[0]
ch_cccd=chAccData.getDescriptors(forUUID=0x2902)[0]
ch_cccd.write(b"\x01\x00", False)

dg = MyDelegate()
per.setDelegate( dg )

print("press Ctrl+C to exit...")
while True:
  if per.waitForNotifications(0.1):
    continue

4. 加速度センサーの値を取得するプログラムの実行
$ python3 accelerometer.py
notification: b'\x90\xff\xf0\xff\x10\x04'
X: -112
Y: -16
Z: 1040

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


0 件のコメント:

コメントを投稿