Gebruik BlueZ Stack als randapparatuur (adverteerder)

  • Doel: gebruik BlueZ en een Bluetooth 4LE-dongle om een ​​randapparaat te maken dat reclame maakt voor het Bluetooth-equivalent van “Hello World”.

  • Waar ik ben: ik heb momenteel de BlueZ-stack geïnstalleerd en gedownload, ik kan de hci-tool gebruiken om de Bluetooth-dongle te herkennen en te zien. Ik heb aan hciconfig leadv gesleuteld, maar ik begrijp het niet helemaal/begrijp niet wat er aan de hand is.

  • Welke hulp ik denk nodig te hebben: ik moet naar de volgende stap. Als iemand me kan wijzen op een goede bron, me hier doorheen kan leiden, of wat dan ook, zou het zeer op prijs stellen. Als ik extra been(zoek)werk moet doen, kan dat, maar ik heb Google en SO doorzocht met zoveel verschillende afgeleiden van deze vraag als ik maar kan bedenken.

  • *Ik heb dit ook als CoreBluetooth getagd in de hoop dat een iOS-ontwikkelaar hier ooit aan heeft gesleuteld.

    EDIT: als reactie op een opmerking lijkt het verstandig om te vermelden wat mijn einddoel is. Ik zou uiteindelijk via de dongle de meest eenvoudige berichten/signalen willen adverteren en die op een iOS-apparaat (CoreBluetooth) oppikken. Ik heb de iOS-kant van de dingen goed kunnen laten werken (veel documentatie vergeleken met de Linux-kant van de dingen), maar het moeilijkste voor mij is om deze adapterconfiguratie als randapparaat te krijgen. De BlueZ-stack is een verschrikkelijk raadsel voor mij.

    EDIT: na meer speurwerk kwam ik uiteindelijk dit bericht tegen: Raspberry Pi Bluetooth 4.0 Verbinding.
    Dit heeft me geleid naar het onderwerp van een GATT-server, ik zal doorgaan met dit onderwerp.

    EDIT: Oké, dus mijn zoektocht naar leren gaat door. De afgelopen dagen ben ik dieper in de tools hci*, sdptool en gatttool gedoken. Ik ben op het punt gekomen dat ik de adapter kan instellen om te adverteren, “hciconfig hci0 leadv”. Op dit punt kan ik de adapter met succes “zien”, maar ik kan er niets van aflezen. Ik zie de vriendelijke naam niet eens. Ik blijf doorgaan, maar zoals altijd zijn alle hulp/suggesties meer dan welkom.

    BEWERK: Relevante link, solide overzicht van Bluetooth LE met betrekking tot iOS.
    https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html#//apple_ref/doc/uid/TP40013257-CH1-SW1

    LAATSTE BEWERKING: Hallo allemaal, deze link behandelt hoe je een iBeacon maakt met een Raspberry Pi + BlueZ…
    http://www.wadewegner. com/2014/05/create-an-ibeacon-transmitter-with-the-raspberry-pi/


    Antwoord 1, autoriteit 100%

    Als uw Bluetooth-dongle is aangesloten, geeft het uitvoeren van de volgende opdracht de apparaatnaam en de status weer:

    $ hciconfig

    De uitvoer zou er ongeveer zo uit moeten zien:

    hci0:    Type: BR/EDR  Bus: USB
         BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
         DOWN
         RX bytes:1000 acl:0 sco:0 events:47 errors:0
         TX bytes:1072 acl:0 sco:0 commands:47 errors:0
    

    Dit geeft aan dat het apparaat met de naam hci0 is uitgeschakeld. Geef het volgende commando om het naar voren te brengen:

    $ sudo hciconfig hci0 up

    Nu zou het er zo uit moeten zien:

    $ hciconfig
    hci0:   Type: BR/EDR  Bus: USB
         BD Address: 00:01:02:aa:bb:cc  ACL MTU: 1021:8  SCO MTU: 64:1
         UP RUNNING
         RX bytes:1000 acl:0 sco:0 events:47 errors:0
         TX bytes:1072 acl:0 sco:0 commands:47 errors:0
    

    Voer vervolgens het volgende voorbeeldcommando uit om de te verzenden advertentiegegevens te configureren.

    $ sudo hcitool -i hci0 cmd 0x08 0x0008 1e 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 00 00 00 00 00 00 00 00 00 00 00 00 00
    

    U kunt de hex-bytes (beginnend met 1e) wijzigen om verschillende bytereeksen voor uw advertentie te verzenden. Een die letterlijk de ASCII-codes voor “HELLO WORLD” verzendt, zou gebruiken: 48 45 4c 4c 4f 57 4f 52 4c 44(EDIT:Maar u moet dit ook vooraf bericht met een geldige koptekst, zie hier)

    Gebruik nu de volgende opdracht om advertenties op de dongle te activeren, hierdoor worden “Helo World”-pakketten verzonden.

    $ sudo hciconfig hci0 leadv 0

    EDIT:de bovenstaande opdracht maakt de geadverteerde service aansluitbaar. Als u geen verbindingen wilt toestaan, wijzigt u dit in $ sudo hciconfig hci0 leadv 3

    U kunt advertenties ook uitschakelen met de volgende opdracht:

    $ sudo hciconfig hci0 noleadv


    Antwoord 2, autoriteit 14%

    hier wat meer informatie toevoegen (ref BlueZ5.x):

    • bluez stelt DBUS api niet beschikbaar voor gatt-serverregistratie; je hebt een profielimplementatie beschikbaar, maar je moet deze configureren en compileren met de optie –enable-experimental of gatt-example inschakelen onder de plug-inmap die een gatt-server registreert als voorbeeld

    • wanneer u adverteert met hciconfig hci0 leadv, let dan op de geadverteerde gegevens.
      in het onderstaande voorbeeld voor iBeacon

      sudo hcitool -i hci0 cmd 0x08 0x0008 1e **02 01 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 00 00 00 00 00 00 00 00 00 00 00 00 00

      het vetgedrukte deel is voor een AD-structuur die is gerelateerd aan het vlaggenveld (controleer onder bluetooth-specificatie voor advertisgin-gegevensformaat). Met deze markeringsinstellingen adverteert het apparaat zichzelf als gelijktijdige LE en BR-EDR.

      Mijn ervaring is dat wanneer op deze manier wordt geadverteerd, een Android-apparaat dat het bluez-apparaat scant dat als BLE-randapparaat fungeert, een verbinding tot stand brengt via klassieke bluetooth (vanwege de vlaginstellingen) en niet via BLE (merk op dat de verbindingsprocedures voor LE en Klassiek). Ik weet niet zeker hoe het centrale apparaat van Apple in dit geval werkt. Hoe dan ook, om dit te voorkomen, kunt u 06 instellen in plaats van 1A, zodat BR-EDR-ondersteuning niet wordt geadverteerd. Op deze manier zie je een verbinding over BLE.

    Als je het wilt testen met een centraal Android-apparaat, is daar een gratis Scandinavische app voor.

    Other episodes