In diesem Beitrag soll es...
Tutorial Nextion #6 – Send Value to Arduino
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.
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.
2. Das Nextion Programm
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.
3. Der Arduino Code
#include
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
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.
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);
}
Folgende Bauteile wurden verwendet: