티스토리 뷰
출처
- UARTService - micro:bit runtime
- Connection Events - micro:bit runtime
- MicrobitBLE-usage-using-C-C-MBED-/main.cpp at master · oksbwn/MicrobitBLE-usage-using-C-C-MBED- · GitHub
- GitHub - alcir/microbit-ble: Read data from micro:bit using Bluetooth from Linux
micro:bit : BLE 통신 - App Inventor 2 과 BLE 통신
micro:bit를 이용해서 BLE 서버를 만들고 App Inventor를 이용해서 안드로이드 용 BLE 클라이언트를 만들어 보았습니다.
BLE 서버는 BLE 이름과 UUID(고유주소)를 송출하고, 이 정보로 BLE 클라이언트가 접속하면, BLE 기기는 다른 BLE 클라이언트가 접속하지 않도록, BLE 이름을 더 이상 송출하지않고, 서비스목록과 해당 서비스의 특성 정보를 송출합니다. BLE 클라이언트는 필요한 서비스와 특성을 찾아서 용도에 따라 다르겠지만 여기 예제에서는 간단하게 문자열을 주고 받도록 했습니다.
micro:bit BLE 서버 만들기 pulse-combined.hex
서비스 UUID, 특성 UUID는 고정 되어 수정 할 수 없고, 정해지 UUID를 사용해야 됩니다.
micro:bit BLEUART Service 구성 UUID
- Service UUID : 6E400001-B5A3-F393-E0A9-E50E24DCCA9E
- TX Characteristic : 6E400002-B5A3-F393-E0A9-E50E24DCCA9E
- RX Characteristic : 6E400003-B5A3-F393-E0A9-E50E24DCCA9E
micro:bit 소스 - main.cpp
#include "MicroBit.h" #include "MicroBitUARTService.h" MicroBit uBit; MicroBitUARTService *uart; int connected = 0; void onConnected(MicroBitEvent e) { uBit.display.scroll("C"); connected = 1; // my client will send ASCII strings terminated with the colon character ManagedString eom(":"); while (connected == 1) { ManagedString msg = uart->readUntil(eom); uBit.display.scroll(msg); } } void onDisconnected(MicroBitEvent e) { uBit.display.scroll("D"); connected = 0; } void onButtonA(MicroBitEvent e) { if (connected == 0) { uBit.display.scroll("NC"); return; } uart->send("YES"); uBit.display.scroll("YES"); } void onButtonB(MicroBitEvent e) { if (connected == 0) { uBit.display.scroll("NC"); return; } uart->send("NO"); uBit.display.scroll("NO"); } void onButtonAB(MicroBitEvent e) { if (connected == 0) { uBit.display.scroll("NC"); return; } uart->send("GOT IT!!"); uBit.display.scroll("GOT IT!!"); } int main() { // Initialise the micro:bit runtime. uBit.init(); // listen for Bluetooth connection state changes uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_CONNECTED, onConnected); uBit.messageBus.listen(MICROBIT_ID_BLE, MICROBIT_BLE_EVT_DISCONNECTED, onDisconnected); // listen for user button interactions uBit.messageBus.listen(MICROBIT_ID_BUTTON_A, MICROBIT_BUTTON_EVT_CLICK, onButtonA); uBit.messageBus.listen(MICROBIT_ID_BUTTON_B, MICROBIT_BUTTON_EVT_CLICK, onButtonB); uBit.messageBus.listen(MICROBIT_ID_BUTTON_AB, MICROBIT_BUTTON_EVT_CLICK, onButtonAB); // Note GATT table size increased from default in MicroBitConfig.h // #define MICROBIT_SD_GATT_TABLE_SIZE 0x500 uart = new MicroBitUARTService(*uBit.ble, 32, 32); uBit.display.scroll("AVM"); // If main exits, there may still be other fibers running or registered event handlers etc. // Simply release this fiber, which will mean we enter the scheduler. Worse case, we then // sit in the idle task forever, in a power efficient sleep. release_fiber(); }
config.json
{ "microbit-dal": { "bluetooth": { "enabled": 1, "pairing_mode": 1, "private_addressing": 0, "open": 1, "security_level": "SECURITY_MODE_ENCRYPTION_NO_MITM", "whitelist": 1, "advertising_timeout": 0, "tx_power": 7, "dfu_service": 0, "event_service": 1, "device_info_service": 1 }, "gatt_table_size": "0x600" } }
module.json
{ "name": "pulse", "version": "0.0.0", "keywords": [], "author": "", "license": "Apache-2.0", "repository": { "url": "https://github.com/ARMmbed/mbed-os.git", "type": "git" }, "dependencies": { "mbed-classic": "lancaster-university/mbed-classic#microbit_hfclk+mb6", "microbit": "lancaster-university/microbit" }, "extraIncludes": [ "source/Device", "source/ChaN", "source/ea3a618e0818", "source/ESP8266", "source/ESP8266/ATParser", "source/ESP8266/ATParser/BufferedSerial", "source/ESP8266/ATParser/BufferedSerial/Buffer" ], "bin": "./source" }
App Inventor 2 : BLE 클라이언트 만들기 (http://ai2.appinventor.mit.edu/) microbit_ble.apk
App Inventor는 MIT에서 만든 블럭 형태의 코딩으로 안드로이드 어플을 쉽게 만들 수 있어서 IOT 개발시 많이 사용됩니다. 기본적으로 BT 통신만 지원했고, BLE 통신은 지원하지 않았지만, 최근에 확장 라이브러리를 통해서 지원하고 있습니다. BLE 확장 라이브러리를 다운 받아서 Import 하시면 BLE 통신을 구현 할 수 있습니다.
예제는 BLE 목록을 조회하고, 조회된 목록에서 micro:bit를 선택하여 BLE 서버에 접속하고, 미리 정해둔 서비스와 특성을 등록하고, micro:bit에서 A나 B버튼을 선택시 전달 받은 문자열을 텍스트박스에 출력하고, 안드로이드 어플에서도 문자열을 micro:bit에 전송 합니다.
App Inventor BLE 확장 라이브러리 다운로드
http://appinventor.mit.edu/extensions 에 접속하셔서 BluetoothLE.aix 파일을 다운 받습니다.
App Inventor BLE 확장 라이브러리 Import
팔레트 -> Extension -> import extension 에서 파일 선택버튼을 누른 후 위에서 다운받은 bluetoothLE.aix 를 선택해줍니다.
App Inventor 화면 구성
전역 변수 선언 (서비스, 특성 UUID 정의)
BLE 문자열 전달 함수 생성
[버튼1]을 선택해서 BLE 목록 조회
BLE 목록이 조회되면 목록를 리스트 박스(목록_선택1)에 담기
BLE 목록에서 접속하려고 하는 BLE 기기 선택했을 경우 BLE 주소 UUID(리스트의 문자열 1에서 17의 문자열)를 가지고 와서 해당 BLE에 접속 시도
BLE 기기에 접속하면 BLE로 문자열 수신 이벤트를 받기 위해서 서비스와 특성 등록
BLE 기기에서 문자열을 수신 했을 경우 텍스트 박스(텍스트_상자1)에 수신한 문자열 출력
[버튼3]을 선택해서 텍스트 박스(텍스트_상자2)의 문자열을 BLE기기에 전송
[버튼2]을 선택해서 BLE 연결끊기
App Inventor 전체 소스
실행 영상
- Total
- Today
- Yesterday
- Delphi Tip
- Xcode
- 전예희
- NDK
- Spring
- Mac
- BPI-M4
- oracle
- ble
- MySQL
- 일본여행
- android
- ffmpeg
- Linux
- JavaScript
- 서울오토살롱
- Java
- 튜닝쇼 2008
- SAS
- koba2010
- flex
- 동경
- KOBA
- 송주경
- Spring MVC
- Delphi
- ubuntu
- sas2009
- 지스타2007
- 레이싱모델 익스트림 포토 페스티벌
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |