nRF51로 BLE MIDI 광고
이번에는 iOS의 GarageBand와 연결하고 싶기 때문에 Apple의 BLE MIDI를 사용합니다.
사양은 이쪽,
Apple Bluetooth Low Energy MIDI Specification
그 사양에 따르면 BLE MIDI의 UUID는
이름
UUID
서비스
03B80E5A-EDE8-4B33-A751-6CE34EC4C700
I/O Characteristic
7772E5DB-3868-4112-A1A9-F2669D106BF3
여기까지 알면 SDK에 샘플로 들어있는 ble_nus (Nordic UART Service)를,
조금 만지면 광고까지 할 수 있어야합니다.
그리고 ble_nus의 UUID는 여기.
이름
UUID
서비스
6E400001-B5A3-F393-E0A9-E50E24DCCA9E
TX Characteristic
6E400002-B5A3-F393-E0A9-E50E24DCCA9E
RX Characteristic
6E400003-B5A3-F393-E0A9-E50E24DCCA9E
ble_nus.c에 따르면 서비스 추가 방법은
uint8_t uuid_type;
ble_uuid128_t nus_base_uuid = {{0x9E, 0xCA, 0xDC, 0x24, 0x0E, 0xE5, 0xA9, 0xE0,
0x93, 0xF3, 0xA3, 0xB5, 0x00, 0x00, 0x40, 0x6E}};
ble_uuid_t ble_uuid;
uint16_t service_handle;
// Add custom base UUID.
sd_ble_uuid_vs_add(&nus_base_uuid, &uuid_type);
ble_uuid.type = uuid_type;
ble_uuid.uuid = BLE_UUID_NUS_SERVICE; // 0x0001
// Add service.
sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY,
&ble_uuid,
&service_handle);
Characteristic은
ble_gatts_char_md_t char_md;
ble_gatts_attr_t attr_char_value;
ble_uuid_t char_uuid;
ble_gatts_attr_md_t attr_md;
ble_gatts_char_handles_t rx_handles;
// 省略するけど char_md と attr_char_value をいろいろ設定
char_uuid.type = uuid_type;
char_uuid.uuid = BLE_UUID_NUS_RX_CHARACTERISTIC; // 0x0002;
// Add RX Characteristic.
sd_ble_gatts_characteristic_add(service_handle,
&char_md,
&attr_char_value,
&rx_handles);
방법을 알았기 때문에,
이것을 BLE MIDI로 바꿉니다.
첫째, Base UUID에서
Service UUID의 일부를 0으로 변경하면,
03B80000-EDE8-4B33-A751-6CE34EC4C700
가 되기 때문에, 전후 뒤집어서...ble_uuid128_t midi_base_uuid = {{0x00, 0xC7, 0xC4, 0x4E, 0xE3, 0x6C, 0x51, 0xA7,
0x33, 0x4B, 0xE8, 0xED, 0x00, 0x00, 0xB8, 0x03}};
다음으로 Service
0으로 변경한 곳을 uuid로 지정합니다.
ble_uuid.type = uuid_type;
ble_uuid.uuid = 0x0E58;
// Add service.
sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY,
&ble_uuid,
&service_handle);
그리고는, Characteristic이지만,
Service와 Base UUID가 다릅니다.
여기서 꽤 꽤 있었습니다만.
결국, Base UUID를 또 하나 만들면 잘 되었습니다.
uint8_t char_uuid_type;
ble_uuid128_t midi_char_uuid = {{0xF3, 0x6B, 0x10, 0x9D, 0x66, 0xF2, 0xA9, 0xA1,
0x12, 0x41, 0x68, 0x38, 0x00, 0x00, 0x72, 0x77}};
ble_uuid_t char_uuid;
// Add custom base UUID.
sd_ble_uuid_vs_add(&midi_char_uuid, &char_uuid_type);
char_uuid.type = char_uuid_type;
char_uuid.uuid = 0xE5DB;
좋았다.
지금까지 가능하면 GarageBand에 연결할 수 있습니다.
그리고는, Apple의 사양과 MIDI의 사양대로 노트 보내거나 하는 것 뿐이므로 간단합니다.
뭔가 만들었어.
BLE MIDI를 사용해, 야채를 악기로 해 놀는 디바이스를 만들어 보았습니다.
Maker Faire에 나오면 꼬마들에게 대인기.
모처럼의 무선인데 케이블 가득합니다 죄송합니다.
Reference
이 문제에 관하여(nRF51로 BLE MIDI 광고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/miyakeryo/items/4d26a5f3f08b60fecadb텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)