Rückgabeformate und Fehlercodes


Der Nextion sendet seine Daten selbständig oder auf Anforderung an den Host-Controller. Dabei ist es wichtig zu wissen, wie die Datenstrukturen (Protokolle) aufgebaut sind. Wir haben schon mehrfach gelesen, dass eine Datenübertragung vom und zum Nextion z. B. sehr häufig mit der Terminierung "0xff 0xff 0xff" beendet wird. Aber das ist nicht immer der Fall und es gibt noch weitere Festlegungen, die wir kennen müssen.

Eine spezielle Protokollfestlegung sind auch die sogenannten "Fehlercodes". Diese Funktionalität ist bei einer Kommunikation von großem Interesse, denn Sie können damit in gewisser Weise feststellen, ob Ihre Kommandos auch richtig angekommen bzw. verarbeitet worden sind. Es handelt sich dabei nicht um Nutzdaten, sondern lediglich um Informationen über den Erfolg oder Misserfolg bestimmter Aktionen.

Ob und in welcher Form Sie Rückgaben vom Nextion erhalten, bestimmen Sie über die bkcmd-Systemvariable.

Rückgabeformate

Die folgende Beschreibung ist wie folgt aufgebaut:

  • Unter Bedeutung finden Sie das Ereignis, das die Datenrückgabe ausgelöst hat
  • cid = ID der auslösenden Komponente
  • pid = ID der Seite, auf der sich die Komponente befindet
  • d0...dx = Die Nutzdaten (z. B. x0, y0 für die Koordinaten)
  • evt = Informationen über das Event (1= press, 0 = release)
  • end = Terminierung = 0xff 0xff 0xff
1. Byte Bezeichnung Format Beispiele
0x65 Touch-Event 0x65+pid+cid+evt+end 0x65 0x01 0x02 0x01 0xff 0xff 0xff
Die Komponente "id=2" auf der Seite 1 hat ein Touch-Press-Event ausglöst
0x66 Seiten-ID 0x66+pid+end 0x66 0x01 0xff 0xff 0xff
Nach Senden des Befehls sendme erfolgt die Rückgabe der Seiten-ID (hier Seite 1)
0x67 Koordinaten 0x67+x2+x1+y2+y1+evt+end 0x67 0x01 0x30 0x00 0x1e 0x01 0xff 0xff 0xff
Auf der Koordinate x=304 (hexadezimal "130") und y=30 (hexadezimal "1e") wurde der Bildschirm berührt. Die Ausgabe erfolgt nur wenn der Inhalt von sendxy 1 ist.
0x68 Touch-Event im Sleep-Modus 0x68+x2+x1+y2+y1+evt+end 0x67 0x01 0x30 0x00 0x1e 0x01 0xff 0xff 0xff
Auf der Koordinate x=304 (hexadezimal "130") und y=30 (hexadezimal "1e") wurde im Sleep-Modus der Bildschirm berührt. Die Ausgabe erfolgt unabhängig vom Zustand von sendxy. Da im Sleep-Modus keine Elemente sichtbar sind, wäre eine Auswertung der einzelnen Touch-Aktionen für die Objekte sinnlos. Deshalb werden generell nur die Koordinaten zurückgegeben.
0x70 Rückgabe eines Strings 0x70+d0+d1+d2+...+dn+end 0x70 0x74 0x65 0x73 0x74 0xff 0xff 0xff
Es wurde der String "test" übergeben.
0x71 Rückgabe einer 4-Byte-Zahl 0x71+d0+d1+d2+d3+end 0x71 0x44 0x01 0x00 0x00 0xff 0xff 0xff
Es wurde die Zahl 324 übertragen 0144(hex)
0x86 Auto-Sleep-Modus 0x86+end 0x86 0xff 0xff 0xff
Es wurde automatisch in den Sleep-Modus gewechselt.
0x87 Auto-Wakeup 0x87+end 0x87 0xff 0xff 0xff
Im Display wurde automatisch ein Wakeup ausgelöst.
0x88 Erfolgreicher Systemstart 0x88+end 0x88 0xff 0xff 0xff
Das System wurde erfoglreich gestartet.
0x89 Start von SD-Karte 0x89+end 0x89 0xff 0xff 0xff
Es wurde eine SD-Karte erkannt und die Firmware darauf ins Nextion-Device übertragen.
0xfe Transparent Modus 0xfe+end 0xfe 0xff 0xff 0xff
Momentan gibt es zwei Befehle addt und wept, bei denen nach der Ausführung der transparente Modus erreicht wird. Dabei wird zuvor eine Anzahl von Bytes festgelegt, die dann nacheinander übertragen werden können. Diese Kommandos sind vor allem für größere Datenmengen geeignet.
 

Fehlercodes

Über die einzelnen Fehlercodes können Sie sehr schnell eingrenzen, wo ein Problem liegt. Im Gegensatz zu den Rückgabewerten gibt es hier keine weiteren Parameter, sondern immer nur das Fehler-Byte gefolgt von der Endterminierung. Deshalb werde ich mir hier das Format und Beispiele sparen.

Fehlercode Beschreibung
0x00 Es wurde kein gültiger Befehl gesendet.
0x01 Der einzige Fehlercode über den Sie sich freuen können. Er besagt: Befehl wurde erfolgreich ausgeführt!
0x03 ungültige ID für Seite
0x04 ungültige ID für Bild
0x05 ungültige ID für Zeichensatz
0x11 ungültiger Wert für Baudrate
0x12 ungültige Kanal-Nr. bei einer Waveform-Komponente
0x1A ungültiger Variablenname oder unbekannte Eigenschaft einer Komponente
0x1B ungültige Zuweisung für eine Variable (z. B. progressbar.val="text" oder text.txt=10)
0x1C Zuweisung zur Eigenschaft nicht erfolgreich*
0x1D Fehler beim Ausführen der PERFROM-Operation*
0x1E fehlerhafte Anzahl von Befehlsparametern
0x1F fehlerhafte I/O-Operation*

*Die Erläuterungen dazu werde ich noch vertiefen, wenn mir weitere Informationen dazu vorliegen.