2019年12月11日水曜日

Raspberry PiからBluetooth経由のUARTでmicrobitと通信する

Raspberry PiからBluetooth経由でUARTでmicrobitと通信するには、以下の手順を実行します。

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

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

3. 地磁気センサーの値を取得するプログラム
uart.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("notification: {},{}".format(hd,ord(data)))
    chRX.write("pressed!\n".encode("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 )

chRX.write("start!\n".encode("utf-8"))
while True:
  if per.waitForNotifications(0.1):
    continue

4. Bluetooth経由のUARTでmicrobitと通信するプログラムの実行
$ python3  python3 uart.py
notification: 39,66
notification: 39,65

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


0 件のコメント:

コメントを投稿