micro:bitの傾きをRaspberryPiでモニタ
モニタの方法
micro:bitとRaspberryPiをBlueToothで接続して、micro:bitの傾き具合をリアルタイムにRaspberryPiのコンソールに表示してみる。
micro:bit側のプログラム
micro:bit側は、Bluetoothのサービスを並べるだけ。
ただ、たくさん並べすぎてしまうと、micro:bit上でメモリ不足のエラー(泣き顔020エラー)が出たので、少し減らしてみたら動くことがわかった。
そしてペアリングしなくてもコネクションできるように設定するために、
プロジェクトの設定から No Paring Required: Anyone can connect via Bluetooth.
を有効にしておく。
RaspberryPi側
こちらはPythonで作ってみた。
まずは、bluepyモジュールを使うのでインストール
% sudo pip3 install bluepy
Pythonのプログラムはgitにも置いてあるが、こんな感じ。
HANDLEの番号はmicro:bit側のプログラムの構成で変わる様子なので、あらかじめ調べておく必要がある。
from bluepy.btle import Peripheral
import bluepy.btle as btle
import binascii
import struct
from time import sleep
HANDLE_BUTTON_A = 0x003a
HANDLE_BUTTON_B = 0x003d
HANDLE_ACCELE = 0x0027
devadr = "e4:1e:1f:1f:f4:49"
exflag = False
class MyDelegate(btle.DefaultDelegate):
def __init__(self, params):
btle.DefaultDelegate.__init__(self)
def handleNotification(self, cHandle, data):
global exflag
c_data = binascii.b2a_hex(data)
if cHandle == 0x27 :
accX = struct.unpack('h', data[0:2] )[0]
accY = struct.unpack('h', data[2:4] )[0]
accZ = struct.unpack('h', data[4:6] )[0]
strX = "Flat"
strY = "Flat"
if accX > 700 : strX = "Plus"
if accX < -700 : strX = "Minus"
if accY > 700 : strY = "Plus"
if accY < -700 : strY = "Minus"
#print("%s: %d, %d, %d : %s %s" %(c_data, accX, accY, accZ, strX, strY))
print("pitch = %s : role = %s" %(accY, accX))
return
b = ""
if cHandle == 0x3a : #left button
b = "button1"
if data[0] == 0x02 : exflag = True
if cHandle == 0x3d : #right button
b = "button2"
if data[0] == 0x02 : exflag = True
print("%s %X: %s" %(b, cHandle, c_data))
class MyPeripheral(Peripheral):
def __init__(self, addr):
Peripheral.__init__(self, addr, addrType="random")
def main():
peri = MyPeripheral(devadr)
peri.setDelegate(MyDelegate(btle.DefaultDelegate))
#Button
peri.writeCharacteristic(HANDLE_BUTTON_A + 1, b"\x01\x00", True)
peri.writeCharacteristic(HANDLE_BUTTON_B + 1, b"\x01\x00", True)
#acc
#peri.writeCharacteristic(0x002a, b"\x50\x00", True)
peri.writeCharacteristic(HANDLE_ACCELE + 1, b"\x01\x00", True)
while exflag == False:
if peri.waitForNotifications(1.0):
#sleep(0.3)
continue
peri.disconnect()
if __name__ == "__main__":
main()
実行
micro:bitを傾けると、コマンドを実行したコンソールにピッチとロールが表示される。
これでmicro:bitのセンサー情報をBlueTooth経由で取り出せるようになった。
% python3 sens.py
Author And Source
この問題について(micro:bitの傾きをRaspberryPiでモニタ), 我々は、より多くの情報をここで見つけました https://qiita.com/roxa/items/ba51da2c0c7af94e41c2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .