Forum: Mikrocontroller und Digitale Elektronik BLE-Modul: Welches würdet ihr nehmen?


von Frank (Gast)


Lesenswert?

Welches BLE-Modul - für Auswertung einer Waage - würdet Ihr empfehlen, 
wenn am AVR die I2C-Pins frei sind? Software-UART statt I2C sollte dort 
auch gehen (8bit-Timer frei + 18.4MHz AVR).

Google findet vor allem nRF51822. Ist das das, was man zur Zeit nimmt? 
Soweit ich es verstehe, ist das ein SoC, selber zu programmieren. Hört 
sich kompliziert an. Oder ist das nur eine Frage von "Jetzt spiele ich 
fertige BLE-Firmware vom Hersteller auf und fertig ist es"?

Bei der Waage weiss ich noch nicht, welche ich nehmen werde. Zumindest 
bei einer habe ich aber das Protokoll:

"Weight comes in on 0000EF81-0000-1000-8000-00805F9B34FB

Like so:

0x07: length
0xff: manufacture data
0xef: service header byte1
0x81: service header byte2
0x__ weight val byte1
0x__ weight val byte2
0x__ weight val byte3
0x__ weight val byte4

usw."

BLE sagt mir zur Zeit noch nichts. Wenn man kein Protokoll hat: Kann man 
die lange Zahl (UUID = Adresse?) herausfinden und dann versuchen, sich 
aus den Daten einen Reim zu machen - oder kann man solche Gerät nur 
ansprechen, wenn man das Protokoll vorliegen hat?

von Stefan F. (Gast)


Lesenswert?

Frank schrieb:
> "Weight comes in on 0000EF81-0000-1000-8000-00805F9B34FB

Das ist die UUID. Du musst das Bluetooth Modul so konfigurieren, dass es 
die Daten von dieser UUID empfängt und an dein Programm weiter reicht.

Unter Linux kann man die UUID's damit anzeigen: 
https://github.com/pcborenstein/bluezDoc/wiki/hcitool-and-gatttool-example

> Bei der Waage weiss ich noch nicht, welche ich nehmen werde
> Wenn man kein Protokoll hat ...
> kann man solche Gerät nur ansprechen, wenn man das Protokoll vorliegen hat?

Es wäre reine Glückssache. Ich würde nur Produkte kaufen, bei denen das 
Protokoll dokumentiert ist.

von Frank (Gast)


Lesenswert?

Google hat noch zu diesem BLE-Modul geführt: RN4871 on Microchip. Hat 
jemand eine Meinung dazu?

UART-Befehlsinterface. Schätze das funktioniert so ähnlich wie das 
AT-Interface beim BTM222-Modul, das ich mal hatte. Hört sich einfacher 
als nRF51 an (?).

Ein Problem damit wäre voraussichtlich, dass dessen Baudrate 115200 ist. 
Das werde ich mit Soft-UART nicht schaffen. Aber das lässt sich 
anscheinend umschalten (hoffentlich mit Speicherung in 
non-volatile-Memory).

von Olaf (Gast)


Lesenswert?

> Google findet vor allem nRF51822. Ist das das, was man zur Zeit nimmt?

Die Dinger sind gut eingefuehrt und dokumentiert. Werden aber wohl 
gerade duch moderneres ersetzt. Wenn du also basteln willst dann sind 
sie optimal.


> Soweit ich es verstehe, ist das ein SoC, selber zu programmieren. Hört
> sich kompliziert an.

Haengt von der grauen Masse zwischen deinen Ohren ab. :-)
Ich hab von 0(keine Ahnung von BLE) auf erfolgreiche Uebertragung mit 
eigenem Programm auf beiden Seiten etwa 40h gebraucht.

> Oder ist das nur eine Frage von "Jetzt spiele ich
> fertige BLE-Firmware vom Hersteller auf und fertig ist es"?

Du musst eine Firmware vom Hersteller aufspielen und dann diese Libary 
in deinem eigenen Programm benutzen. Das nimmt dir schon 90% der ARbeit 
ab, aber die restlichen 10% sind auch noch Arbeit.

> BLE sagt mir zur Zeit noch nichts. Wenn man kein Protokoll hat: Kann man

Das sind die ersten 8h auf der Strasse zum Erfolg. :-D

>  oder kann man solche Gerät nur
> ansprechen, wenn man das Protokoll vorliegen hat?

Kann man nicht vorhersagen. Der Hersteller könnte es voll krass 
verschluesselt uebertragen und dann bist du erstmal chancenlos. Aber 
wahrscheinlich wird er nur ein paar Bytes und vielleicht eine Pruefsumme 
uebertragen und dann ist es mit etwas Phantasie kein Problem.

Tip: Es gibt von Nordic ein Testprogramm fuer BLE das auf einem 
Androidhandy lauft. Wenn du die Grundlagen von BLE verstanden hast dann 
koenntest du mal probieren ob du damit sinnvolle Daten von deiner Waage 
auslesen kannst.

Olaf

von unsmart (Gast)


Lesenswert?

Frank schrieb:
> .. oder kann man solche Gerät nur
> ansprechen, wenn man das Protokoll vorliegen hat?

BLE Gerät kann man fragen was sie können.

Viele batteriebetriebene Gerät antworten dann z.B. das sie
"0000180f-0000-1000-8000-00805f9b34fb" unterstützen..

von Frank (Gast)


Lesenswert?

> Du musst eine Firmware vom Hersteller aufspielen und dann diese Libary in deinem 
eigenen Programm benutzen. Das nimmt dir schon 90% der Arbeit
ab, aber die restlichen 10% sind auch noch Arbeit.

Danke für die Infos. Man spielt anscheinend erst ein "Soft Device" auf, 
das den Bluetooth-Stack bereitstellt, dann eigene Firmware. Es scheint 
keine fertige "AT-Firmware" vom Chiphersteller zu geben, aber von 
Drittherstellern gibt es Platinen mit diesem Chip und AT-Firmware, z.B. 
BlueFruit von https://www.adafruit.com/product/2479. Mit der Firmware 
wäre ich vermutlich da, wo das (etwa teurere) RN4871 on Microchip ab 
Werk ist: BLE-Modul mit Textbefehlen.

Was ich jetzt noch gerne wissen würde: Wenn man die Beschreibung der 
Waage hat (übrigens Modell "skale 2" von 
http://skale.cc/en/buyIntl.html), womit eigentlich nur die UUID 
angegeben ist, kann man dann davon ausgehen, dass die AT-Firmware die 
Waage auch ansprechen kann - oder muss die AT-Firmware bestimmte 
"Services" unterstützen, so wie SPP bei klassischen Bluetooth-Modulen? 
Bei adafruit steht z.B.

"The following commands allow you to interact with various GATT services 
present on Bluefruit LE modules when running in Command Mode"
(https://learn.adafruit.com/introducing-the-adafruit-bluefruit-le-uart-friend/ble-services)

Woher weiss ich, auf welchen Service ich bei der Modulauswahl achten 
sollte? Ich finde in der kurzen Protokollbeschreibung der Waage keinen 
Hinweis auf einen Service. Nur die UUID:

BLE API SPECIFICATION for Skale I and II:
Weight comes in on 0000EF81-0000-1000-8000-00805F9B34FB

Like so:

0x07: length
0xff: manufacture data
0xef: service header byte1
0x81: service header byte2
0x__ weight val byte1
0x__ weight val byte2
0x__ weight val byte3
0x__ weight val byte4

von Frank (Gast)


Lesenswert?

Falls es jemanden interessiert, bei arrow bekommt man das Microchip 
RN4871-I/RM130 zur Zeit mit Gratis-Expressversand aus den USA 
(https://www.arrow.de/products/rn4871-irm128/microchip-technology) für 
6,27€

https://www.arrow.de/products/rn4871-irm130/microchip-technology

von Frank K. (fchk)


Lesenswert?

Die UUID ist der Schlüssel zu dem GATT-Service, den Du im Code des 
Applikationsprozessors im Modul anlegen musst. Dnach kommen dann noch 8 
Bytes, die die Informationen enthalten.

Deinen AVR kannst Du Dir sonstwo hin drücken, der ist hier nur im Wege. 
Dein Code läuft komplett im Modul ab. Der Cortex M4 hat mehr als genug 
Resourcen dafür.

Nordic ist ein beliebter Hersteller entsprechender Chips.
Die beiden Alternativen wären TI (CC254x und CC264x, 
http://www.ti.com/wireless-connectivity/simplelink-solutions/bluetooth-low-energy/overview/overview.html 
) und SiLabs ( 
https://www.silabs.com/products/wireless/bluetooth/bluetooth-low-energy-modules 
).

Letztendlich wirst Du es immer mit einem Cortex M3 oder M4 
Applikationsprozessor zu tun haben. Schau Dir die Hersteller an, und 
starte vielleicht erstmal mit einem Hersteller-Evalboard. Da ist oft 
schon ein Debugger, zusätzliche Peripherie und eventuell auch 
Strommess-Hardware mit drauf (keine Ahnung, ob das für Dich relevant 
ist). Damit kannst Du dann in die Serie gehen.

fchk

von trampi (Gast)


Lesenswert?

Aktuell ist die nRF52 Reihe von Nordic Semiconductor state of the art. 
Im allgemeinen sind Anwendungen basierend auf BLE aber (noch) nicht ganz 
so einfach umzusetzen. Die nRF52 Reihe löst die nRF51 sowie von TI der 
CC2650. Das sind alles SOC, haben also bereits eine MCU integriert. 
Wenns kein BLE sein muss, dann würde ich, der einfachheitshalber auf die 
HC-05/HC-06 setzen. Die können dann mit einem AVR über UART und AT 
commands gesteuert werden.

von FK (Gast)


Lesenswert?

Frank K. schrieb:
> Deinen AVR kannst Du Dir sonstwo hin drücken, der ist hier nur im Wege.
> Dein Code läuft komplett im Modul ab. Der Cortex M4 hat mehr als genug
> Resourcen dafür.

Jein. Genug Ressourcen schon, aber wenn man z.B. einen Nordic mit 
softdevice nutzt, hat das softdevice immer die höchste Priorität und 
kann der Applikation (im wahrsten Sinne des Wortes) jederzeit dazwischen 
funken. Kommt halt ganz auf die Anwendung an, ob das okay ist.

von Frank K. (fchk)


Lesenswert?

FK schrieb:
> Frank K. schrieb:
>> Deinen AVR kannst Du Dir sonstwo hin drücken, der ist hier nur im Wege.
>> Dein Code läuft komplett im Modul ab. Der Cortex M4 hat mehr als genug
>> Resourcen dafür.
>
> Jein. Genug Ressourcen schon, aber wenn man z.B. einen Nordic mit
> softdevice nutzt, hat das softdevice immer die höchste Priorität und
> kann der Applikation (im wahrsten Sinne des Wortes) jederzeit dazwischen
> funken. Kommt halt ganz auf die Anwendung an, ob das okay ist.

Wenn das ein Problem sein sollte, wäre z.B. ein TI CC2642R geeigneter. 
Da läufen die zeitkritischen Sachen auf einem extra Cortex M0. Wie es 
bei SiLabs ist, weiß ich nicht.

fchk

von nfet (Gast)


Lesenswert?

Ich würde hier mal noch u-blox reinwerfen. Sind Recht einfach zu 
konfigurierende BLE auf uart Wandler mit nRF52. Da muss man sich nicht 
mit dem Bluetooth Stack abmühen.

von Linux T. (Gast)


Lesenswert?

FK schrieb:
> Frank K. schrieb:
>> Deinen AVR kannst Du Dir sonstwo hin drücken, der ist hier nur im Wege.
>> Dein Code läuft komplett im Modul ab. Der Cortex M4 hat mehr als genug
>> Resourcen dafür.
>
> Jein. Genug Ressourcen schon, aber wenn man z.B. einen Nordic mit
> softdevice nutzt, hat das softdevice immer die höchste Priorität und
> kann der Applikation (im wahrsten Sinne des Wortes) jederzeit dazwischen
> funken. Kommt halt ganz auf die Anwendung an, ob das okay ist.


Die maximale zusätzliche Latenz wird von Nordic aber angegeben, z.B. für 
M4/S140:

Open peripheral interrupt: Softdevice enabled: < 3 μs  Softdevice 
disabled: < 1 μs
Blocked or restricted peripheral interrupt: Softdevice enabled: N/A 
Softdevice disabled: < 2 μs
(only forwarded when SoftDevice disabled)
Application SVC interrupt: Softdevice enabled: < 2 μs  Softdevice 
disabled: < 2 μs

Wenn das für die eigene Applikation passt, ist ja alles OK.

von Anton M. (antonm)


Lesenswert?

nfet schrieb:
> Ich würde hier mal noch u-blox reinwerfen. Sind Recht einfach zu
> konfigurierende BLE auf uart Wandler mit nRF52. Da muss man sich nicht
> mit dem Bluetooth Stack abmühen.

u-blox hat viele Produkte. Was meinst Du genau?

von Mic R. (microller)


Lesenswert?

Hi,
ich möchte hier mal die Cypress Produkte ins Rennen werfen
http://www.cypress.com/products/ez-ble-and-ez-bt-bluetooth-modules
Zum einen hat Cypress vor 2(?) Jahren den Bereich Embedded BLE/WiFi von 
Broadcom übernommen, und mit den PSoC BLE auch eigene Produkte.
Es gibt einiges an (fertigen) Beispielen und die Programierung 
(zumindest für die PSoCs mir bekannt) ist die einfache IDE, PSoC 
Creator.
Ausserdem haben die PSoCs auch noch einiges an Peripherie bis hin zu 
eimem mini FPGA/PLD (nennt sich UDBs) auf dem Chip, was auch interessant 
sein könnte. Und jeder GPIO lässt sich auch als Kapazitssensor für 
Touch-Bedienung (z.B. Button, Slider, etc) verwenden. Alles in allem 
bekommst Du damit weit mehr als reines BLE.
Die zertifizierten Module sind teils kleiner als 1cm².
Grüße Mic Roller

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.