İBeacon Bluetooth Profili nedir


150

Bazı bluetooth düşük enerjili dev kitleriyle kendi iBeacon'umu oluşturmak istiyorum. Apple henüz iBeacons için bir spesifikasyon yayınlamadı, ancak birkaç donanım geliştiricisi iBeacon'u AirLocate Sample kodundan tersine değiştirdi ve iBeacon dev kitlerini satmaya başladı.

Peki iBeacon Bluetooth Profili nedir?

Bluetooth Düşük Enerji, LE profil hizmeti keşfi için GATT kullanır. Bu yüzden bence Öznitelik Tutamağı, Öznitelik Türü, Öznitelik Değeri ve belki de iBeacon özniteliğinin Öznitelik İzinlerini bilmemiz gerekir. Peki UUID değeri E2C56DB5-DFFB-48D2-B060-D0F5A71096E0 olan bir iBeacon için 1 büyük değeri ve 1 küçük değeri Bluetooth GATT profil hizmeti ne olurdu?

Apple'ın forumlarındaki tartışmalar ve dokümanlar aracılığıyla yaptığım bazı varsayımlar.

  1. Bir iBeacon olduğunu bilmek için bir Bluetooth çevre biriminin profil hizmetini (GATT) görmeniz yeterlidir.

  2. Major ve Minor anahtarları bu profil hizmetinin herhangi bir yerinde kodlanır

İBeacon Dev Kitleri olan ve bu sonuca zaten sahip gibi görünen bazı şirketler Heres:

Umarım zamanla Bluetooth.org'da şu şekilde bir profil yayınlayacağız: https://www.bluetooth.org/en-us/specification/adopted-specifications


aslında şimdi 4 özellik değerinin ne olduğunu anladım
PaulWoodIII 23:13

@ Dan1One Açık Mavi kullanarak hizmeti çoğalttım, sonra Apple'ın AirLocate örnek kodunu kullanarak Yinelenen hizmeti sıralayamadım Daha fazla bir şey olduğunu düşünüyorum, Ayrıca Açık Mavi'nin Özellik Kolu listelenmiyor
PaulWoodIII

CBPeripheralManager (arka planda çalışan) ile bir iBeacon veya başka bir (iOS olmayan yazılım) veya donanım parçası oluşturmanın bir yolunu mu arıyorsunuz? Bu, gerekli ayrıntıya götürecektir.
Eylül'ü

@Ana ilk paragraf notları olarak kendi donanımımı takmaya çalışıyorum. Ben bağlantılı Söz belirtildiği gibi Ama potansiyel olarak arka planda iBeacon reklamını CBPeripheralManager kullanılarak bağlanmış sorunun cevabı yararlı olabilir
PaulWoodIII

1
Harika! 2013'te soruyu sorduğumda, bu belgeyi gelecekteki programcılar için burada paylaşabilir misiniz, henüz mevcut değildi
PaulWoodIII

Yanıtlar:


228

ProximityUUID E2C56DB5-DFFB-48D2-B060-D0F5A71096E0, majör 0, minör 0ve kalibre edilmiş -59RSSI Tx Gücü olan bir iBeacon için iletilen BLE reklam paketi şöyle görünür:

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

Bu paket aşağıdaki gibi parçalanabilir:

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

Bu paketin önemli kısmı, şu şekilde ayrılabilen Bluetooth Reklamıdır:

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

Belirli bir reklam göndermek üzere yapılandırılabilen herhangi bir Bluetooth LE cihazı yukarıdaki paketi oluşturabilir. Bu reklamı göndermek için Bluez kullanarak bir Linux bilgisayar yapılandırdım ve Apple'ın AirLocate test kodunu çalıştıran iOS7 cihazları, yukarıda belirtilen alanlarla iBeacon olarak aldı. Bkz. BlueZ Stack'i Çevresel Olarak Kullanma (Reklamveren)

Bu blog tersine mühendislik süreci hakkında tüm detaylara sahiptir.


Bu harika! Tam aradığım şey. Ama bir kimse sağlama toplamını nasıl hesaplayabileceğimi açıklayabilir mi?
Benjamin Groener

Teknik özellikleri biraz daha tamamlamamıza yardımcı olacak başka bir sorum daha var. Ms cinsinden doğru yayın aralığı nedir? İBeacon için temel olarak kullandığım texas enstrümanlar kodunu kullanarak fark ediyorum yakındaki iBeacons listesini görüntülerken apple Airlocate uygulaması tür tutarsız yapar.
PaulWoodIII

UUID / proximityUUID, iBeacon'a özgü bir BLE profili mi yoksa cihaz üreticisine mi bağlı? İBeacon cihazları arasında ayrım yapmak için tercih edilen yöntem nedir: BT MAC adresi, UUID veya ana / küçük değerler?
nickaknudson

David, Core Bluetooth GATT API'lerini kullanırken belirli bir reklam paketine sahip bir iOS cihazını yapılandırabildiniz mi? Seçeneği bulamadım. Reklamlar için değil, Hizmetler ve Özellikler için özel UUID'ler tanımlayabilirsiniz.
miguel

1
@ReinaldoJunior AD = Reklam Verileri. Cevaplar slackhappy tarafından verilen referanslara bakınız.
RenniePet

47

Reklam verilerine, özellikle de üretici verilerine dayanıyor gibi görünüyor:

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 Şirket Tanımlayıcısı (Little Endian), 0x004c
  • veri türü, 0x02 => iBeacon
  • veri uzunluğu, 0x15 = 21
  • uuid: 585CDE931B0142CC9A1325009BEDC65E
  • büyük: 0000
  • küçük: 0000
  • 1 metrede ölçülen güç: 0xc5 = -59

Örnek AirLocate uygulama örneği ile Linux üzerinde çalışan bu node.js komut dosyası var .


Ne yazık ki komut dosyası artık mevcut değil. Tekrar paylaşmayı düşünür müsünüz?
Thomaschaaf

@Thomaschaaf, burada kaldırdığım için üzgünüm Github'daki eski sürüme bir bağlantı . Ben de yumurtlama hcitool / hciconfig gerektirmeyen bleacon güncelledim .
sandeepmistry

"1 metrede ölçülen güç: 0xc5 = -59" 0xc5'ten -59'a nasıl hesaplarsınız?
andreasbecker.de


@sandeepmistry node.js komut dosyasının bağlantısı artık bozuk.
tedyyu

20

Sandeepmistry'in yanıtı ve davidgyoung'un yanıtı arasındaki farkı uzlaştırmak için:

02 01 1a 1a ff 4C 00

Reklam veri biçimi spesifikasyonunun bir parçasıdır [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

AD'den eksik bir Hizmet [5] tanımıdır. İBeacon protokolünün kendisinin GATT ve standart servis keşfi ile hiçbir ilişkisi olmadığını düşünüyorum. RedBearLab'ın iBeacon programını indirirseniz, reklam parametrelerini yapılandırmak için GATT'yi kullandıklarını göreceksiniz, ancak bu, spesifikasyonun bir parçası değil, uygulamalarına özgü görünüyor. AirLocate programı, örneğin LightBlue ve denediğim diğer benzer programlara göre GATT'yi yapılandırma için kullanmıyor gibi görünüyor.

Referanslar:

  1. Çekirdek Bluetooth Spec v4, Cilt 3, Bölüm C, 11
  2. Cilt 3, Bölüm C, 18.1
  3. Cilt 3, Bölüm C, 18.11
  4. https://www.bluetooth.org/en-us/specification/assigned-numbers/company-identifiers
  5. Cilt 3, Bölüm C, 18.2

Teşekkürler @slackhappy, cevabımı güncelledim. 2 bayt başlığı 0x02 veri tipidir, 0x15 = 21 veri uzunluğu.
sandeepmistry

teşekkürler @slackhappy bu iyi, ama aptalca bir soru sorabilir miyim? Eğer "Ücretsiz bir kahve için gel" gibi bir mesaj ya da bunun gibi bir şey göndermek istersem, sadece FFsenin örneğindeki dizeyi HEX değeriyle değiştirir miydim ? (ve ayrıca paketine AD yapısının uzunluğu güncellemek?)
Mark



0

iBeacon Profili aşağıdakileri içeren 31 Bayt içerir

  1. Önek - 9 Bayt - adv verilerini ve Üretici verilerini içerir
  2. UUID - 16 Bayt
  3. Büyük - 2 Bayt
  4. Küçük - 2 Bayt
  5. TxPower - 1 Bayt

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.