2019年12月20日金曜日

Raspberry PiからBluetooth経由でmicrobitに接続したポテンションメーターの値を取得する

以下の手順でmicrobitのP0に接続したポテンションメーターの値をBluetooth経由でRaspberry Pi上のPythonプログラムで取得する事ができます。 ポテンションメーターを裏側(=つまみがない側)にして端子を上側にしたとき、
・左側から1番目の端子を、microbitのGND
・真ん中の端子を、microbitのP0
・右側から1番目の端子を、microbitの3V
に接続します。

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

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

3. ポテンションメーターの値を取得するプログラム

iopin_potentionmeter.py
from bluepy import btle

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

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

  def handleNotification(self, hd, data):
    print("Pin{}={}".format(str(data[0]), str(data[1])))

# Without this, the reading of the temperature characteristic fails
#p.setSecurityLevel("medium")

# IO Pin Service
svcIOPIN = per.getServiceByUUID("E95D127B-251D-470A-A062-FA1922DFA9A8")
# pin0 as Analog
chADC = svcIOPIN.getCharacteristics("E95D5899-251D-470A-A062-FA1922DFA9A8")[0]
chADC.write(b"\x01\x00\x00\x00")
# pin0 as Input
chPIOC = svcIOPIN.getCharacteristics("E95DB9FE-251D-470A-A062-FA1922DFA9A8")[0]
chPIOC.write(b"\x01\x00\x00\x00")
# Pin Data
chDATA = svcIOPIN.getCharacteristics("E95D8D00-251D-470A-A062-FA1922DFA9A8")[0]
ch_cccd=chDATA.getDescriptors(forUUID=0x2902)[0]
ch_cccd.write(b"\x01\x00", False)

per.setDelegate(MyDelegate() )

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

4. ポテンションメーターの値を取得するプログラムの実行
python3 iopin_potentionmeter.py
Pin0=254
Pin0=255

〇microbit用コネクターブレイクアウトボードとポテンションメーターを接続したmicrobit

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


0 件のコメント:

コメントを投稿