Unser Touchdisplay ist das zentrale Bedienelement für unsere Steuerung und löst damit die meist unübersichtlichen und nicht wirklichen schönen Bedienteile anderer Hersteller ab. Kernaufgabe unserer Entwicklungen war es, Geräte und Sensoren verschiedener Hersteller in einem System zu vereinen. Dadurch können wir diese Informationen nun gebündelt über das Webinterface oder den Touchscreen anzeigen und steuern. Wir gehen dabei aber einen anderen Weg als die meisten Hersteller und verwenden kein HDMI Touchscreen, sondern ein eigenständiges Gerät, welches extra programmiert werden muss. Warum wir das tun und wie ihr euch was Eigenes nachbauen könnt, gibt's hier im Tutorial.
In unser Display sind unzählige Stunden an Entwicklung eingeflossen, bis wir das Ganze so weit hatten. Es ist also alles andere als trivial.
Da sich aber viele von euch eine offene Datei gewünscht haben, haben wir hier eine kleine Zusammenfassung gebaut. Dieses Tutorial ist gewissermaßen ein Überblick über die Funktionsweise und eine Einstiegsanleitung für die Enthusiasten.
1. Hardware
Als Erstes müssen wir uns fragen, warum wir kein HDMI Display mit Touchscreen verwenden und uns dafür entschieden haben eine „eigenes“ Gerät zu entwickeln, welches noch extra programmiert werden muss. Im ersten Moment klingt dies nach sehr viel mehr Aufwand, warum machen wir uns diesen also?
Als Erstes sparen wir uns das Verlegen von drei Kabeln und reduzieren dies auf ein Netzwerkkabel. Wir verzichten auf HDMI, USB und Strom und geben sowohl die Stromzufuhr als auch die Kommunikation über das Netzwerkkabel. Dabei handelt sich um keinen Netzwerk-Standard und hat auch mit Netzwerk nichts zu tun. Von der Denkweise ähnelt es zwar Power-Over-Ethernet, aber wir nutzen nur die weitverbreitet RJ45 Verbindungen. Es handelt sich bei der Kommunikation um die erste serielle Schnittstelle des Raspberry PIs, diese ist sowohl auf dem 3er als auch beim 4er gleich. Mehr dazu aber gleich, wenn wir auf den Schaltplan schauen.
Ein weiterer Grund ist die sehr schnelle Reaktionszeit des Displays und vor allem die sehr schnelle Wake-UP Time aus dem Standby. Auch können wir auf diesem Display sehr leicht einen echten Standby einschalten, um Strom zu sparen. Dies ist bei fast keinem HDMI Display der Fall.
Diese Technik von einem separaten Eingabegerät, welches mit dem Hauptcomputer kommuniziert, wird oft in Industrie-Anlagen und medizinischen Geräten verwendet.
Genau gesagt benutzen wir Displays der Firma Nextion und programmieren mit ihrem Editor unser Nutzerinterface. Diese Displays sind in der Makerszene sehr verbreitet und man findet dadurch viele Tutorials und Beispiele. Wir verenden das 7 kapazitive Display in der "INTELLIGENT SERIES". Unsere Displays werden Software seitig mit einem Kopierschutz versehen. Somit könnt ihr nicht einfach ein Display kaufen und unser Image aufspielen. Die von uns gekauften Displays können aber Problem los mit eurer .TFT programmiert werden.
2. UART ADAPTER
Das Display benötigt einen Spannungspegel von 5V. Da wir diesen nicht über ein sehr langes Kabel aufrechterhalten können, verwenden wir den sogenannten UART-Adapter.
Dieser hat die Aufgabe den auf dem RJ45 Stecker liegende Vin (System-Spannung) auf 5V zu regeln und die serielle Schnittstelle (UART1) auszugeben. Der Adapter könnte also auch für andere serielle Geräte genutzt werden, zum Beispiel könnte man ein GPS Modul dort anschließen, falls man kein Display benutzen möchte.
Der Signalpegel liegt bei 3,3V und ist somit passend für die Spannung vom Raspberry.
Hier ist nochmal die Pinbelegungvom Relayboard zu sehen. UART1 liegt an den PINS 8 und 10 des Raspberry an.
3. Editor
Da wir wie oben beschrieben die Displays von Nextion benutzen, verwenden wir auch ihren Editor.
Den Editor könnt ihr direkt von der Nextion Seite downloaden.
Mit diesem Editor wird die ganze Oberfläche gebaut und benutzt dafür einen von Nextion entwickelten Befehlssatz.
https://nextion.tech/instruction-set/
Mit diesen Befehlen kann man sich seine ganzes UI bauen und anpassen. Hier empfehlen wir euch auf Youtube viele Videos anzuschauen und mit kleinen Schritten anzufangen.
Update:
Mit Hilfe des Editors könnt ihr via serieller Verbindung das Display direkt programmieren oder ihr lasst euch eine .TFT File ausgeben, welche ihr über eine SD-Karte auf das Display flasht. Genauso wie ihr es mit unseren Updates macht.
4. Protokoll
Wie beschrieben kommuniziert das Display mit dem VanPI OS via serieller Verbindung. Anders als die meisten Nextion Projekte arbeiten wir aber nicht mit Strings, die wir senden (nur sehr punktuell), sondern mit Hex-Buffern. Dies ermöglicht es uns, die zu übertragenden Daten stark zu reduzieren und somit eine schnellere Verbindung mit dem System zu haben.
https://github.com/Pekaway/VAN_PI/wiki/touchdisplay
Hier ist auch nochmal die Dokumentation angefügt, wo die Schnittstelle beschrieben ist.
Prinzipiell ist der Ablauf folgender. Das Display schickt an das VANPI OS auf welcher Seite es sich gerade befindet und das VANPI OS antwortet darauf mit dem für diese Seite relevanten Daten. Im Anhang findet ihr eine HMI File. Anhand dieser gehen wir den Kommunikationsfluss im Beispiel durch.
5. Beispiel
Für die Erklärung dieses Beispiels habe ich ein kurzes Video für euch aufgenommen.
PekawayNextionExample .HMI-Datei: