ESPTOP 10 BLE -Tutorial mit Arduino IDE

ESPTOP 10 BLE -Tutorial mit Arduino IDE
ESP32 ist eine IoT-basierte Mikrocontroller-Karte mit vorinstalliertem WLAN und Dual Bluetooth. Sowohl WiFi als auch Bluetooth spielen eine entscheidende Rolle beim Austausch von Daten zwischen Geräten über die drahtlose Kommunikation.

ESP32 unterstützt sowohl Bluetooth Classic als auch Bluetooth Low Energy. Hier konzentrieren wir uns auf Bluetooth niedrige Energie. Lassen Sie es uns im Detail sehen.

Was ist Bluetooth niedriger Energie

Ble oder Bluetooth Low Energy ist ein Stromsparmodus von Bluetooth. Die Hauptanwendung umfasst die Datenübertragung über kurze Entfernungen wie Türeintritt, Smart Watches, Wearables, Blutdruckmonitor, Sicherheit und Heimautomationen. Ble kann begrenzte Daten übertragen.

Im Gegensatz zu Bluetooth Classic, der die ganze Zeit eingeschaltet bleibt, bleibt Ble im Schlafmodus, außer wenn es aufgerufen wird oder die Verbindung eingeleitet wird. Dies macht die BLE sehr leistungsfähig und verbraucht 100 -mal weniger Leistung als die klassische.

Hier finden Sie einen kurzen Vergleich von Bluetooth Classic mit Bluetooth Low Energy:

Spezifikation Bluetooth Classic Bluetooth niedriger Energie/BLE
Datenübertragungsrate 2-3 Mbit / s 1 Mbit / s
Bereich ~ 10-100 m ~ 50 m
Arbeitsfrequenz 79 rf 40 rf
Spitzenstromverbrauch ~ 30 mA <15mA
Energieverbrauch 1W 0.01-0.5W
Gesamtzeit zum Senden von Daten 100 ms 3 ms
Anwendungen Audio, Musik -Streaming Sensor, Wearables

Für einen detaillierteren Vergleich finden Sie hier, um die offizielle Bluetooth -Site zu besuchen.

Ble Server und Client

Bluetooth Low Energy unterstützt das Gerät auf zwei verschiedene Arten: Server und Client. ESP32 kann sowohl als Server als auch als Client für Bluetooth mit niedriger Energie fungieren.

Ble -Unterstützung nach Kommunikationsmodi:

  • Punkt zu Punkt: Kommunikation zwischen zwei Punkten oder Knoten, die Server und Client sind.
  • Broadcast -Modus: Der Server überträgt Daten auf viele Geräte.
  • Mesh-Netzwerk: Mehrere Geräte, die auch als viele Verbindungen angeschlossen sind, auch als viele Verbindungen bezeichnet.

Wenn ESP32 als Server fungiert. Sobald der Client -Geräte nach verfügbaren Bluetooth -Geräten scannt, stellt der Server die Verbindung zwischen ihnen her und überträgt die Daten vom Server zum Client -Gerät. Diese Kommunikation wird als Punkt zu Punkt bezeichnet.

In diesem Tutorial werden wir ein Beispiel für eine Punkt-zu-Punkt-Kommunikation zwischen zwei ESP32-Boards nehmen.

Wichtige Begriffe in BLE

Hier sind einige wichtige Begriffe, die Sie bei der Arbeit mit ESP32 -Anwendungen kennen sollten:

Gatt: GATT- oder GATERISCHE Attribute, die eine hierarchische Struktur für Datenübertragungen zwischen BLE -Geräten unter Verwendung von Dienst und Merkmal definieren. Es definiert die Art und Weise, wie zwei Geräte Daten zwischen ihnen kommunizieren.

BEIISCHER SERVICE: Die obere Ebene in der GATT -Hierarchie ist ein Profil, das einen oder mehrere Dienste enthält. Ble enthält mehr als einen einzigen Dienst. Jeder dieser Dienste hat ihre eigenen Merkmale, die auch als Referenz für andere Dienste dienen können.

Ble charakteristisch: Merkmal ist eine Gruppe von Informationen, die immer im Besitz von Dienst sind. Hier werden tatsächliche Daten in Hierarchie (Wert) gespeichert. Es enthält immer zwei Attribute:

  • Erklärung: Charakteristische Eigenschaften wie Ort, Typ, Lesen, Schreiben und Benachrichtigen.
  • Charakteristischer Wert: Datenwert der charakteristischen.

UUid: UUID (allgemein eindeutige Kennung) ist eine eindeutige ID für einen Service und eine Merkmal. Es ist eine eindeutige 128-Bit-ID, die mit einem Online-UUID-Generator generiert werden kann. Überprüfen Sie diesen kostenlosen UUID -Generator. Ein Beispiel Uuid sieht so aus:

583F8B30-74B4-4757-8143-56048FD88B25

Eine universelle Bluetooth Special Interest Group (SIG) hat einige der verkürzten Uuids für verschiedene Arten von Diensten und Profilen vordefiniert, um sie zu lesen. Klicken Sie hier.

Auf ESP32 mit Arduino IDE aufstellen

Um die Arbeit von Ble zu verstehen, werden wir zwei verschiedene ESP32 -Boards verwenden Server und bewerben Klient Versucht, den Server -Bluetooth zu verbinden.

Arduino IDE hat separate Beispiele für Scanner und Server.

Um zu sehen, wie Sie ein ESP32 mit Arduino IDE in Windows installieren.

ESP32 Ble Server

Zunächst werden wir den Server -Beispielcode in unserem ersten ESP32 -Board hochladen, der als a wirkt Server.

Zum Öffnen von Ble Server -Beispiel gehen Sie zu: Datei> Beispiele> ESP32 Ble Arduino> Ble_Server:

Der folgende Code wird in Arduino IDE geöffnet.

Servercode

Laden Sie den folgenden Code in ESP32 -Board mit Arduino IDE hoch. Stellen Sie jedoch sicher.

#enthalten
#enthalten
#enthalten
#define service_uuid "4FAFC201-1FB5-459E-8FCC-C5C9C331914B"
#define charakteristik_uuid "Beb5483e-36e1-4688-B7F5-EEA07361B26A8"
void setup ()
Serie.Beginnen Sie (115200);
Serie.println ("Start ble Arbeit!");
Bledevice :: init ("ESP32");
Bleserver *PSERVER = BLEDEVICE :: CreateServer ();
Bleservice *pService = PSERVER-> CreateService (service_uuid);
Blecharacteristic *pcharacteristic = PSVICICE-> CreateCharacteristic (
Charakteristisch_uuid,
Blecharacteristic :: Property_Read |
Blecharacteristic :: Property_Write
);
pcharacteristic-> setValue ("Hallo Sage LinuxHint.com ");
PService-> start ();
// Bleadvertising*padvertising = psserver-> getAdvertising ();/*Rückwärtskompatibilität*/
Bleadvertising *padvertising = Bledevice :: getAdvertising ();
padvertising-> addServiceuuid (service_uuid);
padvertising-> setScanResponse (true);
padvertising-> setMinPreferred (0x06); // Funktionen für die iPhone -Verbindung
padvertising-> setMinPreferred (0x12);
BLEDEVICE :: startadvertising ();
Serie.println ("charakteristisch definiert! Ble Server bereit ");

void Loop ()
Verzögerung (2000);

Der Code beginnt mit der Einbeziehung der erforderlichen Bluetooth -Bibliotheksdateien. Dann ist UUID sowohl für Service als auch für die Eigenschaft definiert. Sie können mit dem Standard -UUID gehen oder mit dem kostenlosen UUID -Generator generieren. Die nächste serielle Kommunikation wird durch Definition der Baudrate initialisiert.

Als nächstes haben wir ein BLE -Gerät namens ESP32 erstellt. Danach haben wir das BLE -Gerät als Server mit dem definiert CreateServer () Funktion und später setzen wir den charakteristischen Wert. Im letzten Schritt begannen wir den Service, indem wir ihn bewerben, damit andere Geräte danach suchen können.

ESP32 BLE -Scanner

Jetzt werden wir ein ESP32 -Scan -Beispiel in der zweiten ESP32 -Karte hochladen. Um dies zu tun, gehen Sie zu: Datei> Beispiele> ESP32 BLE Arduino> Ble_Scan

Der folgende Code ist im Arduino IDE -Editor geöffnet.

Scannercode

#enthalten
#enthalten
#enthalten
#enthalten
int skantime = 5; //In Sekunden
Blescan* peltscan;
Klasse myAdvertisedDeviceCallbacks: public BleadvertisedDeviceCallbacks
void onResult (BleadvertisedDevice beworbeneDevice)
Serie.printf ("angekündigtes Gerät: %s \ n", beworbeneDevice.tostring ().c_str ());

;
void setup ()
Serie.Beginnen Sie (115200);
Serie.println ("Scannen ...");
Bledevice :: init ("");
peltlescan = Bledevice :: GetCan (); // Neuen Scan erstellen
pblescan-> setAdvertisedDeviceCallbacks (neue myAdvertisedDeviceCallbacks ());
plescan-> setactiveScan (true); // Schneller Scan, aber mehr Strom verwendet
plescan-> setInterval (100);
plescan-> setWindow (99);

void Loop ()
// Setzen Sie Ihren Hauptcode hier ein, um wiederholt auszuführen:
BlescanResults foundDevices = peltscan-> start (spärlich, falsch);
Serie.print ("Geräte gefunden:");
Serie.println (FoundDevices.getCount ());
Serie.println ("Scan erledigt!");
peltscan-> clearResults (); // Ergebnisse in den freien Speicher löschen
Verzögerung (2000);

Der obere Code sucht nach der Anzahl der verfügbaren verfügbaren Geräte für BLE und zeigt deren Gesamtzahl mit Adressen an. Nach dem Hochladen des Code in der ESP32 -Scannerplatine drücken Sie die Ermöglichen Die ESP32 -Karte sucht automatisch nach verfügbaren Geräten.

Ausgang

Sobald der ESP32 die verfügbaren Geräte scannt, wird das folgende Ergebnis angezeigt. Hier sind ESP32 9 Geräte gescannt, darunter eine ESP32 -Karte mit Ble_Server -Code und ein anderes Gerät ist Mi Band 6. Der Rest aller Geräte sind in der Nähe meines ESP32 erhältlich.

So reparieren Sie die ESP32 -BLE -Scan -Bibliothek nicht Zählgeräte

Das Beispiel für die ESP32 -Scan -Bibliothek hat den Fehler, nicht die Gesamtzahl der Geräte zu zählen. Um dieses Problem zu beheben, gehen Sie zum genannten Ort und ersetzen Sie den unten angegebenen Code.

C: \ Benutzer \ Benutzername \ AppData \ Local \ Arduino15 \ Pakete \ ESP32 \ Hardware \ ESP32 \ 1.0.6 \ Bibliotheken \ Ble \ src \ blescan.CPP

Erinnere dich an unhide Alle Ordner, da der AppData -Ordner im C -Verzeichnis standardmäßig verborgen bleibt. Nach dem Öffnen der BLE_SCAN -Quelldatei .CPP Ersetzen Sie die folgende Bedingung im Code.

if (m_padvertisedDeviceCallbacks)
m_padvertisedDeviceCallbacks-> onResult (*beworbene Device);

Wenn (!m_wantduplicates && !gefunden)
m_scanresults.M_VectorAdvertisedDevices.einfügen (std :: pair (beworbenesaddress.toString (), beworbenesDevice));
Solltedelete = false;

Testen von ESP32 Ble Server mit Smartphone

Die meisten modernen Smartphones arbeiten mit BLE -Technologie, um mit verschiedenen Geräten wie Smartwatch, Wearables, Sensoren und anderen Hausautomationsgeräten zu kommunizieren. Hier wird das ESP32 -Vorstand als Zugangspunkt fungieren. Also verbinden wir ein Android -Telefon mit einem ESP32 -Board.

BLE -Servercode für ESP32 -Smartphone -Zugriff

Laden Sie den folgenden Code in ESP32 -Board hoch.

#include /*Bluetooth -Bibliothek inklusive* /
#enthalten
#enthalten
#define service_uuid "A484A399-7272-4282-91CF-9018E075FC35"
#define charakteristik_uuid "C7E084BD-5279-484D-8319-FFF7D917537D"
Klasse Mycallbacks: öffentliche Blecharacteristiccallbacks

void Onwrite (Blecharacteristic *pcharacteristic)

std :: string value = pcharacteristic-> getValue ();
if (Wert.Länge ()> 0)

Serie.print ("aktualisierter charakteristischer Wert:");
für (int i = 0; i createService (service_uuid);
Blecharacteristic *pcharacteristic = PSVICICE-> CreateCharacteristic (
Charakteristisch_uuid,
Blecharacteristic :: Property_Read |
Blecharacteristic :: Property_Write
);
pcharacteristic-> setCallbacks (neue mycallbacks ());
pcharacteristic-> setValue ("LinuxHint.Com ");
PService-> start ();
Bleadvertising *padvertising = psserver-> getAdvertising ();
padvertising-> start ();

Hohlraumschleife ()

Verzögerung (2000);

Installation der BLE -Anwendung im Android -Smartphone

In den folgenden Schritten werden BLE -Anwendungen in Smartphones installiert und dazu beitragen, mobile Geräte mit ESP32 -Boards zu fördern.

Schritt 1: Öffnen Sie die Installation von Google Play Store Ble Scanner Anwendung.

Schritt 2: Öffnen Sie nach der Installation die Anwendung und ermöglichen Sie die erforderliche Berechtigung und denken Sie daran, mobile Bluetooth einzuschalten.

Schritt 3: Scannen Sie nun nach den verfügbaren Bluetooth -Geräten. ESP32 -Board verbinden.

Schritt 4: Sobald die ESP32 -Karte mit dem Smartphone verbunden ist, wird die ESP32 -Karte angezeigt. Hier sehen wir die UUID -Adressen und können neue charakteristische Werte lesen und schreiben.

Schritt 5: Um den gespeicherten charakteristischen Wert zu lesen, klicken Sie auf R. Das Ergebnis wird angezeigt.

Schritt 6: Um einen neuen charakteristischen Wert zu schreiben, klicken Sie auf W.

Schritt 7: Ein neues Popup erscheint hier, wir können jeden charakteristischen Wert schreiben und klicken OK.

Schritt 8: Neuer Wert, der geschrieben wird.

Schritt 9: Außerdem können wir den gleichen neuen charakteristischen Wert sehen, der auf dem Serienmonitor von Arduino IDE gedruckt ist.

Wir haben ein Gerät erfolgreich mit ESP32 Ble verbunden.

Abschluss

ESP32 wird mit einem Dual -Bluetooth geliefert, der klassisch und niedrig Energie ist. Hier in diesem Artikel haben wir Ble und seine verschiedenen Anwendungen und Arbeiten besprochen. Später konfigurierten wir BLE mit zwei verschiedenen ESP32 -Boards mit einem als Server und anderer als Scanner. Endlich haben wir unser Smartphone mit dem ESP32 -Server verbunden und einen neuen charakteristischen Wert geschrieben.