Nextion HMI Touch-Displays

2

13.07.2017 von plaintron

Die letzten Tage habe ich mich mit einem Touch-TFT von Nextion beschäftigt und bin ziemlich begeistert. Es handelt sich dabei um ein „intelligentes“ Display, was nichts anderes bedeutet, als dass ein eigener Controller im Display-Modul eingebaut ist, das sich um die Bereitstellung von Bedienelementen, Anzeige von Texten und Grafiken sowie die Verarbeitung und Rückmeldung von Touch-Events kümmert. Das ist keine völlig neue Erfindung. Bekannt sind etwa die Module von Electronic Assembly, wie sie bei Reichelt angeboten werden.

Die Nextion-Displays sind in Größen von 2,4 Zoll bis zu 7 Zoll lieferbar und kosten nur wenig mehr als vergleichbare passive Displays. Das macht sie gerade für Hobby-Anwendungen interessant. Die Intelligenz stellt jeweils ein STM32-Controller bereit, der je nach Ausstattungsvariante mit unterschiedlich großem RAM und EEPROM kombiniert ist. Die „Enhanced“-Modelle verfügen zusätzlich über frei verwendbare GPIO-Pins.

Ich habe mir die kleinste und günstigste Variante gekauft und versucht, darauf die Anzeigen und Menüsteuerungen für mein Labornetzteil umzusetzen. Aber schauen wir uns zunächst das Konzept dieser Displays an:

Bei einfachen TFT-Displays muss der gesamte Bildinhalt im Controller berechnet und dann an das Display übertragen werden. Wenn bewegte Inhalte gewünscht sind, benötigt man außerdem den zweifachen Speicherplatz, um erst alle Inhalte im Speicher zur Display-Matrix zusammenstellen zu können und dann den Inhalt komplett an das Display zu übertragen.

Ein ATmega328 ist dann schon reichlich ausgelastet, denn bereits beim kleinsten Display müssen schon 76.800 Bildpunkte in drei Farbwerten berechnet werden. Das geht nur mit einer viel zu geringen Wiederholfrequenz und Nutzung des Display-Speichers.

Beim Nextion-Display kümmert sich ein ARM7-Controller mit 48MHz und 3584 Byte RAM um die Darstellung und entlastet so den externen Controller, der nur noch Steuerbefehle berechnen muss. Display-Elemente werden vorgefertigt und im EEPROM (4MB) gespeichert.

Kommen wir zur Konzept:

Die Arbeit beginnt im Grafikprogramm. Alle benötigten Screens werden in Original-Auflösung (hier 240×320) vorgefertigt und dann überlegt, welche Elemente als Grafik exportiert werden müssen und welche Teile „on-the-fly“ erzeugt werden können. Skalen und 3D-Buttons oder Hintergründe werden also als einzelne Grafiken exportiert und anschließend im Nextion-Editor an die entsprechenden Stellen gesetzt. Das ist so einfach wie bei einem kleinen Layout-Programm. Weitere Elemente wären etwa Text- oder Ziffernanzeigen, Zeiger, Statusanzeigen etc.

Im Nextion-Editor lassen sich verschiedene vorgefertigte Elemente auf den Bildschirm klicken. Dort gibt es klassische Buttons, unsichtbare Schaltflächen, Textfelder, numerische Anzeigen, Schieberegler, Fortschrittsbalken, bewegte Texte, Drehknöpfe bzw. kreisfürmige Skalen und sogar eine Oszilloskop-Anzeige für Wellenformen. Außerdem lassen sich einzelne Bilder platzieren oder auch Ausschnitte, die einen Teil eines Bildes anzeigen. Weiterhin lassen sich Variablen, Timer, Checkboxen und Radio-Buttons anlegen. Für Textanzeigen lassen sich entsprechende Pixelfonts mit einem kleinen Zusatztool erstellen und bearbeiten.

Der Nextion-Editor stellt zur Verknüpfung der Elemente eine rudimentäre Skriptsprache bereit, um etwa Touch-Ereignisse abzufangen um damit den Inhalt oder die Farbe eines anderen Elements zu ändern und um Daten über UART auszugeben. Die Möglichkeiten sind hier recht begrenzt, viele von echten Programmiersprachen gewohnte Konstrukte gibt es nicht, aber mit etwas Kreativität und Übung lässt sich damit das erreichen was man möchte.

Alles was nicht im Display selbst umgesetzt werden kann oder soll, übernimmt der externe Controller. Zur Kommunikation steht nur eine UART mit variabler Baudzahl zur Verfügung.  Der SPI-Bus wird ausschließlich intern genutzt. Selbst bei 115200 Baud (Maximalwert) ist die Übertragung per UART noch zu langsam, um ganze Bildinhalte zu übertragen. Es gilt also abzuwägen, was schnell ablaufen muss und deshalb vom STM32 erledigt werden soll und was besser im externen Controller berechnet wird.

Zur Ansteuerung des Displays habe ich einen Olimexino 32U4 verwendet, das ist ein Leonardo-Klon (aber besser und billiger). Hier habe ich eine separate serielle Schnittstelle zur Verfügung, während ich den USB-Anschluss zum debuggen nutzen kann. Bei einem 328er-Arduino geht das nur mit SoftSerial. Der Flaschenhals ist hier ganz klar die UART. Der Atmel-Controller ist ausreichend schnell für meine Zwecke.

Wir haben also hier folgenden Arbeitsablauf:

  • Entwurf im Grafikprogramm
  • Im Nextion-Editor das Layout zusammenklicken und skripten
  • Zusammenstellung kompilieren und via UART auf das Display laden
  • Ansteuerung des Displays über UART

Und mit etwas Übung ist in weniger als einer Stunde eine komplexe Bedieneinheit für ein Controller-Projekt fertig. Müsste ich jedes Pixel des Displays selbst berechnen, wäre ich alleine damit mehrere Tage beschäftigt. Insgesamt fühlt sich die Arbeit mit dem Editor ein wenig an wie Arduino-IDE mit Layout-Unterstützung. Der fertige Entwurf lässt sich als .hmi-Datei speichern (HMI für Human Machine Interface) und am PC bis ins Detail testen.

Beim Debug-Vorgang wird der Display-Inhalt auf dem Monitor angezeigt und kann angeklickt oder mit Steuerbefehlen beschickt werden. Der Debugger nimmt auch Befehle von der seriellen Schnittstelle des PCs entgegen, hier kann also bereits der später verwendete Controller in den Test mit einbezogen werden. Das endgültige Design lässt sich so schon fertig entwickeln, wenn man noch überhaupt kein HMI-Display besitzt. Mit einem Klick wird das Design auf das Display geladen. Der Uploader sucht selbständig nach der richtigen Schnittstelle, schaltet die Übertragungsgeschwindigkeit um und führt den Upload durch. Auf dem Display selbst und im Uploader wird angezeigt, welche Datenmenge bereits übertragen ist und wie lange der Upload noch dauert. Bei größeren Designs kann das durchaus einige Minuten in Anspruch nehmen.

Alternativ lassen sich fertige Konfigurationen auch exportieren und per SD-Card auf das Display-Modul übertragen. Dessen Controller prüft bei jedem Einschalten, ob neue Daten vorhanden sind und lädt diese dann ins EEPROM.

Die Qualität des Displays selbst ist nicht außergewöhnlich hoch, wie bei dem Preis zu erwarten. Es handelt sich um einfache resistive Touch-Displays mit 65k Farben, wie sie in unzähligen Fernost-Mobiltelefonen verbaut wurden. Sie sind stark blickwinkelabhängig, haben einen ausreichenden Kontrast bei gedämpftem Licht und sind natürlich nicht multitouchfähig. Trotzdem sind sie völlig ausreichend für kleine Steuerungen und Anzeigen und bei dem Preis (unter 20 Euro in China, Itead) lohnt es sich kaum, ein Panel mit Tastern, Schaltern, Drehgebern und LCD zu bestücken, wenn sich das alles mit einem kleinen Modul und ein paar Klicks erledigen lässt.

Das soll als Einstieg genügen. In einem späteren Beitrag zeige ich, wie die Umsetzung für meine Netzteilsteuerung im Einzelnen aussieht.

Wer sich schon mal mit der Programmierung dieser Displays beschäftigen möchte, findet bei Herrn Böcker ein umfangreiches Tutorial. Dazu muss man nicht einmal ein solches Display besitzen. In der Simulation sind alle Möglichkeiten vorhanden.

 

Advertisements

2 Kommentare zu “Nextion HMI Touch-Displays

  1. […] möchte ich zeigen, wie die Umsetzung eines Interface mit verschiedenen Funktionen mit einem Nextion-HMI umgesetzt werden […]

    Gefällt mir

  2. […] Nextion-HMI Touch-Displays […]

    Gefällt mir

Kommentieren

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Blogverzeichnis - Bloggerei.de
%d Bloggern gefällt das: