[Eigenbau] Sensor-Display fürs Gehäuse selbst programmiert

Gerade wenn man eine Wasserkühlung hat, will man ja auch einige Werte im Auge behalten können. Zwar gibt es diverse Programme, mit denen man das auf dem Monitor anzeigen kann, ich wollte aber was, das ich ins Gehäuse einbauen kann, das man immer im Blick hat.

Erst mal habe ich geschaut, was es schon gibt. Da gibt es die Möglichkeit, per HDMI ein Display anzuschliessen, dass dann als zusätzlicher Monitor fungiert. Dann gibt es noch das hier: https://www.goverlay.com/content/lcdsysinfo2/. Es gibt 3,5"- und 2,8"-Displays sowie eine Software dazu. Man ist aber auf die Software des Herstellers angewiesen. Ein Aquaero würde auch gehen, ist aber vom Format her nicht immer gut unterzubringen, beim Display ist man scheinbar auf die vorgefertigten Bildschirme beschränkt und es kostet auch ganz schön. Zumal ich schon ein Aquaero 5 LT habe.

Also habe ich mir eine eigene Lösung ausgedacht. So sieht es aktuell aus:

20230203_155212_2.jpg


20230206_005436.jpg


Umsetzung (Übersicht)​

Als Anzeige verwende ich den M5Stack Core2, den hatte ich eh da und schon damit gearbeitet. Und er hat schon ein Gehäuse und kann so einfach und optisch ansprechend im Gehäuse untergebracht werden. Ich habe den Winkel, der bei der D5 Next dabei war, genommen. Der Core2 hat Magnete, so kann man ihn einfach auf jede magnetische Fläche drauf setzen.

Der Mikrocontroller ist ein ESP32, es gibt verschiedenen Möglichkeiten zur Programmierung: klassisch mit C/C++, Micropython oder UIFlow von m5Stack. Mit letzterem kann man es "zusammenklicken", ob es für dieses Projekt reichen würde, habe ich nicht probiert. Ich verwende das nur mal, um schnell was auszuprobieren, für dieses Projekt habe ich C/C++ verwendet. Als Entwicklungsumgebeung verwende ich PlatformIO, das ist um Welten besser als die ArduinoIDE.

Wie kommt man an die Daten? Das Schöne am ESP32 ist, dass er WLAN hat. Man kann damit recht einfach übers Netzwerk auf Daten zugreifen. Bereitgestellt werden die Daten über die Aquasuite über den Webexport. Dazu habe ich mir einen Webexport erstellt, der die gewünschten Sensoren enthält:

Aquasuite webexport.jpg


In der Aquasuite bekommt man dann die URLs für den Zugriff angezeigt. Es gibt verschiedene Varianten, die aber alle die gleichen Daten bereitstellen:

Aquasuite Datenzugriff.jpg



Interessant ist das unter "API Direktzugriff". Ich habe Circonus genommen, das stellt die Daten am einfachsten bereit, bei mir sieht das so aus:
JSON:
{
  "CPU Temp": "37.9",
  "Flow": "80.4",
  "GPU Temp": "25.0",
  "Power PSU": "130",
  "Pump RPM": "2861",
  "Water Temp": "19.2"
}

Die Namen (=Keys im JSON) kann man in der Aquasuite (Webexport) anpassen. Man kann es auch einfach im Browser ausprobieren: Den Link im Browser aufrufen, es müsste ein JSON zurückkommen. Ein Nachteil ist, dass es eine Verzögerung von wenigen Sekunden gibt, bis die Werte aktualisiert werden.

Wie parst man nun JSON mit einem Mikrocontroller? ArduinoJSON geht sehr gut, super ist auch der Assistent, der einem bei der Erstellung des Codes hilft.

Die GUI ist mit lvgl erstellt, man könnte natürlich auch die Bibliothek von m5Stack (M5GFX) oder TFT_eSPI verwenden. lvgl ist einfach am Mächtigsten, man kann damit komplexe GUIs erstellen. Natürlich ist es etwas komplizierter, wer aber grundsätzlich schon mal eine GUI programmiert hat, dürfte da ganz gut zurechtkommen.

Man kann auch mehrere Bildschirme erstellen, muss sich dann nur überlegen, wie man das umschaltet. Man könnte die Aquasuite-Profile nutzen, d.h. das aktuelle Profil mit in den Webexport aufnehmen und dann entsprechend umschalten.


Zusatzdisplays
Als Erweiterung habe ich noch Zusatzdisplays vorgesehen. Es gibt von m5Stack fertige Module, einmal ein LCD und ein OLED. Die sind recht klein (48x24 bzw. 56x24) und haben ebenfalls Magneten. Gedacht ist dann, z.B. für CPU und Grafikkarte jeweils ein eigenes Display, das man dann auch in der Nähe der jeweiligen Komponente unterbringen kann. Man kann 3 Sensoren sinnvoll darstellen, ich habe bisher nur mal kurz getestet:

20230204_233604.jpg

Das OLED ist einfarbig und man müsste ggf. aufpassen, dass es nicht einbrennt. Also am einfachsten invertieren oder die Position immer mal verändern. Wie empfindlich das Display ist, kann ich auch nicht sagen. Invertiert sieht jedenfalls nicht so toll aus:

20230204_233515.jpg

Vielleicht einfach riskieren, so teuer ist es nicht..


Hardware/Bezugsquellen

Warum überhaupt die m5Stack-Geräte? Ich benutze die schon länger, hatte also eh was da. Schön ist, dass man ein fertiges Gerät bekommt und nicht nur eine Platine, die man dann wieder irgendwie einbauen muss und das dann auch noch schön. Der Core ist auch recht klein (54 x 54 x 16 mm) und damit leicht unterzubringen.

Welche Geräte (m5Stack) gibt es und wo kann man sie kaufen? So viele Shops gibt es nicht. Ich habe bisher bei Distrelec, Berrybase und Tinytronics bestellt. Die Preise sind leicht unterschiedlich, das muss man dann vergleichen und den Versand mit einbeziehen.

Vom m5Stack Core gibt es verschiedene Varianten:
  • Core2
    • Weißes Gehäuse
    • Touschscreen
    • 16 MB Flash/8MB PSRAM
  • Core2 for AWS
    • Prinzipiell wie Core2 aber andere Farbe
  • Core Basic V2.6
    • Schwarzes Gehäuse
    • 16 MB Flash
  • Core Fire
    • Rotes Gehäuse
    • 16 MB Flash/4 bzw. 8 MB PSRAM
  • Core Gray
    • Graues Gehäuse
    • 4 bzw. 16 MB Flash
Geeignet sind alle Varianten, der Core2 sieht aber IMHO am besten aus. Je nach Farbthema kann aber auch ein anderer gut reinpassen. Preislich ist der Basic oder Gray ab ~40 EUR am günstigsten, der Core2 kostet dann ab ~52 EUR. Wenn man ein Modell mit 4 MB Flash hat, muss man ggf. die Partitionierung anpassen, 4 MB reichen aber aus. Aktuell sieht es so aus:
Code:
RAM:   [          ]   2.6% (used 118048 bytes from 4521984 bytes)
Flash: [==        ]  22.3% (used 1459885 bytes from 6553600 bytes)

Das Display ist bei allen gleich: 2" mit 320x240. Hell genug ist es auch. Der wichtigste Unterschied sind die 3 Hardwaretasten der einfacheren Modelle, die haben auch keinen Touchscreen. Beim Core2 gibt es die 3 Tasten auch noch, die sind aber in den Touchscreen integriert und optisch unauffällig.

Es gibt noch ein Unterteil, dass Löcher für Lego Technic und 2 LED-Streifen (2 x 5 ARGB) enthält: M5Go Bottom bzw. M5Go Bottom2 für den Core2. Beim Fire und AWS ist so ein Teil auch schon dabei.

Zusatzdisplays
Es gibt einmal ein schwarz/weißes OLED mit 1,3" und 128x64. Das wird über I2C angesprochen, d.h. man benötigt noch einen Multiplexer, wenn man mehrere Displays betreiben will: PaHub bzw. PaHub2. Ich habe die erste Version da und mit einem Display hat es funktioniert. Das OLED wäre auch am preiswertesten, so ab ~12 EUR.

Dann gibt es noch ein LCD mit 1,14" und 240x135. Das LCD ist - neben dem farbigen Display - auch deshalb interessant, da es nicht einfach direkt über einen Controller angesteuert wird, sondern es ist ebenfalls ein ESP32 (Pico D4) verbaut hat, der I2C auf SPI für den Displaycontroller umsetzt. Das hat auch den Vorteil, dass man die I2C-Adresse ändern kann und keinen Multiplexer braucht. Und man könnte eine eigene Firmware mit komplett anderer Funktionalität aufspielen. Man benötigt dazu noch einen Adapter (ESP32 Downloader, nach "m5stack A105" suchen). Ob das Teil Standalone geht, müsste man probieren. Es wird aber vmtl. keine WLAN-Antenne eingebaut sein. Ich bestelle mir auf alle Fälle mal so ein Teil und schaue es mir an. Das habe ich nämlich noch nicht in der Hand gehabt, die Fotos sind mit einem M5StickC Plus entstanden, der aber das gleiche Display hat. Der wäre auch eine Möglichkeit, die Farbe ist aber nicht wirklich schön.

Das LCD kostet ab ~20 EUR, den M5StickC Plus bekommt man ab ~25 EUR.

Alternativen
Man muss natürlich nicht m5Stack verwenden, mit dem gleichen Code läuft das auch auf einem beliebigen ESP32 und - mit kleinen Anpassungen - einem passenden (von lvgl unterstütztem) Display. Vor allem das Display könnte ja durchaus größer sein. Mal zum Vergleich:
  • 2" 320x240
    • 4.06cm × 3.05cm = 12.39cm² at 200 PPI
  • 3,5" 480x320
    • 7.4cm × 4.93cm = 36.48cm² at 164.83 PPI
Mit 3,5" hat man die 3-fache Fläche, bringt also auch deutlich mehr Infos unter. Dafür ist das Display etwas gröber, wenn man aus gewissem Abstand drauf schaut, sollte das aber nicht auffallen. Und man braucht natürlich auch mehr Platz um das Teil unterzubringen. Das muss man also abwägen.

Als fertige Lösungen bieten sich an:
  • WT32-SC01 (Plus) - 32 €
    • ESP32 und 3,5"-Display in einem, deshalb natürlich größer: 92 x 60 x 11 mm
    • Zwei Versionen, ohne und mit Plus.
    • Die neue Plus-Version hat ein Gehäuse und der USB-Anschluss ist versteckt, aber man muss über einen extra Anschluss das Programm aufspielen, USB ist nur zur Stromversorgung. Man braucht also noch einen USB-Seriell-Wandler mit 3,3V Logikpegel. Deshalb vielleicht doch eher die alte Version.
  • Wio Terminal - ~41 €
    • Kein ESP32, sondern ein SAMD51 als Mikrocontroller. WLAN ist aber auch dabei und das Display ist etwas größer (2,4"). Man kann aber vmtl. einen Großteil des Codes übernehmen. lvgl geht auf alle Fälle, fürs WLAN muss man den Code sicher etwas anpassen.
  • LilyGO LILY Pi ESP32 - ~38 €
    • Auch ein großes Display (3,5"), aber ein insgesamt recht großes Gehäuse (100 x 63 x 31 mm).
    • Das Gehäuse sieht auf den Bildern/Videos auch eher preiswert aus, das fällt aber im Gehäuse dann vmtl. nicht mehr so auf.

Oder:
https://www.lilygo.cc/products/t-display-s3 (1,9", wenn man wenig Platz hat)
https://www.makerfabs.com/esp32-s3-parallel-tft-with-touch-ili9488.html (schneller durch parallele Anbindung des Displays, für dieses Projekt aber nicht so relevant)
https://www.ebay.de/str/buydisplay/TFT-Display/_i.html?store_cat=30764039012 (große Auswahl an Displays)
https://esp32touchdown.com (etwas teurer, Versand aus Europa)

Ausblick​

Je nachdem, wie groß überhaupt das Interesse ist, wollte ich die Programmierung noch ausführlicher beschreiben. Wenn man nur andere Sensoren haben will, wäre am Code nicht viel zu ändern, das bekommt man auch als Nicht- bzw. Wenigprogrammierer hin ;) Ich könnte auch mal probieren, ob man mit der portablen Installation von VS Code alle Extensions einbinden kann, dann könnte ich das fix und fertig bereitstellen und man kann direkt loslegen ohne groß was installieren oder konfigurieren zu müssen.



Programmierung:​

Entwicklungsumgebung einrichten: https://www.hardwareluxx.de/communi...use-selbst-programmiert.1332282/post-29747509
 
Zuletzt bearbeitet:
Tolles Projekt und sauber umgesetzt dazu! :)

Ich habe schon länger den erfolglosen Versuch vor mir liegen Hardware/Sensor-Daten auf einem kleinen OLED anzeigen zu lassen.
Dabei war mein Ansatz ein minimalistisches Tool mit C++ zu basteln, welches via WMI Daten abgreift und über serielle Schnittstelle einem Arduino entgegenschleudert.

Auf die Idee, die Daten aus der AS via Webexport zu holen hatte ich nicht. Das werde ich mal schamlos kopieren. ;)
 
Ich habe den Startpost erweitert und u.a. noch ein paar Hardware-Alternativen hinzugefügt. Ich habe auch mal probiert, PlatformIO geht leider nicht als portable Installation. Ist aber auch nicht wirklich schwierig, dass zu installieren. Entweder in die Dokumentation schauen oder eines der Tutorials anschauen: https://www.youtube.com/results?search_query=platformio+installieren. Ich verschönere gerade den Code und füge noch Kommentare ein. Am einfachsten wird wohl sein, dass mal bei Github als Repository anzulegen.

Ich habe sogar noch ein 3,5"-Display rumliegen, damait könnte ich auch mal was basteln. Da mehr Platz ist, kann man ja auch ein paar Bildchen verwenden oder einen Graph einfügen.

Ergänzung:
Ich habe mir jetzt doch ein 4,3"-Display mit integriertem ESP32 bestellt: https://www.makerfabs.com/esp32-s3-parallel-tft-with-touch-4-3-inch.html.
 
Zuletzt bearbeitet:
WT32-SC01 (Plus) - 32 €
  • ESP32 und 3,5"-Display in einem, deshalb natürlich größer: 92 x 60 x 11 mm
  • Zwei Versionen, ohne und mit Plus.
  • Die neue Plus-Version hat ein Gehäuse und der USB-Anschluss ist versteckt, aber man muss über einen extra Anschluss das Programm aufspielen, USB ist nur zur Stromversorgung. Man braucht also noch einen USB-Seriell-Wandler mit 3,3V Logikpegel. Deshalb vielleicht doch eher die alte Version.
Hallo erstmal, wo und wie schließe ich denn Groove-Sensoren an (VCC,GND,SDA,SCL)?
 

Programmierung​

Einrichten der Entwicklungsumgebung​

PlatformIO​

Erst Visual Studio Code installieren und dann unter den Extensions "PlatformIO" suchen und installieren.

LVGL-Simulator​

Da der Upload auf den Mikrocontroller ja doch recht lang dauert, kann für das Ausprobieren der GUI auch den Simulator benutzen. Dazu Visual Studio 2019 (2022 ging bei mir auch) installieren und das Repository - wie bei Github beschrieben - klonen. Bei der Installation den Workload "Desktopentwicklung mit C++" auswählen. Ich hatte noch nichts für C++ installiert, da ich normalerweise .NET mit C# programmiere, deshalb kam beim Kompilieren erst mal ein Fehler:
Code:
Error    MSB8020    The build tools for v142 (Platform Toolset = 'v142') cannot be found. To build using the v142 build tools, please install v142 build tools.  Alternatively, you may upgrade to the current Visual Studio tools by selecting the Project menu or right-click the solution, and then selecting "Retarget solution".    LVGL.Simulator    C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets    439
Den Workload noch nachinstalliert, dann hat es auch geklappt. Es wird mit einer Demo-App gestartet. In der Datei LVGL.Simulator.cpp kann man dann in der main-Methode andere Beispiele ausprobieren, dazu einfach bei der betreffenden Zeile den Kommentar entfernen. Oder eigenen Code schreiben. Am besten auch als Methode in einer eigenen Datei anlegen. Die Displaygröße wird ebenfalls in in der Datei LVGL.Simulator.cpp in der Methode single_display_mode_initialization geändert. Weiter unten findet man noch zwei Variablen (hor_res und ver_res), die scheinen aber keine Rolle zu spielen.




Fortsetzung folgt...
Beitrag automatisch zusammengeführt:

Hallo erstmal, wo und wie schließe ich denn Groove-Sensoren an (VCC,GND,SDA,SCL)?
Steht im Handbuch: https://fccid.io/2AFOS-WT32-SC01/User-Manual/User-manual-5453284.pdf bzw. http://www.wireless-tag.com/wp-content/uploads/2022/11/WT32-SC01-Plus-V1.3-EN.pdf. Beim Plus hast du den I/O-Header, bei dem anderen die 40-polige Steckerleiste. Da man beim ESP32 nicht auf bestimmte Pins festgelegt ist, kannst du die I2C-Schnittstelle ja mit (fast) beliebigen Pins erstellen bzw. musst du eh angeben, welche Pins du nutzt, wenn es nicht die Standard-Pins (21/22) sind. Hier ist das gut beschrieben: https://randomnerdtutorials.com/esp32-i2c-communication-arduino-ide/.

Wenn du nach der Beschriftung beim Modell ohne Plus gehst, sind das 18 und 19:
C:
Wire.begin(18, 19);
 
Zuletzt bearbeitet:
Dem einen oder anderen wird deine ausführliche Dokumentation bestimmt weiter helfen. (y) Danke!

Leider habe ich für mich noch nicht das richtige Display für den ESP32 gefunden, womit ich zufrieden bin und vom Preis her passt.
Wobei das "MaTouch 4.3" vielversprechend aussieht. Vielleicht wage ich es doch nochmals.
Wie sieht es bei dem Display mit Blickwinkel-Stabilität aus? (finde überhaupt nichts darüber)
 
Zuletzt bearbeitet:
Meinst du das: https://www.makerfabs.com/esp32-s3-parallel-tft-with-touch-4-3-inch.html? Das habe ich schon einige Zeit da liegen, hatte nur bisher keine Zeit... Das LVGL-Testprogramm habe ich mal drauf gespielt. Achso: Falls du PlatformIO nimmst, lade dir die "GFX_Library_for_Arduino" mit der ArduinoIDE runter und kopiere sie am besten in dein Projekt (Ordner lib). Die Bibliotheken unterscheiden sich komischerweise und die Version, die PlatformIO nimmt, funktioniert nicht.

Das Makerfabs ist ein IPS-Display, zwar nicht so gut wie ein guter IPS-Monitor aber nicht schlecht. Und das Display vom Core 2 ist wirklich sehr gut.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh