ESP32 BLE - cchamchi/ESP32 GitHub Wiki

https://github.com/jpbrucker/BLE_HID/blob/master/BLE_HID/HIDServiceBase.cpp

http://eleccelerator.com/tutorial-about-usb-hid-report-descriptors/

https://github.com/nkolban/ESP32_BLE_Arduino

https://github.com/nkolban/esp32-snippets/issues/230

http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=lecture_tip&wr_id=20

https://medium.com/zoyi-blog/bluetooth-low-energy-ble-84b03705ffca ์„ค๋ช… ์ข‹๋‹ค

BLE ๋ธ”๋ฃจํˆฌ์Šค ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด์„œ ๋‹ค์–‘ํ•œ ์•ฑ๊ณผ ์žฅ์น˜๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € BLE ์˜ ๊ตฌ์กฐ์™€ ์ปจ์…‰, ์ŠคํŽ™์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตญ๋‚ด์™ธ์˜ ์ž๋ฃŒ ์ค‘ ๋น„๊ต์  ์ดํ•ด๊ฐ€ ์‰ฌ์šด ์ž๋ฃŒ๋“ค์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

BLUETOOTH LOW ENERGY(BLE)

BLE๋Š” ์ข…์ข… Bluetooth Smart ๋กœ๋„ ๋ถˆ๋ฆฌ๋ฉฐ classic bluetooth์˜ ๊ฒฝ๋Ÿ‰ํ™” ๋ฒ„์ „์„ ๋ชฉํ‘œ๋กœ ๋ธ”๋ฃจํˆฌ์Šค 4.0์˜ ์ผ๋ถ€๋กœ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Classic bluetooth์™€ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•˜์ง€๋งŒ BLE๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ํ‘œ์ค€์œผ๋กœ ๋ธ”๋ฃจํˆฌ์Šค ํ‘œ์ค€ํ™” ๊ทธ๋ฃน์ธ Bluetooth SIG์— ์˜ํ•ด์„œ ๊ฐœ๋ฐœ๋˜๊ธฐ ์ „๊นŒ์ง€ Nokia์˜ ์‚ฌ๋‚ด ํ”„๋กœ์ ํŠธ(Wibree)๋กœ ์‹œ์ž‘ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

BLE ์ง€์› ํ”Œ๋žซํผ

  • iOS5+ (iOS7+ preferred)
  • Android 4.3+ (numerous bug fixes in 4.4+)
  • Apple OS X 10.6+
  • Windows 8 (XP, Vista and 7 only support Bluetooth 2.1)
  • GNU/Linux Vanilla BlueZ 4.93+

GAP

GAP๋Š” Generic Access Profile์˜ ์•ฝ์ž๋กœ ๋ธ”๋ฃจํˆฌ์Šค์—์„œ ๊ฒŒ์‹œ(advertising)์™€ ์—ฐ๊ฒฐ(connection)์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. GAP์€ ํŠน์ • ์žฅ์น˜๊ฐ€ ๋‹ค๋ฅธ ์žฅ์น˜๋“ค์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ง€๋„๋ก ํ•  ๊ฒƒ์ธ๊ฐ€์™€ ์–ด๋–ป๊ฒŒ ๋‘ ์žฅ์น˜๋ฅผ ์—ฐ๊ฒฐํ•  ๊ฒƒ์ธ๊ฐ€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. GAP์€ ์žฅ์น˜๋“ค์ด ๋งก์„ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์—ญํ• ๋“ค์— ๋Œ€ํ•ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๊ฐ€์žฅ ํ•ต์‹ฌ์ด ๋˜๋Š” ์ปจ์…‰์€ Central ์žฅ์น˜์™€ Peripheral ์žฅ์น˜์ž…๋‹ˆ๋‹ค.

Peripheral ์žฅ์น˜๋Š” ์ฃผ๋กœ ์ž‘๊ณ , ์ €์ „๋ ฅ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ , ์ œํ•œ๋œ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ€์ง„ ์žฅ์น˜๋“ค๋กœ ๋ณด๋‹ค ๋ฆฌ์†Œ์Šค๊ฐ€ ํ’๋ถ€ํ•œ Central ์žฅ์น˜์— ์—ฐ๊ฒฐ๋˜์–ด ๋™์ž‘ํ•˜๋„๋ก ์„ค๊ณ„๋œ ์žฅ์น˜์ž…๋‹ˆ๋‹ค. Heart Rate Monitor(์‹ฌ๋ฐ•์ธก์ •๊ธฐ), BLE ๊ทผ์ ‘์„ผ์„œ ํƒœ๊ทธ ๋“ฑ์ด ํ•ด๋‹น๋ฉ๋‹ˆ๋‹ค. ์ดํ•˜ ๊ธ€์—์„œ๋Š” ์ดํ•ด์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด Peripheral ์žฅ์น˜๋ฅผ [์„ผ์„œ ์žฅ์น˜]๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

Central ์žฅ์น˜๋Š” ํฐ์ด๋‚˜ ํƒœ๋ธ”๋ฆฟ๊ณผ ๊ฐ™์ด ์ถฉ๋ถ„ํ•œ ์ „์›๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋“ฑ์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ฐ–์ถ˜ ์žฅ์น˜์ž…๋‹ˆ๋‹ค. ์ดํ•˜ ๊ธ€์—์„œ๋Š” ์ดํ•ด์˜ ํŽธ์˜๋ฅผ ์œ„ํ•ด [ํฐ] ๋“ฑ์œผ๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค.

ADVERTISING AND SCAN RESPONSE DATA

GAP์„ ์ด์šฉํ•ด์„œ ๊ฒŒ์‹œ(Advertising)๋ฅผ ํ•  ๋•Œ Advertising Data Payload์™€ Scan Response Payload ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€๋Š” ์„œ๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ 31๋ฐ”์ดํŠธ๊นŒ์ง€ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Advertising Data Payload ๊ฐ€ ํ•„์ˆ˜์ธ๋ฐ ๋ฐ˜ํ•ด Scan Response Payload๋Š” ์„ ํƒ์ ์ž…๋‹ˆ๋‹ค. Advertising Data Payload ๋Š” Central ์žฅ์น˜๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋„๋ก peripheral ์žฅ์น˜(์„ผ์„œ์žฅ์น˜)์—์„œ ๊ณ„์† ์†ก์ถœ๋˜๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. Scan Response Payload ๋Š” central ์žฅ์น˜(ํฐ)์—์„œ ์žฅ์น˜ ์ด๋ฆ„๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€์ ์ธ ์ •๋ณด๋ฅผ ์š”๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ์ •์˜๋œ ๊ฒƒ์œผ๋กœ ์„ ํƒ์ ์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.

ADVERTISING PROCESS

Advertising ๊ณผ์ •์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋จผ์ € ์„ผ์„œ์žฅ์น˜๋Š” ํŠน์ •ํ•œ ๊ฒŒ์‹œ ์ฃผ๊ธฐ(advertising interval)๋ฅผ ๊ฐ€์ง€๊ณ , ์ด ์ฃผ๊ธฐ๋งˆ๋‹ค advertising packet์„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๊ธฐ๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก ์ „๋ ฅ์†Œ๋ชจ๋ฅผ ์ค„์—ฌ์ฃผ์ง€๋งŒ Central ์žฅ์น˜์—์„œ์˜ ๋ฐ˜์‘์ด ๋Š๋ ค์ง‘๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ˆ˜์‹  ์žฅ์น˜(central ์žฅ์น˜)์—์„œ Scan Response Data ์— ๊ด€์‹ฌ์ด ์žˆ๋‹ค๋ฉด ์ถ”๊ฐ€๋กœ ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๊ณ  peripheral ์ด ์—ฌ๊ธฐ์— ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜ ์‘๋‹ตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

BROADCASTING, BEACON

Peripheral ์žฅ์น˜๋Š” 31๋ฐ”์ดํŠธ ์ •๋„์˜ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์–ด์„œ ๊ฒŒ์‹œ(advertising)๋ฅผ ํ•จ์œผ๋กœ์จ ๋‚ฎ์€ ๋น„์šฉ์œผ๋กœ ์ฃผ๋ณ€์˜ central ์žฅ์น˜์— ์ž์‹ ์˜ ์กด์žฌ๋ฅผ ์•Œ๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. BLE์—์„œ๋Š” ์ด๊ฒƒ์„ Broadcasting ์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ค๋กœ์ง€ advertising ์—ญํ• ๋งŒ์„ ํ•˜๋Š” Peripheral ์žฅ์น˜๊ฐ€ ๋ฐ”๋กœ ๋น„์ปจ(Beacon) ์ž…๋‹ˆ๋‹ค. ์• ํ”Œ์˜ iBeacon์€ advertising packet ์˜ custom payload ๋‚ด์šฉ์„ ํŠน์ •ํ•œ ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋„๋ก ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋‹จ Central, Peripheral ๋‘ ์žฅ์น˜๊ฐ€ ์—ฐ๊ฒฐ๋˜๋ฉด advertising ์€ ์ข…๋ฃŒ๋˜์–ด ์™ธ๋ถ€ ์žฅ์น˜์—์„œ scan ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์ œ GATT ์„œ๋น„์Šค์™€ ํŠน์„ฑ(characteristic)์„ ์‚ฌ์šฉํ•˜์—ฌ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ํ†ต์‹ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์šฉ์–ด์™€ ์ปจ์…‰

์ž์„ธํ•œ ์„ค๋ช…์ด ์ด์–ด์ง€๊ธฐ ์ „์— ๊ณง ์–ธ๊ธ‰๋  ์ฃผ์š” ์šฉ์–ด๋“ค๊ณผ ์ปจ์…‰์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

  • GATT (Generic Attribute Profile) : GATT๋Š” ๋‘ BLE ์žฅ์น˜๊ฐ„์— Service, Characteristic ์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • Attribute Protocol (ATT) : GATT๋Š” ATT์˜ ์ตœ์ƒ์œ„ ๊ตฌํ˜„์ฒด์ด๋ฉฐ GATT/ATT๋กœ ์ฐธ์กฐ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์†์„ฑ(Attribute)์€ UUID๋ฅผ ๊ฐ€์ง€๋ฉฐ 128๋น„ํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ATT์— ์˜ํ•ด ๋ถ€์—ฌ๋œ ์†์„ฑ์€ ํŠน์„ฑ(characteristic)๊ณผ ์„œ๋น„์Šค(Service)๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Characteristic : ํ•˜๋‚˜์˜ ํŠน์„ฑ(characteristic)์€ ํ•˜๋‚˜์˜ ๊ฐ’๊ณผ n๊ฐœ์˜ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • Descriptor : ๋””์Šคํฌ๋ฆฝํ„ฐ๋Š” ํŠน์„ฑ์˜ ๊ฐ’์„ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค.
  • Service : ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋Š” ํŠน์„ฑ๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "Heart Rate Monitor"๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์„œ๋น„์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ์„œ๋น„์Šค๋Š” "heart rate measurement"๊ฐ™์€ ํŠน์„ฑ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

GATT-based profile์˜ ๋ฆฌ์ŠคํŠธ์™€ ์„œ๋น„์Šค๋Š” bluetooth.org ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ญํ• ์— ๋”ฐ๋ฅธ ๊ตฌ๋ถ„ (๋ณต์Šต)

CENTRAL / PERIPHERAL BLE ๋กœ ์—ฐ๊ฒฐ๋˜๊ธฐ ์œ„ํ•œ ์„œ๋กœ์˜ ์—ญํ• ์„ ๊ตฌ๋ถ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. central ์€ scan, ๊ฒŒ์‹œ๊ฒ€์ƒ‰(looking for advertisement)์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  peripheral ์€ ๊ฒŒ์‹œ(advertisement)๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ํฐ๊ณผ ์„ผ์„œ์žฅ์น˜๊ฐ€ ์žˆ๋‹ค๋ฉด ํฐ์ด ์ฃผ๋ณ€์˜ ์„ผ์„œ์žฅ์น˜๋ฅผ ์Šค์บ”ํ•˜๋Š” ์—ญํ• ์„ ํ•  ๊ฒƒ์ด๋ฏ€๋กœ central ์ด ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€๋กœ ์„ผ์„œ์žฅ์น˜๊ฐ€ peripheral ์ด ๋ฉ๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ ์€ peripheral ์€ ์˜ค๋กœ์ง€ ํ•˜๋‚˜์˜ central ์žฅ์น˜์—๋งŒ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. peripheral ์ด central ์— ์—ฐ๊ฒฐ๋˜๋ฉด ๊ฒŒ์‹œ(advertising)๋ฅผ ์ค‘๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋‹ค๋ฅธ central ์žฅ์น˜๋Š” peripheral์˜ ์—ฐ๊ฒฐ์ด ํ•ด์ œ๋  ๋•Œ ๊นŒ์ง€ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

GATT SERVER(SLAVE) / GATT CLIENT(MASTER) BLE ์žฅ์น˜๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ดํ›„ ์–ด๋–ป๊ฒŒ ์„œ๋กœ ํ†ต์‹ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ peripheral ์žฅ์น˜(์„ผ์„œ์žฅ์น˜)๊ฐ€ GATT server ์—ญํ• ์„ ํ•˜๋ฉฐ ATT lookup data, service, characteristic ์— ๋Œ€ํ•œ ์ •์˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. GATT client(ํฐ, ํƒœ๋ธ”๋ฆฟ ๋“ฑ)์—์„œ๋Š” GATT server ๋กœ ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋ชจ๋“  ๋™์ž‘(transaction)์€ GATT client ์—์„œ ์‹œ์ž‘๋˜์–ด GATT server๋กœ ๋ถ€ํ„ฐ ์‘๋‹ต์„ ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋‘ ์žฅ์น˜๊ฐ€ ์—ฐ๊ฒฐ๋  ๋•Œ peripheral(์„ผ์„œ์žฅ์น˜) ์€ ์—ฐ๊ฒฐ๊ฐ„๊ฒฉ(connection interval)์„ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค. Central(ํฐ)์€ ์ด ์‹œ๊ฐ„๋งŒํผ ๊ฐ„๊ฒฉ์„ ๋‘๊ณ  ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š”์ง€ ์žฌ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ ํ•„์ˆ˜ ์‚ฌํ•ญ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ „์ฒด ๊ตฌ์กฐ

BLE์—์„œ ์‚ฌ์šฉํ•˜๋Š” GATT ๊ธฐ๋ฐ˜ ๋™์ž‘๊ตฌ์กฐ๋Š” ํ”„๋กœํŒŒ์ผ(Profile), ์„œ๋น„์Šค(Service), ํŠน์„ฑ(Characteristic) ์— ๊ธฐ์ดˆํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ์ˆ˜์ง ๊ตฌ์กฐ๋ฅผ ์ด๋ฃน๋‹ˆ๋‹ค.

ํ”„๋กœํŒŒ์ผ(PROFILE)

ํ”„๋กœํŒŒ์ผ์€ BLE peripheral(์„ผ์„œ์žฅ์น˜) ์— ์‹ค์ œ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Bluetooth SIG(๋ธ”๋ฃจํˆฌ์Šค ํ‘œ์ค€ ๊ฐœ๋ฐœ๊ทธ๋ฃน) ํ˜น์€ peripheral(์„ผ์„œ์žฅ์น˜) ๋””์ž์ด๋„ˆ์— ์˜ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„, ๋ฏธ๋ฆฌ ์ •์˜๋œ ์„œ๋น„์Šค์˜ ๋ฌถ์Œ์ž…๋‹ˆ๋‹ค.

Heart Rate Profile (HRP)์„ ์˜ˆ๋กœ ๋“ค์–ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœํŒŒ์ผ์€ Heart Rate Service(ํ•„์ˆ˜)์™€ Device Information Service(์„ ํƒ)๋ฅผ ๊ฒฐํ•ฉํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ๋‘ ์„œ๋น„์Šค๋ฅผ ๋ฌถ์–ด์„œ Heart Rate Profile ์ด๋ผ๊ณ  ์ •์˜ํ–ˆ์œผ๋ฉฐ ๋…ผ๋ฆฌ์ ์ธ ๊ตฌ๋ถ„์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค(SERVICE)

์„œ๋น„์Šค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋…ผ๋ฆฌ์ ์ธ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ„๋Š” ์—ญํ• ์„ ํ•˜๋ฉฐ ํŠน์„ฑ(characteristic)์ด๋ผ ๋ถˆ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ ๋‹จ์œ„๋ฅผ ํ•˜๋‚˜ ์ด์ƒ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ์„œ๋น„์Šค๋Š” UUID๋ผ ๋ถˆ๋ฆฌ์šฐ๋Š” 16bit(for officially adopted BLE Services) ํ˜น์€ 128bit(for custom services) ๊ตฌ๋ถ„์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€ ๊ทธ๋ฃน์—์„œ ์ œ์ •ํ•œ ๊ณต์‹ ์„œ๋น„์Šค ๋ฆฌ์ŠคํŠธ๋Š” [๋งํฌ]์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ค‘ Heart Rate Service ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด 16-bit UUID - 0x180D ๋ฅผ ์‚ฌ์šฉํ•จ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์„œ๋น„์Šค๋Š” 3๊ฐœ์˜ ํŠน์„ฑ(Heart Rate Measurement, Body Sensor Location, Heart Rate Control Point) ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์ด ์ค‘ Heart Rate Measurement ๋งŒ ํ•„์ˆ˜์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠน์„ฑ(CHARACTERISTIC)

GATT ๊ธฐ๋ฐ˜ ๋™์ž‘๊ตฌ์กฐ์—์„œ ๊ฐ€์žฅ ํ•˜์œ„ ๋‹จ์œ„๋Š” ํŠน์„ฑ์ž…๋‹ˆ๋‹ค. ํŠน์„ฑ์€ ๋‹จ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€์†๋„ ์„ผ์„œ์ฒ˜๋Ÿผ X, Y, Z ์ถ• ๊ฐ’์ด ํ•œ ์Œ์„ ์ด๋ฃจ๋Š” ๊ฒฝ์šฐ ์ผ๋ จ๋œ ๊ฐ’์˜ ๋‚˜์—ด(๋ฐฐ์—ด)๋„ ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋กœ ๊ฐ„์ฃผํ•ฉ๋‹ˆ๋‹ค.

์„œ๋น„์Šค์™€ ์œ ์‚ฌํ•˜๊ฒŒ ํŠน์„ฑ๋„ 16-bit ๋˜๋Š” 128-bit UUID ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ํ‘œ์ค€ ํŠน์„ฑ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ˜น์€ ๋ณธ์ธ์˜ ๋ชฉ์ ์— ๋งž๊ฒŒ ํŠน์„ฑ์„ ์ •์˜ํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด Heart Rate Measurement ํŠน์„ฑ์€ Heart Rate Service ์˜ ํ•„์ˆ˜ ํŠน์„ฑ์œผ๋กœ UUID - 0x2A37 ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด ํŠน์„ฑ์€ ๋ฐ์ดํ„ฐ์˜ ์ฒซ 8bit ์ค‘ ์ฒซ 1bit ๊ฐ€ Heart Rate Measurement(HRM) ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด 0์ผ ๊ฒฝ์šฐ ์ด์–ด์ง€๋Š” HRM ๋ฐ์ดํ„ฐ๋Š” UINT8 ํƒ€์ž…์ด๊ณ  1์ผ ๊ฒฝ์šฐ๋Š” UINT16 ์ž…๋‹ˆ๋‹ค. ์ด์™€๊ฐ™์ด BLE์—์„œ ํŠน์„ฑ์€ peripheral(์„ผ์„œ์žฅ์น˜)์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ํ•ต์‹ฌ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํŠน์„ฑ์€ ๋˜ํ•œ Central(ํฐ) ์žฅ์น˜์—์„œ peripheral(์„ผ์„œ์žฅ์น˜)๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฐ„๋žตํ•˜๊ฒŒ ์‹ค์ œ ํฐ์—์„œ์˜ ๋™์ž‘๊ณผ์ •์„ ์š”์•ฝํ•˜๋ฉด Central(ํฐ) ์žฅ์น˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ์ˆœ์„œ๋ฅผ ๊ฑฐ์ณ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  • ๋จผ์ € ํฐ์€ ์ฃผ๋ณ€์˜ BLE ์žฅ์น˜๋ฅผ ์Šค์บ”ํ•ฉ๋‹ˆ๋‹ค. (GAP profile ์ด ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ด ๊ณผ์ •. ์ฃผ๊ธฐ์ ์œผ๋กœ advertising ์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ์ •์˜)
  • ํฐ์€ ์Šค์บ” ๊ฒฐ๊ณผ์—์„œ ์›ํ•˜๋Š” peripheral(์„ผ์„œ์žฅ์น˜)๊ฐ€ ๋ณด์ด๋ฉด ์—ฐ๊ฒฐ (๋‘ ์žฅ์น˜๊ฐ€ ์—ฐ๊ฒฐ๋˜๋ฉด ์„ผ์„œ์žฅ์น˜๋Š” advertising์„ ์ข…๋ฃŒ, Central(ํฐ)์€ GATT client ์—ญํ• ์„ ํ•˜๊ณ  GATT server์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ)
  • ์ด์ œ ์ดํ›„๋ถ€ํ„ฐ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ, iOS ํ”„๋ ˆ์ž„์›์—์„œ GATT client๋ฅผ ์šด์˜ํ•˜๊ณ  ๋ฐ์ดํ„ฐ ์ˆ˜์‹ , ์—ฐ๊ฒฐ ์ƒํƒœ์˜ ๋ณ€ํ™” ๋“ฑ ๊ฐ์ข… ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒ ํ•  ๋•Œ ์•ฑ์— ์•Œ๋ ค์ฃผ๊ฒŒ๋ฉ๋‹ˆ๋‹ค. (์ด ๊ณผ์ •์„ ์šด์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋‚ด์šฉ๋“ค์ด GATT/ATT์— ์ •์˜๋จ)
  • ๋จผ์ € ์—ฐ๊ฒฐ๋œ ์žฅ์น˜์˜ GATT ์ •๋ณด์™€ Service ์ •๋ณด๋ฅผ ์ˆ˜์‹  (Service UUID ์ •๋ณด๋กœ ํ™•์ธ) Characteristic ์ •๋ณด ์ˆ˜์‹  (UUID ๊ฐ’์œผ๋กœ ์‹ค์ œ ์ฒ˜๋ฆฌํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœ)