โปรไฟล์ iBeacon Bluetooth คืออะไร


150

ฉันต้องการสร้าง iBeacon ของตัวเองด้วยชุดอุปกรณ์บลูทู ธ พลังงานต่ำบางตัว Apple ยังไม่ได้เปิดตัวสเปคสำหรับ iBeacons แต่นักพัฒนาฮาร์ดแวร์บางคนกลับทำการออกแบบ iBeacon จากโค้ดตัวอย่าง AirLocate และเริ่มขายชุดอุปกรณ์ iBeacon

ดังนั้นโปรไฟล์ iBeacon Bluetooth คืออะไร

Bluetooth Low Energy ใช้ GATT เพื่อค้นหาบริการโปรไฟล์ LE ดังนั้นฉันคิดว่าเราจำเป็นต้องรู้ถึง Attribute Handle, Attribute Type, Attribute Value และบางทีสิทธิ์ Attribute ของแอตทริบิวต์ iBeacon ดังนั้นสำหรับ iBeacon ที่มี UUID ของ E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 ค่าหลัก 1 และค่ารอง 1 บริการโปรไฟล์ GATT Bluetooth จะเป็นอย่างไร

นี่คือข้อสันนิษฐานบางอย่างที่ฉันทำจากการอภิปรายในฟอรัมของ Apple และผ่านเอกสาร

  1. คุณจะต้องเห็นบริการโปรไฟล์ (GATT) ของอุปกรณ์ต่อพ่วง Bluetooth เพื่อทราบว่าเป็น iBeacon

  2. คีย์ Major และ Minor ถูกเข้ารหัสที่ใดที่หนึ่งในบริการโปรไฟล์นี้

นี่คือ บริษัท บางแห่งที่มี iBeacon Dev Kits ซึ่งดูเหมือนจะมีตัวเลขดังกล่าวแล้ว

หวังว่าในเวลาเราจะมีโพสต์โปรไฟล์บน Bluetooth.org ดังนี้: https://www.bluetooth.org/en-us/specification/adopted-specifications


ที่จริงตอนนี้ฉันเข้าใจแล้วว่ามันมีค่าแอตทริบิวต์ 4 ค่าคืออะไร
PaulWoodIII

@ Dan1One ฉันได้จำลองการบริการโดยใช้ Light Blue จากนั้นใช้โค้ดตัวอย่าง AirLocate ของ Apple ฉันไม่สามารถให้บริการซ้ำซ้อนได้ฉันคิดว่ามีบางอย่างที่มากกว่านี้อีกเช่นกัน Light Blue ไม่ได้มี Attribute Handle อยู่ในรายการ
PaulWoodIII

คุณกำลังมองหาวิธีสร้าง iBeacon ด้วย CBPeripheralManager (ที่ทำงานในพื้นหลัง) หรือซอฟต์แวร์ (ไม่ใช่ iOS) หรือฮาร์ดแวร์อีกชิ้นหรือไม่? สิ่งนี้จะนำไปสู่รายละเอียดที่จำเป็น
Wain

@ ฉันพยายามใส่ฮาร์ดแวร์ของตัวเองเป็นบันทึกวรรคหนึ่ง แต่เมื่อฉันสังเกตเห็นในคำถามที่เชื่อมโยงมันอาจเป็นประโยชน์กับคำตอบของคำถามที่เชื่อมโยงโดยใช้ CBPeripheralManager โฆษณา iBeacon ในพื้นหลัง
PaulWoodIII

1
ที่ดี! คุณสามารถแบ่งปันเอกสารที่นี่สำหรับโปรแกรมเมอร์ในอนาคตเมื่อฉันถามคำถามในปี 2013 มันยังไม่แน่นอน
PaulWoodIII

คำตอบ:


228

สำหรับ iBeacon ที่มี ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, Tx Power ที่สำคัญ0, รอง0และปรับเทียบของ-59RSSI, แพ็กเก็ตโฆษณา BLE ที่ส่งมาจะมีลักษณะดังนี้:

d6 be 89 8e 40 24 05 a2 17 6e 3d 71 02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 52 ab 8d 38 a5

แพ็คเก็ตนี้สามารถแบ่งได้ดังนี้:

d6 be 89 8e # Access address for advertising data (this is always the same fixed value)
40 # Advertising Channel PDU Header byte 0.  Contains: (type = 0), (tx add = 1), (rx add = 0)
24 # Advertising Channel PDU Header byte 1.  Contains:  (length = total bytes of the advertising payload + 6 bytes for the BLE mac address.)
05 a2 17 6e 3d 71 # Bluetooth Mac address (note this is a spoofed address)
02 01 1a 1a ff 4c 00 02 15 e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 00 00 00 00 c5 # Bluetooth advertisement
52 ab 8d 38 a5 # checksum

ส่วนสำคัญของแพ็กเก็ตนั้นคือการโฆษณาผ่านบลูทู ธ ซึ่งสามารถแยกย่อยได้ดังนี้:

02 # Number of bytes that follow in first AD structure
01 # Flags AD type
1A # Flags value 0x1A = 000011010  
   bit 0 (OFF) LE Limited Discoverable Mode
   bit 1 (ON) LE General Discoverable Mode
   bit 2 (OFF) BR/EDR Not Supported
   bit 3 (ON) Simultaneous LE and BR/EDR to Same Device Capable (controller)
   bit 4 (ON) Simultaneous LE and BR/EDR to Same Device Capable (Host)
1A # Number of bytes that follow in second (and last) AD structure
FF # Manufacturer specific data AD type
4C 00 # Company identifier code (0x004C == Apple)
02 # Byte 0 of iBeacon advertisement indicator
15 # Byte 1 of iBeacon advertisement indicator
e2 c5 6d b5 df fb 48 d2 b0 60 d0 f5 a7 10 96 e0 # iBeacon proximity uuid
00 00 # major 
00 00 # minor 
c5 # The 2's complement of the calibrated Tx Power

อุปกรณ์ Bluetooth LE ใด ๆ ที่สามารถกำหนดค่าให้ส่งโฆษณาเฉพาะสามารถสร้างแพ็กเก็ตด้านบนได้ ฉันได้กำหนดค่าคอมพิวเตอร์ Linux โดยใช้ Bluez เพื่อส่งโฆษณานี้และอุปกรณ์ iOS7 ที่ใช้รหัสทดสอบ AirLocate ของ Apple รับมันเป็น iBeacon พร้อมฟิลด์ที่ระบุข้างต้น ดู: ใช้ BlueZ Stack เป็นอุปกรณ์ต่อพ่วง (ผู้โฆษณา)

บล็อกนี้มีรายละเอียดทั้งหมดเกี่ยวกับกระบวนการวิศวกรรมย้อนกลับ


มันเยี่ยมมาก! สิ่งที่ฉันกำลังค้นหา แต่ใครสามารถอธิบายได้ว่าฉันจะคำนวณผลรวมตรวจสอบได้อย่างไร
Benjamin Groener

ฉันมีคำถามอีกข้อหนึ่งให้คุณช่วยเรากรอกข้อมูลจำเพาะให้มากขึ้นอีกนิด สิ่งที่น่าจะเป็นช่วงออกอากาศที่ถูกต้องในมิลลิวินาที? ฉันสังเกตเห็นการใช้รหัสเท็กซัสที่ฉันใช้เป็นพื้นฐานสำหรับ iBeacon ของฉันทำให้แอป Airlocate ของแอปเปิ้ลทำตัวไม่สอดคล้องกันเมื่อแสดงรายการ iBeacons ใกล้เคียง
PaulWoodIII

UUID / proximityUUID เป็นโปรไฟล์ BLE เฉพาะกับ iBeacon หรือไม่หรือขึ้นอยู่กับผู้ผลิตอุปกรณ์ อะไรคือวิธีที่แนะนำสำหรับการแยกแยะระหว่างอุปกรณ์ iBeacon: ที่อยู่ BT MAC, UUID หรือค่าหลัก / รอง?
nickaknudson

เดวิดคุณสามารถกำหนดค่าอุปกรณ์ iOS ด้วยแพ็คเกจโฆษณาเฉพาะเมื่อใช้ Core Bluetooth GATT API ได้หรือไม่ ฉันไม่พบตัวเลือก คุณสามารถกำหนด UUID ที่กำหนดเองสำหรับบริการและลักษณะเฉพาะ แต่ไม่ใช่สำหรับโฆษณา
miguel

1
@ReinaldoJunior AD = ข้อมูลการโฆษณา ดูข้อมูลอ้างอิงในคำตอบโดย slackhappy
RenniePet

47

ดูเหมือนว่าจะขึ้นอยู่กับข้อมูลการโฆษณาโดยเฉพาะข้อมูลผู้ผลิต:

4C00 02 15 585CDE931B0142CC9A1325009BEDC65E 0000 0000 C5

<company identifier (2 bytes)> <type (1 byte)> <data length (1 byte)>
    <uuid (16 bytes)> <major (2 bytes)> <minor (2 bytes)> <RSSI @ 1m>
  • Apple Company Identifier (Little Endian), 0x004c
  • ชนิดข้อมูล 0x02 => iBeacon
  • ความยาวข้อมูล 0x15 = 21
  • uuid: 585CDE931B0142CC9A1325009BEDC65E
  • วิชาเอก: 0000
  • เล็กน้อย: 0000
  • กำลังไฟฟ้า meaured ที่ 1 เมตร: 0xc5 = -59

ฉันมีสคริปต์ node.jsนี้ทำงานบน Linux พร้อมกับตัวอย่างแอปAirLocate


น่าเศร้าที่สคริปต์ไม่สามารถใช้งานได้อีกต่อไป คุณต้องการแบ่งปันอีกครั้งหรือไม่
Thomaschaaf

@Thomaschaaf ขอโทษฉันลบที่นี่เป็นลิงค์ไปยังรุ่นเก่าใน Github ฉันได้อัปเดตBleacon แล้วเพื่อไม่ต้องใช้การวางไข่
sandeepmistry

"กำลัง meaured ที่ 1 เมตร: 0xc5 = -59" คุณคำนวณจาก 0xc5 ถึง -59 อย่างไร
andreasbecker.de


@sandeepmistry ลิงก์ไปยังสคริปต์ node.js เสียแล้ว
tedyyu

20

เพียงเพื่อปรับความแตกต่างระหว่างคำตอบของ sandeepmistry และคำตอบของ davidgyoung:

02 01 1a 1a ff 4C 00

เป็นส่วนหนึ่งของข้อกำหนดรูปแบบข้อมูลโฆษณา [1]

  02 # length of following AD structure
  01 # <<Flags>> AD Structure [2]
  1a # read as b00011010. 
     # In this case, LE General Discoverable,
     # and simultaneous BR/EDR but this may vary by device!

  1a # length of following AD structure
  FF # Manufacturer specific data [3]
4C00 # Apple Inc [4]
0215 # ?? some 2-byte header

สิ่งที่ขาดหายไปจากโฆษณาคือการให้บริการ [5] ฉันคิดว่าโปรโตคอล iBeacon นั้นไม่มีความสัมพันธ์กับ GATT และการค้นพบบริการมาตรฐาน หากคุณดาวน์โหลดโปรแกรม iBeacon ของ RedBearLab คุณจะเห็นว่าพวกเขาใช้ GATT ในการกำหนดค่าพารามิเตอร์การโฆษณา แต่สิ่งนี้ดูเหมือนจะเฉพาะเจาะจงสำหรับการนำไปใช้ของพวกเขาและไม่ใช่ส่วนหนึ่งของข้อมูลจำเพาะ โปรแกรม AirLocate ดูเหมือนจะไม่ใช้ GATT สำหรับการกำหนดค่าเช่นตาม LightBlue และหรือโปรแกรมอื่นที่คล้ายคลึงกันที่ฉันลอง

อ้างอิง:

  1. Core Bluetooth Spec v4, Vol 3, Part C, 11
  2. เล่ม 3, ส่วน C, 18.1
  3. เล่ม 3, ส่วน C, 18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. เล่ม 3, ส่วน C, 18.2

ขอบคุณ @slackhappy ฉันได้อัปเดตคำตอบแล้ว ส่วนหัว 2 ไบต์คือชนิดข้อมูล 0x02, 0x15 = 21 ความยาวข้อมูล
sandeepmistry

ขอบคุณ @slackhappy นี่เป็นสิ่งที่ดี แต่ฉันจะถามคำถามโง่ ๆ ได้ไหม? หากฉันต้องการส่งข้อความบางอย่างเช่น "มาเพื่อรับกาแฟฟรี" หรืออะไรทำนองนั้นฉันจะแทนที่FFตัวอย่างของคุณด้วยค่า HEX ของสตริงของฉันหรือไม่ (และอัปเดตความยาวของโครงสร้างโฆษณาเป็นชุด?)
ทำเครื่องหมาย

6

หากเหตุผลที่คุณถามคำถามนี้เป็นเพราะคุณต้องการใช้ Core Bluetooth เพื่อโฆษณาเป็น iBeaconแทนที่จะใช้ API มาตรฐานคุณสามารถทำได้โดยการโฆษณา NSDictionary เช่น:

{
    kCBAdvDataAppleBeaconKey = <a7c4c5fa a8dd4ba1 b9a8a240 584f02d3 00040fa0 c5>;
}

ดูคำตอบนี้สำหรับข้อมูลเพิ่มเติม



0

โปรไฟล์ iBeacon มี 31 ไบต์ซึ่งรวมถึงสิ่งต่อไปนี้

  1. คำนำหน้า - 9 ไบต์ - ซึ่งรวมถึงข้อมูล adv และข้อมูลผู้ผลิต
  2. UUID - 16 ไบต์
  3. เมเจอร์ - 2 ไบต์
  4. เล็กน้อย - 2 ไบต์
  5. TxPower - 1 ไบต์

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.