2019年12月21日土曜日

Raspberry PiからBluetooth経由でmicrobitに接続したGrove超音波距離センサーの値を取得する

Groveシールドで様々なデバイスを利用するすることができます。
以下の手順でmicrobitのP0に接続したGrove超音波距離センサーの値をBluetooth経由でRaspberry Pi上のPythonプログラムで取得する事ができます。

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

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

3. Grove超音波距離センサーの値を取得するプログラム

uart_ultrasonic.py
from bluepy import btle

class MyDelegate(btle.DefaultDelegate):
  def __init__(self, TX, RX):
    btle.DefaultDelegate.__init__(self)
    self.TX = TX
    self.RX = RX

  def handleNotification(self, hd, data):
    print("distance: {},{}".format(hd,data.decode('utf-8')))

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

# UART Service
svcUART = per.getServiceByUUID("6E400001-B5A3-F393-E0A9-E50E24DCCA9E")
# TX Characteristics
chTX = svcUART.getCharacteristics("6E400002-B5A3-F393-E0A9-E50E24DCCA9E")[0]
ch_cccd=chTX.getDescriptors(forUUID=0x2902)[0]
ch_cccd.write(b"\x03\x00", False)

# RX Characteristics
chRX = svcUART.getCharacteristics("6E400003-B5A3-F393-E0A9-E50E24DCCA9E")[0]

dg = MyDelegate(chTX, chRX)
per.setDelegate( dg )

while True:
  if per.waitForNotifications(0.1):
    continue

4. Grove超音波距離センサーの値を取得するプログラムの実行
python3 uart_ultrasonic.py
distance: 39,102

distance: 39,340

distance: 39,103

〇GroveシールドとGrove超音波距離センサーを接続したmicrobit

関連情報

Groveデバイスまとめ

Bluetooth Developer Studio Level 3 Profile Report


0 件のコメント:

コメントを投稿