Nachdem wir uns mit den Grundlagen vertraut gemacht haben, wollen wir uns jetzt anschauen, wie die Kommunikation tatsächlich abläuft. Um das Ganze möglichst deutlich zu machen, werde ich zunächst ein Terminalprogramm verwenden und das Nextion-Display über einen USB-UART-Adapter ansprechen.
Nehmen wir an, Ihr Hostcontroller ermittelt über einen Sensor eine Temperatur und soll sie dann auf einer Pegelanzeige im Nextion-Display darstellen. Im Nextion-Editor haben Sie dazu ein Objekt vom Typ "Progress bar" auf der Anzeige platziert, die dann wie folgt aussieht:
Der Nextion-Editor vergibt standardmäßig als Objektnamen für den ersten Progress Bar den Wert "j0". Sie können ihn aber im Editor beliebig ändern, damit Sie später sofort wissen, was auch gemeint ist. Wir ändern den Wert auf "temp". Der Name ist nicht unwichtig, denn die späteren Kommandos beziehen sich auf diese Angabe.
Wenn wir diese Minianwendung auf die Nextion-Anzeige übertragen, erscheint das gleiche Bild wie im Editor. Der Balken ist zur Hälfte grün ausgefüllt. Das kommt daher, weil grün die Füllfarbe (pco) und grau der Hintergrund (bco) ist, als Füllmodus "solid color" gewählt wurde und der angezeigte Wert (val) standardmäßig auf 50 steht.
Um die Balkenanzeige zu verändern, müssen wir für "val" einen anderen Wert eintragen. Über die Punktnotation beziehen wir uns auf die Eigenschaft eines Objekts: objektname.eigenschaft. Würden wir den Wert auf 20 ändern, wäre das korrekte Kommando: temp.val=20
Falls unser Upload problemlos funktioniert hat können wir davon ausgehen, dass die serielle Schnittstelle auch korrekt angeschlossen ist. Um zu prüfen, ob die Syntax unseres Befehls richtig ist, können Sie im Nextion-Editor in den Debug-Modus wechseln und bei "send command to:" zunächst den Simulator wählen:
Reagiert der Simulator auf Ihre Eingaben, ist der Name und die Kommandosyntax korrekt und Sie können nun prüfen, ob auch das Display in der gleichen Art und Weise reagliert. Dazu wählen Sie bei "send command to:" jetzt den Eintrag: "Nextion Device", stellen den korrekten Port ein und drücken auf "Connect":
Senden Sie jetzt das Kommando noch einmal und auch die reale Anzeige sollte sich verändern.
Im Grunde könnten wir die weiteren Befehle anhand des Nextion Editors ausprobieren. Doch wir wollen sehen, wie die Kommunikation tatsächlich abläuft und der Editor verschweigt uns einen ganz wichtigen Part davon.
Ein Nextion-Befehl besteht immer aus einer Klartext-Anweisung (z. B. temp.val=20) und der Stopp-Sequenz "0xff 0xff 0xff" (dezimal: 255 255 255). Diese Sequenz ist notwendig, weil die Klartext-Anweisung unterschiedlich lang sein kann und der Nextion aber auch der Host-Controller im umgekehrten Fall wissen müssen, wann der Befehl oder die Daten zu Ende sind.
Woher weiß der Nextion aber, dass er die 255 nicht als Zeichen interpretieren muss? Ganz einfach, weil die 255 nicht mehr im Definitionsbereich des einfachen Zeichensatzes liegt. Die 255 würde zwar im erweiterten Zeichensatz dem "ÿ" entsprechen, aber solche Sonderzeichen kennt der Nextion nicht.
Ein einfaches Terminalprogramm erlaubt uns aber nicht die Eingabe von binären Daten (ausgenommen einiger Steuerzeichen). Zwar kann man in einigen Programmen mittels ALT+255 bzw. ALT+0255 das ÿ-Zeichen darstellen, aber nicht immer klappt dann auch die Übertragung. Aus diesem Grund nutze ich das kostenlose Programm "HTerm" von Tobias Hammer. Es ist zwar offensichtlich in der Beta-Version 0.81 von 2008 stehen geblieben, aber es ist ausgesprochen mächtig und Sie können wir sehen, was auf Ihrer seriellen Schnittstelle passiert. Sie können das Programm hier herunterladen, es ist nach dem Entpacken sofort ohne Installation einsatzfähig.
Nachdem Sie ganz oben die korrekten Parameter für die Schnittstelle eingestellt und auf "Connect" geklickt haben, besteht die Verbindung zwischen PC und Nextion-Display.
Für uns ist zunächst einmal das Eingabefenster ganz unten "Input Control" wichtig. Dort können wir per Haken auswählen, in welchem Format die eingegebenen Daten im Fenster "Transmitted Data" angezeigt werden. Sinnvoll für uns ist hier "Ascii" und "Hex".
Direkt darunter befindet sich das Eingabefeld und davor lässt sich für jedes Zeichen das gewünschte Format (hinter Type) wählen. Wir beginnen mit "ASC" für die Texteingabe, geben dann unseren Befehl "temp.val=80" ein, wechseln - ohne ein Leerzeichen einzugeben! - zu "HEX" und geben dann "FFFFFF" ein. Die Abstände erzeugt das Programm von allein, Sie brauchen also keine Leerzeichen einzugeben.
Nach der korrekten Eingabe sollte das Programm so aussehen:
Drücken Sie dann die Enter-Taste und das Kommando wird an das Nextion-Display gesendet.
Im unteren Fenster (Transmitted Data) können Sie jetzt sehen, wie die Daten tatsächlich übertragen wurden. Jedem ASCII-Zeichen ist der entsprechende Code zugeordnet:
Falls Sie alle Rückmeldungen aktiviert haben (wie dazu kommen wir noch) erhalten Sie nach Eingabe Ihres Kommandos im Fenster "Received Data" folgende Anzeige:
Mit dieser Konfiguration können wir jetzt in die Tiefen der Nextion-Programmierung einsteigen. Falls Sie zum Ausprobieren kein Terminalprogramm nutzen wollen, sondern die Befehle direkt z. B. vom Arduino senden möchten, gilt folgendes:
Die Klartextbefehle übertragen Sie mit der print-Methode von Serial, z. B.:
Serial.print("temp.val=20");
Im direkten Anschluss fügen Sie dann die 3 Befehle zum Senden der binären Daten an:
Serial.write(0xff);
Serial.write(0xff);
Serial.write(0xff);