RaspberryPi에서 Bluetooth로 micro:bit에 연결

10307 단어 RaspberryPimicrobit
Raspberry Pi 4는 블루투스를 내장하고 있으므로 블루투스로 micro:bit와 연결해 본다.

microbit 프로그램



Bluetooth 서비스 시작만 해 둔다.

그리고 페어링하지 않고도 연결할 수 있도록 설정하기 위해,
프로젝트 설정에서 No Paring Required: Anyone can connect via Bluetooth.를 활성화합니다.


Raspberry Pi



파이썬에서 블루투스를 사용하기위한 bluepy 모듈을 설치합니다.% sudo pip3 install bluepy

micro:bit의 주소를 찾습니다.



프로그램은 github에도 넣어 둔다.

scan.py
import bluepy

scanner = bluepy.btle.Scanner(0)
devices = scanner.scan(3)

for device in devices :
  print("-----------------------------------")
  print("address  : %s" % device.addr)
  print("addrType : %s" % device.addrType)
  print("RSSI     : %s" % device.rssi)
  print("Adv data :")
  for (adtype, desc, value) in device.getScanData() :
    print(" (%3s) %s  : %s " %(adtype, desc, value))

이 명령 만 루트 권한이 필요합니다.% sudo python3 scan.py
-----------------------------------
address  : e4:1e:1f:1f:f4:49
addrType : random
RSSI     : -45
Adv data :
 (  1) Flags  : 06 
 (  9) Complete Local Name  : BBC micro:bit [tazaz] 

이것으로 주소를 알았다.

UUID 조사



주소를 알고 있기 때문에 연결하여 UUID 확인

getHandle.py
import sys
import bluepy

def main() :
  try:
    peri = bluepy.btle.Peripheral()
    peri.connect(devadr, bluepy.btle.ADDR_TYPE_RANDOM)

  except:
    print("device connect error")
    sys.exit()

  charas = peri.getCharacteristics()
  for chara in charas :
    print("------------------------------------------")
    print(" UUID : %s" % chara.uuid )
    print(" Handle %04X : %s" %(chara.getHandle(), chara.propertiesToString()))

  peri.disconnect()

if __name__ == "__main__" :
  if len(sys.argv) == 1:
    print("Usage: getHandle.py BLE_DEVICE_ADDRESS")
    sys.exit()
  devadr = sys.argv[1]

  main()
% python3 getHandle.py e4:1e:1f:1f:f4:49
省略
------------------------------------------
 UUID : e95dd91d-251d-470a-a062-fa1922dfa9a8
------------------------------------------
 UUID : e95d7b77-251d-470a-a062-fa1922dfa9a8
 Handle 0033 : READ WRITE 
------------------------------------------
 UUID : e95d93ee-251d-470a-a062-fa1922dfa9a8
 Handle 0035 : WRITE 
------------------------------------------
省略

모든 UUID는 여기에도 있습니다 h tps : // / ㅁㅜㅜㅜㅜㅜㅜㅇㅇㅇ 기주 b. 이오/미 c로비 t-도 cs/레소 r세 s/bぅ에와 th/bぅ에와 th_p로후에ぇ. HTML

micro:bit의 LED에 "Hello"라고 표시



LED의 서비스 UUID로부터, TEXT 출력용 UUID를 취득해, 거기에 출력하는 것으로 LED에 표시를 할 수 있다.
프로그램은 github에도

writeLed2.py
import time
from bluepy import btle

devadr     = "e4:1e:1f:1f:f4:49"

uuid_service_led = "e95dd91d-251d-470a-a062-fa1922dfa9a8"
uuid_led_text    = "e95d93ee-251d-470a-a062-fa1922dfa9a8"


per = btle.Peripheral(devadr, btle.ADDR_TYPE_RANDOM)

svcLed = per.getServiceByUUID(uuid_service_led)
chLedText = svcLed.getCharacteristics(uuid_led_text)[0]
chLedText.write("Hello".encode("utf-8"))
time.sleep(5)

per.disconnect()

실행 결과



LED에 "Hello"가 표시됨
BlueTooth를 사용하여 micro:bit를 컨트롤 할 수 있게 되었다.% python3 writeLed2.py

좋은 웹페이지 즐겨찾기