Hồ sơ Bluetooth iBeacon là gì


150

Tôi muốn tạo iBeacon của riêng mình với một số bộ phát triển năng lượng thấp bluetooth. Apple vẫn chưa phát hành thông số kỹ thuật cho iBeacons, tuy nhiên một số nhà phát triển phần cứng đã đảo ngược iBeacon từ mã AirLocate Sample và bắt đầu bán bộ dụng cụ phát triển iBeacon.

Vậy cấu hình Bluetooth của iBeacon là gì?

Bluetooth Low Energy sử dụng GATT để khám phá dịch vụ hồ sơ LE. Vì vậy, tôi nghĩ rằng chúng ta cần biết Xử lý thuộc tính, Loại thuộc tính, Giá trị thuộc tính và có thể là Quyền thuộc tính của thuộc tính iBeacon. Vì vậy, đối với một iBeacon có UUID là E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, giá trị chính là 1 và giá trị nhỏ là 1 dịch vụ cấu hình Bluetooth GATT sẽ là gì?

Đây là một số giả định tôi đã đưa ra từ cuộc thảo luận trên các diễn đàn của Apple và thông qua các tài liệu.

  1. Bạn chỉ cần xem dịch vụ cấu hình (GATT) của thiết bị ngoại vi Bluetooth để biết đó là iBeacon.

  2. Các khóa chính và phụ được mã hóa ở đâu đó trong dịch vụ hồ sơ này

Đây là một số công ty có iBeacon Dev Kits dường như đã có con số này:

Hy vọng trong thời gian tới, chúng tôi sẽ có một hồ sơ được đăng trên Bluetooth.org như sau: https://www.bluetooth.org/en-us/specification/adopted-specutions


thực sự bây giờ tôi đã hiểu được 4 giá trị thuộc tính là gì
PaulWoodIII

@ Dan1One Tôi đã sao chép dịch vụ bằng Light Blue, sau đó sử dụng mã mẫu AirLocate của Apple Tôi không thể bao gồm dịch vụ trùng lặp Tôi nghĩ có một cái gì đó nữa, Ngoài ra Light Blue không có Xử lý thuộc tính được liệt kê
PaulWoodIII

Bạn đang tìm cách tạo ra một iBeacon với CBPerextalManager (chạy trong nền) hoặc một phần mềm (không phải iOS) hoặc phần cứng khác? Điều này sẽ dẫn đến các chi tiết cần thiết.
Wain

@Wain Tôi đang cố gắng đưa vào phần cứng của riêng tôi như là ghi chú đoạn đầu tiên. Nhưng như tôi đã lưu ý trong câu hỏi được liên kết, nó có khả năng hữu ích cho câu trả lời của câu hỏi được liên kết bằng cách sử dụng CBPerextalManager quảng cáo iBeacon trong nền
PaulWoodIII

1
Tuyệt quá! bạn có thể chia sẻ tài liệu đó ở đây cho các lập trình viên tương lai không, khi tôi đặt câu hỏi vào năm 2013 thì nó chắc chắn chưa tồn tại
PaulWoodIII

Câu trả lời:


228

Đối với một iBeacon có ProighborUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, Tx Power chính 0, phụ 0và được hiệu chỉnh của -59RSSI, gói quảng cáo BLE được truyền tải trông như thế này:

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

Gói này có thể được chia nhỏ như sau:

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

Phần quan trọng của gói đó là Quảng cáo Bluetooth, có thể được chia nhỏ như thế này:

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

Bất kỳ thiết bị Bluetooth LE nào có thể được định cấu hình để gửi quảng cáo cụ thể đều có thể tạo gói trên. Tôi đã định cấu hình máy tính Linux sử dụng Bluez để gửi quảng cáo này và các thiết bị iOS7 chạy mã kiểm tra AirLocate của Apple chọn nó dưới dạng iBeacon với các trường được chỉ định ở trên. Xem: Sử dụng BlueZ Stack làm ngoại vi (Nhà quảng cáo)

Đây diễn đàn có đầy đủ chi tiết về quá trình kỹ thuật đảo ngược.


Điều đó thật tuyệt! Chính xác những gì tôi đang tìm kiếm. Nhưng bất cứ ai có thể giải thích làm thế nào tôi có thể tính toán tổng kiểm tra?
Benjamin Groener

Tôi có một câu hỏi khác cho bạn để giúp chúng tôi hoàn thành thông số kỹ thuật hơn một chút. Điều gì có vẻ là khoảng thời gian phát sóng chính xác trong ms? Tôi nhận thấy việc sử dụng mã công cụ texas Tôi đang sử dụng làm cơ sở cho iBeacon của mình khiến ứng dụng Airlocate của apple hoạt động không nhất quán khi hiển thị danh sách các iBeacons gần đó.
PaulWoodIII

Là UUID / lân cậnUUID là cấu hình BLE dành riêng cho iBeacon hay là tùy thuộc vào nhà sản xuất thiết bị? Phương pháp ưa thích để phân biệt giữa các thiết bị iBeacon: Địa chỉ MAC MAC, UUID hoặc các giá trị chính / phụ là gì?
nickaknudson

David, bạn đã có thể định cấu hình thiết bị iOS với gói quảng cáo cụ thể khi sử dụng API GATT Bluetooth không? Tôi không thể tìm thấy tùy chọn. Bạn có thể xác định UUID tùy chỉnh cho Dịch vụ và Đặc điểm nhưng không dành cho quảng cáo.
miguel

1
@ReinaldoJunior AD = Dữ liệu quảng cáo. Xem tài liệu tham khảo trong câu trả lời của slackhappy.
RenniePet

47

Nó dường như dựa trên dữ liệu quảng cáo, đặc biệt là dữ liệu của nhà sản xuất:

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>
  • Mã định danh công ty Apple (Little Endian), 0x004c
  • kiểu dữ liệu, 0x02 => iBeacon
  • chiều dài dữ liệu, 0x15 = 21
  • uuid: 585CDE931B0142CC9A1325009BEDC65E
  • chuyên ngành: 0000
  • nhỏ: 0000
  • công suất được đo ở 1 mét: 0xc5 = -59

Tôi có tập lệnh node.js này hoạt động trên Linux với ví dụ ứng dụng AirLocate mẫu.


Đáng buồn là kịch bản không có sẵn nữa. Bạn có muốn chia sẻ nó một lần nữa?
Thomaschaaf

@Thomaschaaf xin lỗi tôi đã xóa ở đây là một liên kết đến phiên bản cũ trong Github. Tôi cũng đã cập nhật bleacon để không yêu cầu sinh sản hcitool / hciconfig.
Sandeepmology

"công suất được đo ở 1 mét: 0xc5 = -59" làm thế nào để bạn tính từ 0xc5 đến -59?
andreasbecker.de 16/07/14

@ andreasbecker.de bạn lấy phần bổ sung của hai
phương pháp quét cát

@sandeepmistry liên kết đến tập lệnh node.js hiện đã bị hỏng.
tedyyu 18/07/2015

20

Chỉ để dung hòa sự khác biệt giữa câu trả lời của Sandeepmology và câu trả lời của davidgyoung:

02 01 1a 1a ff 4C 00

Là một phần của đặc tả định dạng dữ liệu quảng cáo [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

Thiếu từ AD là một định nghĩa Dịch vụ [5]. Tôi nghĩ rằng bản thân giao thức iBeacon không có mối quan hệ nào với GATT và khám phá dịch vụ tiêu chuẩn. Nếu bạn tải xuống chương trình iBeacon của RedBearLab, bạn sẽ thấy rằng họ tình cờ sử dụng GATT để định cấu hình các tham số quảng cáo, nhưng điều này dường như cụ thể đối với việc triển khai của họ và không phải là một phần của thông số kỹ thuật. Chẳng hạn, chương trình AirLocate dường như không sử dụng GATT cho cấu hình, theo LightBlue và các chương trình tương tự khác mà tôi đã thử.

Người giới thiệu:

  1. Lõi Bluetooth Spec v4, Tập 3, Phần C, 11
  2. Tập 3, Phần C, 18.1
  3. Tập 3, Phần C, 18.11
  4. https://www.bluetooth.org/en-us/specification/assign-numbers/company-identifier
  5. Tập 3, Phần C, 18.2

Cảm ơn @slackhappy, tôi đã cập nhật câu trả lời của mình. Tiêu đề 2 byte là loại dữ liệu 0x02, 0x15 = 21 chiều dài dữ liệu.
Sandeepmology

cảm ơn @slackhappy điều này là tốt, nhưng tôi có thể hỏi một câu hỏi ngớ ngẩn không? Nếu tôi muốn gửi một số tin nhắn như "Đến uống cà phê miễn phí" hoặc đại loại như thế, tôi sẽ chỉ thay thế FFtrong ví dụ của bạn bằng giá trị HEX của chuỗi của tôi? (và cũng cập nhật độ dài của cấu trúc AD thành bộ?)
Đánh dấu



0

Hồ sơ iBeacon chứa 31 byte bao gồm các nội dung sau

  1. Tiền tố - 9 byte - bao gồm dữ liệu adv và dữ liệu nhà sản xuất
  2. UUID - 16 byte
  3. Chính - 2 byte
  4. Nhỏ - 2 byte
  5. TxPower - 1 byte

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.