Tutorial Nextion #6 – Send Value to Arduino

14 Kommentare
Tutorial Nextion #6 – Send Value to Arduino

In diesem Beitrag geht es darum, wie Ihr Wert (Value) an den Arduino senden könnt.


Inhaltsverzeichnis

  1. Was wird für das Projekt benötigt.
  2. Das Nextion Programm
  3. Der Arduino Code



1. Was wird für das Projekt benötigt.

Ihr braucht einen Microcontroller (Arduino, ESP8266, ESP32 oder ein anderes Board), in meinem Beispiel der Arduino Uno R3. Dann braucht Ihr natürlich noch ein Nextion Display euer Wahl. Ich habe das Nextion Discovery 3,5 Zoll verwendet. 1x Nextion 3.5″ Discovery Touch Display 480×320 HMI – NX4832F035 - https://ap-url.de/nextion35d
1x UNO R3 ATmega328P Board mit USB Kabel Arduino Uno R3 kompatibel - https://ap-url.de/arduinouno



2. Das Nextion Programm

In der Nextion Software erstellen wir uns ein Projekt. In diesem Projekt brauchen wir 3 Nummernfelder und einen Button.Die ersten beiden Nummernfelder sind für die Eingabe der Werte gedacht.Das dritte Nummernfeld ist für die Ausgabe da. Der Button wird zum senden der Werte benötigt.


Wenn die Nummernfelder Platziert sind muss für n0 und n1 noch ein Keyboard ausgewählt werden. Das geht in dem Ihr in den Attributen unter vscope global wählt und unter key das numeric keyboard wählt. n2 bleibt wie es ist, dieses dient zur Ausgabe.


Im nächsten Schritt müssen wir dem senden Button, jenach wunsch in das Touch Press Event oder in das Touch Release Event folgendes Eintragen.

prints n0.val,0
prints n1.val,0

Mit diesen Einträgen werden die Werte aus n0 und n1 beim drücken des Buttons an den Arduino gesendet.


Mit diesen Einträgen werden die Werte aus n0 und n1 beim drücken des Buttons an den Arduino gesendet.


Download Nextion und Arduino Programm (158kb .zip)




3. Der Arduino Code

#include <softwareserial.h>
String endChar = String(char(0xff)) + String(char(0xff)) + String(char(0xff));
String ReceivedData = "";

SoftwareSerial nextion(6, 5); // RX, TX
int Data0;
int Data1;

union {
  char charByte[8];
  long valLong;
} value;

void setup() {
  Serial.begin(9600);
  nextion.begin(9600);
}

void loop() {
  if (nextion.available()) {
    ReceivedData += char(nextion.read());
    if (ReceivedData.length() > 8) ReceivedData = "";
  }

  if (ReceivedData.length() == 8) {
    //Serial.println(ReceivedData);
    value.charByte[0] = char(ReceivedData[0]);
    value.charByte[1] = char(ReceivedData[1]);
    value.charByte[2] = char(ReceivedData[2]);
    value.charByte[3] = char(ReceivedData[3]);
    Data0 = value.valLong;
    value.charByte[0] = char(ReceivedData[4]);
    value.charByte[1] = char(ReceivedData[5]);
    value.charByte[2] = char(ReceivedData[6]);
    value.charByte[3] = char(ReceivedData[7]);
    Data1 = value.valLong;
    Serial.println(Data0);
    Serial.println(Data1);
    ReceivedData = "";
  nextion.print("n2.val=");
  nextion.print(Data0);
  nextion.print(Data1);
  nextion.write(0xFF);
  nextion.write(0xFF);
  nextion.write(0xFF);
  }


  if (ReceivedData.endsWith(endChar)) {
    Serial.println(ReceivedData);
    Serial.println("error");
    ReceivedData = "";
  }
}

Funktionsweise

Die SoftwareSerial wird inkludiert, zwei Strings angelegt endChar ist für eine Errorbehandlung da, für dieses Projekt nicht relevant. ReceivedData, hier werden die Empfangenen Daten gespeichert.SoftwareSerial an Pin 6 und 5 erstellt, int Data0 und Data1 hier werden die Werte aus n0 und n1 gespeichert.

Das union wir verwendet und die Werte in die int Data zu speichern.

#include <softwareserial.h>
String endChar = String(char(0xff)) + String(char(0xff)) + String(char(0xff));
String ReceivedData = "";

SoftwareSerial nextion(6, 5); // RX, TX
int Data0;
int Data1;

union {
  char charByte[8];
  long valLong;
} value;


Im Setup wird die Serielle Schnittstelle für den Seriellen Monitor und für das Nextion angelegt. Das Serial.beginn(9600); könnte man weglassen, ist nur für das Debug da.

void setup() {
  Serial.begin(9600);
  nextion.begin(9600);
}


Hier wird die Serielle Schnittstelle abgefragt, wenn Daten vorhanden sind, werden diese in ReceivedData gespeichert. Wenn die Datenlänge von ReceivedData größer 8 ist, wird ReceivedData wieder geleert.

void loop() {
if (nextion.available()) {
  ReceivedData += char(nextion.read());
  if (ReceivedData.length() > 8) ReceivedData = "";
}


Wenn die Datenlänge = 8 Bytes entspricht, wird Byte für Byte in das value.charByte Array übertragen. Mit dem Befehlt Data0 = value.valLong bzw. mit dem union von oben werden die 4 Bytes in Data0 geschrieben. Das gleiche passiert dann nochmal mit Data1. Wenn Ihr hier mehr Daten benötigt, müsst Ihr euch den Code entsprechend anpassen.

Zum Schluss werden dann die Data0 und Data1 an das Nextion gesendet und um n2 ausgegeben.

if (ReceivedData.length() == 8) {
  //Serial.println(ReceivedData);
  value.charByte[0] = char(ReceivedData[0]);
  value.charByte[1] = char(ReceivedData[1]);
  value.charByte[2] = char(ReceivedData[2]);
  value.charByte[3] = char(ReceivedData[3]);
  Data0 = value.valLong;
  value.charByte[0] = char(ReceivedData[4]);
  value.charByte[1] = char(ReceivedData[5]);
  value.charByte[2] = char(ReceivedData[6]);
  value.charByte[3] = char(ReceivedData[7]);
  Data1 = value.valLong;
  Serial.println(Data0);
  Serial.println(Data1);
  ReceivedData = "";
nextion.print("n2.val=");
nextion.print(Data0);
nextion.print(Data1);
nextion.write(0xFF);
nextion.write(0xFF);
nextion.write(0xFF);
}




Arduino Nextion Display

14 Kommentare

Hi there it’sme, I am аlso visitfing this web site dаily, this website
is genuinely good and the peoρle aгe гeally sharing
plesant tһoughts.

Also νisit my homepage … drainage tunbridgewells

drainage tunbridgewells


hi brauche hilfe, das funktioniert bei mir irgendwie nicht
bitte mail an r.sink121188@gmail.com

oder

bei telegram @Keule1211
wird dringend benötigt, bitte um hilfe. danke

rosi121188

Klasse, das hat´s gebracht, vielen Dank!
Ich würde mich über ein Tutorial freuen, in dem das Senden von Daten zum Nextion und ein Seitenwechsel nach dem Abarbeiten eines Durchlaufs erklärt werden.
Das läuft hier zwar schon zum Teil, (Durchlauf wird abgearbeitet) aber ich kann danach weder den Durchlauf erneut starten ohne zu resetten, noch wird die Seite gewechselt.
Vermutlich habe ich die Abbruchcodes für die Printbefehle zum Nextion xFFxFFxFF oder 0xFF

xFF

xFF nicht richtig eingesetzt.

Schöne Grüße
Stephan

Stephan


Hallo Stephan, das ist ganz einfach. Ich habe hier die Teile Markiert die geändert werden müssen.

union {

char charByte16;

long valLong;

}

value;

if (nextion.available()) {
ReceivedData += char(nextion.read()); if (ReceivedData.length() > 16) ReceivedData = "";
}
if (ReceivedData.length() == 16) {
value.charByte0 = char(ReceivedData0);

value.charByte1 = char(ReceivedData1);

value.charByte2 = char(ReceivedData2);

value.charByte3 = char(ReceivedData3);
Data0 = value.valLong;

value.charByte0 = char(ReceivedData4);

value.charByte1 = char(ReceivedData5);

value.charByte2 = char(ReceivedData6);

value.charByte3 = char(ReceivedData7);

Data1 = value.valLong;

value.charByte0 = char(ReceivedData8);

value.charByte1 = char(ReceivedData9);

value.charByte2 = char(ReceivedData10);

value.charByte3 = char(ReceivedData11);
Data2 = value.valLong;

value.charByte0 = char(ReceivedData12);

value.charByte1 = char(ReceivedData13);

value.charByte2 = char(ReceivedData14);

value.charByte3 = char(ReceivedData15);

Data3 = value.valLong;
Serial.println(Data0);

Serial.println(Data1);
Serial.println(Data2);

Serial.println(Data3);

arduino projekte

Hallo Frank,
schicke mir doch mal die Daten, dann kann ich es mir mal ansehen und besser verstehen.
Gruß
Tobias

arduino projekte

Hinterlassen Sie einen Kommentar

Bitte beachten Sie, dass Kommentare vor der Veröffentlichung genehmigt werden müssen.