Forum: Mikrocontroller und Digitale Elektronik ESP32 als BLE-Client?


von Stamsund (Gast)


Lesenswert?

Hi,

den ESP32 per BLE Daten zu übertragen lassen ist grundsätzlich ja kein 
Problem, Beispiele bekommt man dafür zu Hauf (z.B. für 
Temperaturmessungen: 
https://sourceforge.net/p/iot-leaf/code/ci/master/tree/BleDHT22/BleDHT22.ino 
)

Jetzt möchte ich aber mit einem ESP32 auf ein BLE-Gerät verbinden und 
von dort Werte empfangen (um bei dem Beispiel oben zu bleiben, das sind 
z.B. nur Temperaturwerte, ich weiß also immer genau, welche Art von 
BLE-Datenpaketen ich empfangen möchte).

Wenn ich nach passenden Informationen suche, lande ich leider immer nur 
bei Beispielen für die Senderichtung.

Meine Frage: geht das, dass ich den ESP32 auch als Empfänger für BLE 
verwende und wenn ja wie?

Danke!

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Stamsund schrieb:

> Meine Frage: geht das, dass ich den ESP32 auch als Empfänger für BLE
> verwende und wenn ja wie?

Empfangen und Senden können sowohl GATT-Clients, als auch GATT-Server. 
Du suchst wahrscheinlich nach der API für GATT-Server. Könnte das diese 
hier sein: 
https://github.com/espressif/arduino-esp32/blob/master/libraries/BLE/src/BLEServer.h 
?

mfg Torsten

von Stamsund (Gast)


Lesenswert?

OK, nicht dass ich wirklich verstanden hätte wie das genau funktioniert, 
was da gemacht wird, aber wäre das nicht eher der Client wie im Beispiel 
von 
https://github.com/espressif/arduino-esp32/blob/master/libraries/BLE/examples/BLE_client/BLE_client.ino 
?

Da kommt zumindest ein scan() vor, mit dem nach vorhandenen 
Bluetooth-Geräten gesucht wird. allerdings ist mir noch vollkommen 
schleierhaft, wie dann ein spezielles Bluetooth-Gerät ausgewählt wird 
und wie das Empfangen von speziellen Daten von diesem von statten 
geht...

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Stamsund schrieb:
> OK, nicht dass ich wirklich verstanden hätte wie das genau funktioniert,
> was da gemacht wird, aber wäre das nicht eher der Client wie im Beispiel
> von

Ja, da hast Du natürlich völlig recht. War wohl noch zu früh heute 
morgen :-)

> Da kommt zumindest ein scan() vor, mit dem nach vorhandenen
> Bluetooth-Geräten gesucht wird. allerdings ist mir noch vollkommen
> schleierhaft, wie dann ein spezielles Bluetooth-Gerät ausgewählt wird
> und wie das Empfangen von speziellen Daten von diesem von statten
> geht...

Üblich ist, einen Server nach bestimmten Kriterien auszusuchen. In den 
Advertising-Data könnte z.B. die Liste der Unterstützen services, der 
Service aufgeführt sein, nach dem Du suchst. Oder es besteht ein Bond 
zwischen beiden Geräten. Danach stellst Du eine Verbindung zu dem Server 
her (Connect), guckst, welche Services der Server hat (Service 
Discovery) und guckst dann, welche Characteristics der von Service hat, 
für den Du dich interessierst (Characeristic Discovery). Wie Du den 
Service dann konkret verwendest, sollte in der Profil-Beschreibung des 
Service stehen.

Ich finde die Kapitel zu ATT und GATT in der Bluetooth CodeSpec recht 
gut zu lesen und sehr verständlich. Da sind dann auch alle GATT 
procedure beschrieben. In fast allen APIs wirst Du die so, oder so 
ähnlich wieder finden.

von Chr. M. (snowfly)


Lesenswert?

Wenn es nur um Temperaturwerte geht und Sicherheit
kein Thema ist kannst du auch einfach die Daten
in der Advertise-Nachricht verpacken.

So machen es viele China-Billo-Gadgets
und ich konnte so ganz einfach meine Badezimmerwaage
ins SmartHome verbinden.:)

von Marq (Gast)


Lesenswert?

Chr. M. schrieb:
> So machen es viele China-Billo-Gadgets
> und ich konnte so ganz einfach meine Badezimmerwaage
> ins SmartHome verbinden.:)

Du musst das mit dem Fitnessraum auch machen! Erst nach x Kilometer geht 
die Tür wieder auf und schaltet die Kaffeemaschine zur Benutzung frei :)

von Stamsund (Gast)


Lesenswert?

Torsten R. schrieb:
> Üblich ist, einen Server nach bestimmten Kriterien auszusuchen. In den
> Advertising-Data könnte z.B. die Liste der Unterstützen services, der
> Service aufgeführt sein, nach dem Du suchst.

OK, in meinem Fall ist es so, dass ich den Namen des Gerätes weiß, auf 
das ich mich verbinden will. Einfach nur irgend ein in der Nähe 
befindliches Gerät mit den passenden Diensten zu verwenden, wäre ja 
etwas unsicher? Im schlimmsten fall erwische ich dann z.B. nicht mein 
gewünschtes Außenthermometer, sondern das von meinem Nachbarn, das 
blöderweise aber nicht draußen sondern direkt über der Heizung steht (um 
mal beim Temperaturbeispiel zu bleiben).

Chr. M. schrieb:
> Wenn es nur um Temperaturwerte geht und Sicherheit
> kein Thema ist kannst du auch einfach die Daten
> in der Advertise-Nachricht verpacken.

Schöne Antwort, passt nur leider nicht zur Frage. Ich will mich auf ein 
existierendes BLE-Gerät verbinden und nicht selber Daten versenden!

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?

Stamsund schrieb:
> OK, in meinem Fall ist es so, dass ich den Namen des Gerätes weiß, auf
> das ich mich verbinden will. Einfach nur irgend ein in der Nähe
> befindliches Gerät mit den passenden Diensten zu verwenden, wäre ja
> etwas unsicher?

Die MAC Adresse des Geräts sollte auch eindeutig sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.