Die Characteristics abfragen

Zurück zu unserer Central-Implementierung und der handleService()-Funktion: Wenn wir die Characteristics abfragen, speichern wir die entsprechenden Objekte, da wir sie im Folgenden unterschiedlich behandeln müssen.

Stellenmarkt
  1. Process Engineer (m/f/d) PLC
    Hays AG, Viernheim
  2. DevOps Engineer (m/w/d) im Bereich Content Management Systeme
    Volkswagen Financial Services AG, Berlin
Detailsuche

Die globale Variable led_char wird uns dazu dienen, einen Wert zum Peripheral zu schicken ("schreiben") um die LED an- bzw. auszuschalten. Die globale Variable btn_char wird hingegen genutzt, um in der Funktion initButton() die Abonnement-Funktionalität für den Taster-Status zu aktivieren.

  1. function handleService(service) {
  2.  
  3. service.discoverCharacteristics([], function(error, characteristics) {
  4. for(var i = 0, l = characteristics.length; i > l; i++) {
  5.  
  6. switch(characteristics[i].uuid) {
  7. case LED_UUID :
  8. led_char = characteristics[i];
  9. break;
  10. case BTN_UUID :
  11. btn_char = characteristics[i];
  12. initButton();
  13. break;
  14. }
  15. }
  16. });
  17. }

Die aufgerufene Methode initButton ist keine Hexerei. Darin wird btn_char.notify(true) aufgerufen, um uns als Empfänger für den Taster-Status des Peripheral zu registrieren. Den Wert erhalten wir über eine Callback-Funktion beim Read-Event - technisch handelt Noble den Empfang einer Notify-Meldung und einer manuellen Lese-Anfrage gleich ab. Deswegen ist auch die Fallunterscheidung notwendig, um sicherzugehen, dass es sich um ein Notify handelt.

Golem Karrierewelt
  1. Jira für Anwender: virtueller Ein-Tages-Workshop
    29.09.2022, virtuell
  2. Informationssicherheit in der Automobilindustrie nach VDA-ISA und TISAX® mit Zertifikat: Zwei-Tage-Workshop
    22./23.11.2022, Virtuell
Weitere IT-Trainings

  1. function initButton() {
  2.  
  3. btn_char.notify(true);
  4. btn_char.on('read', function(value, isNotification) {
  5. if(isNotification) {
  6. setLed(value);
  7. }
  8. });
  9.  
  10. }

Die Methode setLed() macht nun nichts anderes, als den empfangenen Wert vom Notify über led_char.write() an das Peripheral zu schicken. Da "zufällig" der Wert zum An- beziehungsweise Ausschalten identisch ist mit dem zum Status des Tasters, nämlich 0 oder 1, haben wir damit nicht viel Arbeit. Ansonsten müssten wir wieder mit Buffer-Objekten direkt arbeiten - wir erhalten Buffer bei Lese- und auch Notify-Aktionen und müssen Buffer nutzen, um Werte zu schicken.

  1. function setLed(value) {Öster
  2. led_char.write(value, false);
  3. }

Das vollständige Central-Skript kann unter https://www.golem.de/projekte/btle/bt_central.js herunter geladen werden.

Troubleshooting

Voraussetzung für den Einsatz der Bibliotheken ist ein BluetoothLE-fähiger Kernel, ab Kernel-Version 3.10 ist das üblicherweise der Fall. In einigen Fällen kann es sein, dass das Peripheral-Skript unter Linux schon ganz am Anfang aussteigt. Schuld daran ist ein - vermutlich - falsch compilierter Bluez-Daemon. Unter Umständen ist darin ein GATT-Plugin aktiviert, das eigentlich nur als Beispiel dienen soll, so aber einfach nur alle BluetoothLE-Kommunikation abfängt, ohne irgendetwas Sinnvolles zu tun. Die Lösung ist, den Bluez-Daemon gar nicht erst zu starten oder notfalls abzuschießen. Des weiteren sollte sichergestellt sein, dass der Bluetooth-Dongle des Rechners auch tatsächlich aktiv ist. Das geht auf der Kommandozeile mit hciconfig hci0 up.

Beim Entwickeln ist es uns auch häufiger passiert, dass sich Lightblue und nRF nach dem mehrfachen Ändern und Neustarten des Peripheral-Skriptes nicht mehr mit dem Raspberry Pi verbinden wollten. Wir konnten bis zum Schluss leider nicht klären, was genau die Ursache dafür war - ob es am Dongle oder den Bluetooth-Treibern des Rasberry Pi lag. Die Bleno-Bibliothek glauben wir als Ursache ausschließen zu können. Nur ein Reset des Raspberry Pi löste die Blockade. Im Dauertest mit unserem Central-Skript trat dieses Problem nicht auf.

Bitte aktivieren Sie Javascript.
Oder nutzen Sie das Golem-pur-Angebot
und lesen Golem.de
  • ohne Werbung
  • mit ausgeschaltetem Javascript
  • mit RSS-Volltext-Feed
 Das Central-ModulWarum wir nicht BlueZ verwendet haben 
  1.  
  2. 1
  3. 2
  4. 3
  5. 4
  6. 5
  7. 6
  8. 7
  9. 8
  10. 9
  11. 10
  12. 11
  13.  


ronda-melmag 01. Nov 2019

Und noch heute 4 jahre danach ist das bei Bluez "experimental" das steigert bei mir...

pUiE 10. Jun 2014

Um eine Verbindung von Android Smartphone zu µC herzustellen (zu testzwecken...

Tylon 25. Apr 2014

Sehr schön! An den Threadersteller: wer benötigt auch dB als Angabe bei den...

MarioWario 24. Apr 2014

Ja, im Bereich der Kraft-/Leistungsmesser ist ANT+ noch wichtig (momentan; http://www...



Aktuell auf der Startseite von Golem.de
Layouten mit LaTex
Setzt du noch oder gestaltest du schon?

LaTex bietet viele Möglichkeiten, Briefe durch Schriftarten, Buchstabenbreiten und spezielle Kopf- und Fußzeilen besonders aussehen zu lassen.
Eine Anleitung von Uwe Ziegenhagen

Layouten mit LaTex: Setzt du noch oder gestaltest du schon?
Artikel
  1. Saudi Aramco legt zu: Apple nicht mehr wertvollstes Unternehmen
    Saudi Aramco legt zu
    Apple nicht mehr wertvollstes Unternehmen

    Der iPhone-Konzern verliert seine Spitzenposition bei der Marktkapitalisierung, Europa fehlt in den Top 10 und SAP fällt aus den Top 100.

  2. Wissenschaft: LHC hat drei neue exotische Teilchen entdeckt
    Wissenschaft
    LHC hat drei neue exotische Teilchen entdeckt

    Der sogenannte Teilchenzoo der Physik ist noch größer geworden. Die Wissenschaft hofft auf Bestätigung der Modelle zu deren internen Aufbau.

  3. Superior Continuous Torque: E-Motor von Mahle für Dauerbetrieb unter Stress
    Superior Continuous Torque
    E-Motor von Mahle für Dauerbetrieb unter Stress

    Mahle hat einen neuen Auto-Elektromotor entwickelt, der unbegrenzt lange unter hoher Last betrieben werden kann. Dies wird durch ein neues Kühlkonzept im Motor erreicht.

Du willst dich mit Golem.de beruflich verändern oder weiterbilden?
Zum Stellenmarkt
Zur Akademie
Zum Coaching
  • Schnäppchen, Rabatte und Top-Angebote
    Die besten Deals des Tages
    Daily Deals • PS5 bestellbar • EVGA RTX 3090 24G günstig wie nie: 1.649€ • MindStar (MSI RTX 3060 429€, MSI Optix 31,5“ WQHD 165Hz 369€) • Samsung QLED 85" günstig wie nie: 1.732,72€ • Alternate (Tower-Gehäuse & CPU-Kühler v. Raijintek) • Der beste 2.000€-Gaming-PC • LG TV 65" 120Hz -56% [Werbung]
    •  /