Forum: PC-Programmierung Welches Framework für GUI mit Bluetooth?


von Fritz G. (fritz65)


Lesenswert?

Ich soll ein Studentenprojekt betreuen, in dem ein einfaches EKG 
entwickelt werden soll. Dabei soll der Hardwareaufwand auf ein Minimum 
begrenzt werden. Ein AD8233 übernimmt die Signalverstärkung, ein ESP32 
wandelt sie ins Digitale, macht eine digitale Vorfilterung und und 
sendet die Daten dann per Bluetooth an einen PC. Dadurch wird eine 
galvanische Trennung der batteriebetriebenen Hardware vom PC erreicht, 
was aus Sicherheitsgründen hier unbedingt notwendig ist.
Der PC soll dann das Ganze graphisch darstellen, speichern und eventuell 
auswerten (Herzfrequenz/Herzvektor).

Mit der Hardwareentwicklung und ESP-Programmierung kenne ich mich gut 
aus, doch welche Programmiersprache und welches Framework soll ich auf 
dem PC verwenden? Die Studis haben Java und Python gelernt. Ich tendiere 
zu Java FX und BlueCove, doch beides scheint inzwischen veraltet zu 
sein.
Wäre es besser, das Frontend als Browser-App zu implementieren? Wenn ja 
womit? Es müssen ca. 400 Messwerte pro Sekunde verarbeitet werden, sonst 
ruckelt die Grafik. Ich befürchte, dass Browser-Apps damit schon 
überfordert sein könnten. der Vorteil wäre die Lauffähigkeit auf 
beliebigen Zielsystemen (Android, Linux, Windows). Das muss aber nicht 
sein, MS Windows würde für das Projekt ausreichen.

von Harald K. (kirnbichler)


Lesenswert?

Fritz G. schrieb:
> und sendet die Daten dann per Bluetooth an einen PC

Warum ausgerechnet BT? ESP32 kann auch WLAN, das ist 
programmiertechnisch deutlich einfacher zu handhaben und genauso gut 
galvanisch getrennt ...

von Richie (mikro123)


Lesenswert?

Fritz G. schrieb:
> Mit der Hardwareentwicklung und ESP-Programmierung kenne ich mich gut
> aus, doch welche Programmiersprache und welches Framework soll ich auf
> dem PC verwenden? Die Studis haben Java und Python gelernt. Ich tendiere
> zu Java FX und BlueCove, doch beides scheint inzwischen veraltet zu
> sein.


Für Linux nimmt man bluez-dbus (mit Windows kenne ich mich nicht aus):
https://github.com/hypfvieh/bluez-dbus

> Wäre es besser, das Frontend als Browser-App zu implementieren? Wenn ja
> womit? Es müssen ca. 400 Messwerte pro Sekunde verarbeitet werden, sonst
> ruckelt die Grafik. Ich befürchte, dass Browser-Apps damit schon
> überfordert sein könnten. der Vorteil wäre die Lauffähigkeit auf
> beliebigen Zielsystemen (Android, Linux, Windows). Das muss aber nicht
> sein, MS Windows würde für das Projekt ausreichen.

Für nähere Details zur Datenrate:
https://novelbits.io/bluetooth-5-speed-maximum-throughput/
https://punchthrough.com/maximizing-ble-throughput-on-ios-and-android/

Falls WLAN möglich ist, wie Harald K. auch angemerkt hat, wäre die 
Datenübertragung per Websockets die Lösung.

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Ich würde das kostenlose B4J empfehlen. Kann Apps- und auch Web Apps 
erstellen.
https://www.b4x.com/
Das beruht auch auf Java-Libs. Da die Studis ja JAVA gelernt haben,
wäre das doch schon mal ein Anfang.
Und auch mit dem kostenlosen B4A könnte man mit wenig Änderungen auch 
eine Smartphone-App erstellen. BT-Libs sind da auch jeweils dabei.

: Bearbeitet durch User
von Nemopuk (nemopuk)


Lesenswert?

QT kann GUI und Bluetooth auf vielen Plattformen. Als Programmiersprache 
kommt C++ zum Einsatz, mit einer Bibliothek deren Stil stark an Java 
erinnert. Die stl muss man dazu nicht kennen.

Für einen ersten Eindruck: http://stefanfrings.de/qt_lernen/

von Silc P. (silch12)


Angehängte Dateien:

Lesenswert?

Ich würde eine statische Browser-Seite nehmen, zusammen mit 
WebBluetooth. Für was kleines brauchst du da kein framework, kannst auch 
in vanilla-javascript + html machen.

WebBluetooth ist halt super simpel zum nutzen und geht perfekt auf allen 
Computer (client seitig) (Windows, Linux, macOS)

Guide zu WebBLE ist hier: 
https://developer.chrome.com/docs/capabilities/bluetooth?hl=de

Ich hab sowas mal für eine Demo gebraucht (PPG + Temperatur), siehe 
Anhang (slayer.js welches ich für peak-detection genutzt habe fehlt aus 
Lizenzgründen. Kannst du aber mit browserify in ein browser-side 
slayer.js umwandeln wie ich es gemacht habe).

Das kannst du dann mit allen chrome basierten browser (Chrome, Chromium, 
Edge, Brave, ...) öffnen (musst eigentlich nur das index.html im browser 
öffnen) und WebBLE nutzen.

Mit v0.dev kannst du auch ziemlich schnell was funktionierendes nach 
deinem Geschmack aufbauen, nutzt dann React.


Wenn du die Daten speichern willst, kommts halt drauf an wie lange eine 
Messung geht: Entweder lässt du alles im Cache vom Browser, und am Ende 
exportierst du es als CSV, ... (geht dann wie normaler 'download' einer 
Datei im Browser); oder du lädst schon währenddessen in Chunks runter, 
die du dann aber lokal zusammensetzen musst.

von Silc P. (silch12)


Lesenswert?

Oder du nutzt BLELog, welches zum Aufzeichnen von vielen Daten von 
verschiedenen Geräten über BLE geschrieben wurde (Python). Dabei kann 
auch Live geplotted werden:

https://github.com/ETH-PBL/BLELog

von Yalu X. (yalu) (Moderator)


Lesenswert?

Meine persönlichen Präferenzen, um mit minimalem Programmieraufwand zu
einem sehr ansprechenden Ergebnis zu kommen:

Fritz G. schrieb:
> Programmiersprache

Python

> Framework

NiceGUI (Darstellung wahlweise in einem Web-Browser oder nativen
Fenster)

> Der PC soll dann das Ganze graphisch darstellen

Plotly (ist in NiceGUI integriert), alternativ Matplotlib (ebenfalls in
NiceGUI integriert)

> speichern und eventuell auswerten (Herzfrequenz/Herzvektor).

NumPy und SciPy

> Lauffähigkeit auf beliebigen Zielsystemen (Android, Linux, Windows).

Linux und Windows gehen auf jeden Fall, bei Android weiß ich es nicht.

> Bluetooth

Es gibt zwar mehrere Bluetooth-Module für Python (bspw. Bleak, PyBluez2,
bluepy, python‑bluezero, pygatt und BTZen). Da ich aber keine Erfahrung
damit habe, würde ich – wie auch einige andere in diesem Thread – WLAN
(bspw. über TCP-Sockets) präferieren.

> Ich tendiere zu Java FX und BlueCove, doch beides scheint inzwischen
> veraltet zu

Das Alter der Software sollte kein Ausschlusskriterium sein, solange sie
gut funktioniert.

von Fritz G. (fritz65)


Lesenswert?

Vielen Dank für die Antworten.

Es wird wohl auf Python mit NiceGUI hinauslaufen. Die Studenten lieben 
Python, weil es so einfach ist - zumindest was den Einstieg angeht.

Ich als alter C/C++/Java Hase habe zugegebenermaßen Python nie so 
richtig ernst genommen und eher als eine modernere Version von BASIC 
betrachtet. Inzwischen gibt es da wohl richtig gute Bibilotheken, z.B. 
für lineare Algebra und sogar KI.

WLAN wollte ich eigentlich nicht verwenden, weil der ESP32 damit ein 
ziemlicher Schluckspecht ist und laut Datenblatt 240mA braucht, in 
Spitzen sogar noch mehr. Mit BT/BLE soll er mit etwa der Hälfte 
auskommen. Nichtsdestotrotz, für einen Probebtrieb sollten 3 
AA-Batterien auch für WLAN reichen.

von Mairian (marianp)


Lesenswert?

Python oder Lazarus wären hier wohl das Mittel der Wahl, wenn man C++ 
umgehen will

von Yalu X. (yalu) (Moderator)


Lesenswert?

Fritz G. schrieb:
> Die Studenten lieben Python

Nicht nur die Studenten:

  https://www.tiobe.com/tiobe-index/

> Ich als alter C/C++/Java Hase habe zugegebenermaßen Python nie so
> richtig ernst genommen und eher als eine modernere Version von BASIC
> betrachtet.

Es ist sehr viel mehr als BASIC und wird ständig noch mehr. Wie viel
mehr, erkennt man aber erst so richtig, wenn man sich schon eine Weile
damit beschäftigt hat. Trotzdem ist die Sprache auch gut für Anfänger
und Gelegenheitsprogrammierer geeignet.

> Inzwischen gibt es da wohl richtig gute Bibilotheken, z.B.
> für lineare Algebra und sogar KI.

Es gibt Bibliotheken für fast jeden Anwendungsbereich. Auch für viele
beliebte C/C++-Bibliotheken gibt es Python-Bindings. Ein wesentlicher
Teil der Python-"Programmierung" besteht oft darin, ein paar für die
Anwendung geeignete Bibliotheken zu finden und diese dann mit relativ
wenig eigenem Code zusammenzukitten. Der Python-eigene Paketmanager
(pip) macht es leicht, Bibliotheken herunterzuladen, zu installieren,
upzudaten und bei Nichtgefallen wieder zu löschen.

Außerdem ist Python für viele Plattformen verfügbar (Linux, macOS,
Windows, ...) und als MicroPython und CircuitPython sogar für etwas
bessere Mikrocontroller verfügbar. Prinzipiell könntet ihr also auch den
ESP32-Part in Python programmieren (inwieweit das sinnvoll ist, ist eine
andere Frage).

: Bearbeitet durch Moderator
von Harald K. (kirnbichler)


Lesenswert?

Yalu X. schrieb:
> Nicht nur die Studenten:
>
>   https://www.tiobe.com/tiobe-index/

Dieser Index gibt mitnichten Programmiersprachen wieder, die am meisten 
benutzt werden, sondern Programmiersprachen, nach denen im Netz die 
meisten Fragen gestellt werden. Und damit sind es ergo die 
Programmiersprachen, die überwiegend von Anfängern genutzt werden, denn 
naturgemäß stellen die die meisten Fragen.

Wer schon zehn, zwanzig Jahre lang Java/Delphi/Go/C# oder was auch immer 
benutzt, wird von diesem Index entsprechend nicht berücksichtigt.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Harald K. schrieb:
> Yalu X. schrieb:
>> Nicht nur die Studenten:
>>
>>   https://www.tiobe.com/tiobe-index/
>
> Dieser Index gibt mitnichten Programmiersprachen wieder, die am meisten
> benutzt werden, sondern Programmiersprachen, nach denen im Netz die
> meisten Fragen gestellt werden.

Nicht nur Fragen.

> Und damit sind es ergo die Programmiersprachen, die überwiegend von
> Anfängern genutzt werden, denn naturgemäß stellen die die meisten
> Fragen.

Bei der Art und Weise, wie Tiobe die Daten erhebt, spielen
Anfängerfragen eine eher untergeordnete Rolle.

Natürlich ist das nur eine Statistik, in die man – wie bei jeder
anderen Statistik auch – nicht zu viel hineininterpretieren sollte.
Den rapiden Anstieg der Kurve während der letzten paar Jahre finde ich
dennoch bemerkenswert.

von M.A. S. (mse2)


Lesenswert?

Harald K. schrieb:
> Yalu X. schrieb:
>> Nicht nur die Studenten:
>>
>>   https://www.tiobe.com/tiobe-index/
>
> Dieser Index gibt mitnichten Programmiersprachen wieder, die am meisten
> benutzt werden, sondern Programmiersprachen, nach denen im Netz die
> meisten Fragen gestellt werden. Und damit sind es ergo die
> Programmiersprachen, die überwiegend von Anfängern genutzt werden, denn
> naturgemäß stellen die die meisten Fragen.

C++ als klassische Anfängersprache, soso... ;)

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.