Nextion Display am Nodemcu ESP32

Jetzt bin ich wieder mal auf den NodeMCU ESP32 von Joy-it gegangen. Ich habe jetzt das Minimalprogramm, das auf dem Mega gemacht hat, was es soll, in den ESP32 reingespielt und habe das

HardwareSerial Serial(2);
  Serial2.begin(9600, SERIAL_8N1, 16, 17);

dazu reingesetzt. Ohne dieses “Hardware Serial(2)” passiert gar nichts, mit den habe ich wenigstens für jede versuchte Serial2 Übertragung eine Fehlermeldung. Das schaut dann so aus:

E (3025) uart: uart_write_bytes(1629): uart driver error
E (3025) uart: uart_write_bytes(1629): uart driver error
E (3025) uart: uart_write_bytes(1629): uart driver error
E (3029) uart: uart_write_bytes(1629): uart driver error
E (3034) uart: uart_write_bytes(1629): uart driver error
E (3039) uart: uart_write_bytes(1629): uart driver error
E (3044) uart: uart_write_bytes(1629): uart driver error
E (3049) uart: uart_write_bytes(1629): uart driver error
E (4054) uart: uart_write_bytes(1629): uart driver error
E (4054) uart: uart_write_bytes(1629): uart driver error
E (5054) uart: uart_write_bytes(1629): uart driver error
E (5054) uart: uart_write_bytes(1629): uart driver error
E (6054) uart: uart_write_bytes(1629): uart driver error
E (6054) uart: uart_write_bytes(1629): uart driver error
E (7054) uart: uart_write_bytes(1629): uart driver error
E (7054) uart: uart_write_bytes(1629): uart driver error
E (8054) uart: uart_write_bytes(1629): uart driver error
E (8054) uart: uart_write_bytes(1629): uart driver error
E (8054) uart: uart_get_buffered_data_len(1706): uart driver error
E (8059) uart: uart_read_bytes(1666): uart driver error
E (8063) uart: uart_write_bytes(1629): uart driver error
E (8068) uart: uart_write_bytes(1629): uart driver error
E (8073) uart: uart_write_bytes(1629): uart driver error
E (8078) uart: uart_write_bytes(1629): uart driver error
E (11083) uart: uart_write_bytes(1629): uart driver error
E (11083) uart: uart_write_bytes(1629): uart driver error
E (11083) uart: uart_write_bytes(1629): uart driver error
E (11087) uart: uart_write_bytes(1629): uart driver error
E (11092) uart: uart_write_bytes(1629): uart driver error
E (11097) uart: uart_write_bytes(1629): uart driver error
E (11102) uart: uart_write_bytes(1629): uart driver error
E (11107) uart: uart_write_bytes(1629): uart driver error
E (12112) uart: uart_write_bytes(1629): uart driver error
E (12112) uart: uart_write_bytes(1629): uart driver error
E (13112) uart: uart_write_bytes(1629): uart driver error
E (13112) uart: uart_write_bytes(1629): uart driver error
E (14112) uart: uart_write_bytes(1629): uart driver error
E (14112) uart: uart_write_bytes(1629): uart driver error
E (15112) uart: uart_write_bytes(1629): uart driver error
E (15112) uart: uart_write_bytes(1629): uart driver error
E (16112) uart: uart_write_bytes(1629): uart driver error
E (16112) uart: uart_write_bytes(1629): uart driver error
E (16112) uart: uart_get_buffered_data_len(1706): uart driver error
E (16117) uart: uart_read_bytes(1666): uart driver error
E (16122) uart: uart_write_bytes(1629): uart driver error
E (16127) uart: uart_write_bytes(1629): uart driver error
E (16132) uart: uart_write_bytes(1629): uart driver error
E (16137) uart: uart_write_bytes(1629): uart driver error

Kann jemand anhand dieser Fehlermeldung sagen was das Problem ist ? Ich trete auf der Stelle. Sagt diese Meldung was darüber aus, ob die Serial Schittstelle offen ist. Also ob ich die falschen Pins habe ? Ich habe natürlich auch die Pins getauscht, was nicht ändert.

Das ist das derzeitige Programm.

#include <Wire.h>
//HardwareSerial Serial(2);
byte NexT[3] = { 255, 255, 255 };  // global deklarieren
const byte bufferSize = 64;
/*
Wird dann so benutzt:
Serial2.write(NexT, 3);
*/
byte Seite = 0;  // Nextion Startseite einstellen
int Messung = 35;
int ads_mv0 = 30;
String Text31 = "Ein Test";
unsigned long Sekundenablauf01 = 0;
const unsigned long Pausezeit01 = 5000;
unsigned long startzeit = 0;
unsigned long endzeit = 0;
//######################################################################################
//#################################### SETUP ###########################################
//######################################################################################
//
void setup() {
  Serial.begin(115200);
  HardwareSerial Serial(2);
  Serial2.begin(9600, SERIAL_8N1, 16, 17);
  //
  Serial2.print("Volt1.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  Serial2.print(Messung);
  Serial2.write(NexT, 3);
  Serial2.print("Volt2.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.print(ads_mv0);
  Serial2.write(NexT, 3);
}
//######################################################################################
//#################################### LOOP ############################################
//######################################################################################
//
void loop() {
  startzeit = millis();
  kommunikation();
  NextionRueck();
  endzeit = millis();
  //Serial.println(endzeit - startzeit);
}
//######################################################################################
//########################## Kommunikation mit dem Nextion #############################
//######################################################################################
//
void kommunikation() {
  Serial2.print("page 3");
  Serial2.write(NexT, 3);
  Serial2.print("Daten_suchen.Textfeld1.txt=\"Ein_Test\"");
  Serial2.write(NexT, 3);
  delay(3000);
  Serial2.print("page 0");
  Serial2.write(NexT, 3);
  Serial2.print("Volt3.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  Serial2.print(Messung);
  Serial2.write(NexT, 3);
  Serial2.print("Volt4.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.print(ads_mv0);
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=37");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=32");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt3.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=39");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
}
//######################################################################################
//########################### Rückmeldung vom Nextion auswerten ########################
//######################################################################################
//
void NextionRueck() {
  static uint8_t bIndex;
  static uint8_t buffer[bufferSize];
  bool allesDa = false;
  if (Serial2.available()) {
    uint8_t inChar = Serial2.read();
    buffer[bIndex++] = inChar;
    if (inChar == 0xFF && (bIndex >= (*buffer == 0x71 ? 8 : 3)) && buffer[bIndex - 2] == 0xFF && buffer[bIndex - 3] == 0xFF) {
      allesDa = true;
    } else {
      allesDa = (bIndex == bufferSize);
    }
  }
  if (allesDa) {
    if (*buffer != 0x65) {
      Serial.println(F("No TouchEvent"));
    } else {
      Serial.print(F("TouchEvent: page "));
      Serial.print(buffer[1]);
      Serial.print(F(", id "));
      Serial.print(buffer[2]);
      Serial.print(F(", event "));
      Serial.println(buffer[3] ? F("PRESS") : F("RELEASE"));
    }
    bIndex = 0;
  }
}

Habe jetzt auch den ESP getauscht, aber ändert nichts. Angeschlossen ist nur das Display an TX/RX 2 also 16 & 17 und der PC.

K.A. was du falsch machst, aber warum nimmst du nicht mal mein Beispiel in Post #46. Damit sollte es doch funktionieren. Zumindest läuft es bei mir so.

Wenn du erst "Serial" definierst, kann es nicht mit "Serial2" funktionieren.

Das habe ich natürlich auch probiert, hat aber auch nicht funktioniert.

Wie meinst du das genau ?

Dass ich erst Serial2 definieren soll und danach erst Serial ? Also so:

  HardwareSerial Serial(2);
  Serial2.begin(9600, SERIAL_8N1, 16, 17);
Serial.begin(115200);

Genau so, wie ich es in Post #46 geschrieben habe.
Die Namen müssen gleich lauten, damit die UART auch gestartet werden kann.
Wenn das aber auch nicht funktioniert, dann machst du etwas falsch, was ich hier nicht sehen kann. Bei mir funktioniert das problemlos.

Hier wird die UART definiert:

Das schaut dann so aus:

FQBN: esp32:esp32:esp32
Verwende das Board 'esp32' von der Plattform im Ordner: C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7
Verwendung des Kerns 'esp32' von Platform im Ordner: C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7

cmd /c if exist "C:\\Users\\fkoeh\\Documents\\Arduino\\Meine Programme\\Nextion\\Test_Minimal_Konfig_Mega\\partitions.csv" COPY /y "C:\\Users\\fkoeh\\Documents\\Arduino\\Meine Programme\\Nextion\\Test_Minimal_Konfig_Mega\\partitions.csv" "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\partitions.csv"
cmd /c if not exist "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\partitions.csv" if exist "C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.7\\variants\\esp32\\partitions.csv" COPY "C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.7\\variants\\esp32\\partitions.csv" "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\partitions.csv"
cmd /c if not exist "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\partitions.csv" COPY "C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.7\\tools\\partitions\\default.csv" "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\partitions.csv"
        1 Datei(en) kopiert.
cmd /c IF EXIST "C:\\Users\\fkoeh\\Documents\\Arduino\\Meine Programme\\Nextion\\Test_Minimal_Konfig_Mega\\bootloader.bin" ( COPY /y "C:\\Users\\fkoeh\\Documents\\Arduino\\Meine Programme\\Nextion\\Test_Minimal_Konfig_Mega\\bootloader.bin" "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\Test_Minimal_Konfig_Mega.ino.bootloader.bin" ) ELSE ( IF EXIST "C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.7\\variants\\esp32\\bootloader.bin" ( COPY "C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.7\\variants\\esp32\\bootloader.bin" "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\Test_Minimal_Konfig_Mega.ino.bootloader.bin" ) ELSE ( "C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esptool_py\\5.1.0\\esptool.exe" --chip esp32 elf2image --flash-mode dio --flash-freq 80m --flash-size 4MB -o "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\Test_Minimal_Konfig_Mega.ino.bootloader.bin" "C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-libs\\3.3.7\\bin\\bootloader_qio_80m.elf" ) )
esptool v5.1.0
Creating ESP32 image...
Merged 2 ELF sections.
Successfully created ESP32 image.
cmd /c if exist "C:\\Users\\fkoeh\\Documents\\Arduino\\Meine Programme\\Nextion\\Test_Minimal_Konfig_Mega\\build_opt.h" COPY /y "C:\\Users\\fkoeh\\Documents\\Arduino\\Meine Programme\\Nextion\\Test_Minimal_Konfig_Mega\\build_opt.h" "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\build_opt.h"
cmd /c if not exist "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\build_opt.h" type nul > "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\build_opt.h"
cmd /c type nul > "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53/file_opts"
cmd /c COPY /y "C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-libs\\3.3.7\\sdkconfig" "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\sdkconfig"
        1 Datei(en) kopiert.
Verwendete Bibliotheken erkennen ...
C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp-x32\2511/bin/xtensa-esp32-elf-g++ -c @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/cpp_flags -w -Os -Werror=return-type -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD="ESP32_DEV" -DARDUINO_VARIANT="esp32" -DARDUINO_PARTITION_default -DARDUINO_HOST_OS="windows" -DARDUINO_FQBN="esp32:esp32:esp32:UploadSpeed=921600,CPUFreq=240,FlashFreq=80,FlashMode=qio,FlashSize=4M,PartitionScheme=default,DebugLevel=none,PSRAM=disabled,LoopCore=1,EventsCore=1,EraseFlash=none,JTAGAdapter=default,ZigbeeMode=default" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DARDUINO_USB_CDC_ON_BOOT=0 @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/defines -IC:\Users\fkoeh\Documents\Arduino\Meine Programme\Nextion\Test_Minimal_Konfig_Mega -iprefix C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/include/ @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/includes -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/qio_qspi/include -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\cores\esp32 -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\variants\esp32 @C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53/build_opt.h @C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53/file_opts C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53\sketch\Test_Minimal_Konfig_Mega.ino.cpp -o nul
Alternativen für Wire.h: [Wire@3.3.7]
ResolveLibrary(Wire.h)
  -> Kandidaten: [Wire@3.3.7]
C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp-x32\2511/bin/xtensa-esp32-elf-g++ -c @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/cpp_flags -w -Os -Werror=return-type -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD="ESP32_DEV" -DARDUINO_VARIANT="esp32" -DARDUINO_PARTITION_default -DARDUINO_HOST_OS="windows" -DARDUINO_FQBN="esp32:esp32:esp32:UploadSpeed=921600,CPUFreq=240,FlashFreq=80,FlashMode=qio,FlashSize=4M,PartitionScheme=default,DebugLevel=none,PSRAM=disabled,LoopCore=1,EventsCore=1,EraseFlash=none,JTAGAdapter=default,ZigbeeMode=default" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DARDUINO_USB_CDC_ON_BOOT=0 @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/defines -IC:\Users\fkoeh\Documents\Arduino\Meine Programme\Nextion\Test_Minimal_Konfig_Mega -iprefix C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/include/ @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/includes -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/qio_qspi/include -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\cores\esp32 -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\variants\esp32 -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\libraries\Wire\src @C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53/build_opt.h @C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53/file_opts C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53\sketch\Test_Minimal_Konfig_Mega.ino.cpp -o nul
C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp-x32\2511/bin/xtensa-esp32-elf-g++ -c @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/cpp_flags -w -Os -Werror=return-type -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD="ESP32_DEV" -DARDUINO_VARIANT="esp32" -DARDUINO_PARTITION_default -DARDUINO_HOST_OS="windows" -DARDUINO_FQBN="esp32:esp32:esp32:UploadSpeed=921600,CPUFreq=240,FlashFreq=80,FlashMode=qio,FlashSize=4M,PartitionScheme=default,DebugLevel=none,PSRAM=disabled,LoopCore=1,EventsCore=1,EraseFlash=none,JTAGAdapter=default,ZigbeeMode=default" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DARDUINO_USB_CDC_ON_BOOT=0 @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/defines -IC:\Users\fkoeh\Documents\Arduino\Meine Programme\Nextion\Test_Minimal_Konfig_Mega -iprefix C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/include/ @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/includes -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/qio_qspi/include -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\cores\esp32 -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\variants\esp32 -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\libraries\Wire\src @C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53/build_opt.h @C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53/file_opts C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\libraries\Wire\src\Wire.cpp -o nul
Funktionsprototypen werden generiert ...
C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp-x32\2511/bin/xtensa-esp32-elf-g++ -c @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/cpp_flags -w -Os -Werror=return-type -w -x c++ -E -CC -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 -DARDUINO_BOARD="ESP32_DEV" -DARDUINO_VARIANT="esp32" -DARDUINO_PARTITION_default -DARDUINO_HOST_OS="windows" -DARDUINO_FQBN="esp32:esp32:esp32:UploadSpeed=921600,CPUFreq=240,FlashFreq=80,FlashMode=qio,FlashSize=4M,PartitionScheme=default,DebugLevel=none,PSRAM=disabled,LoopCore=1,EventsCore=1,EraseFlash=none,JTAGAdapter=default,ZigbeeMode=default" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DARDUINO_USB_CDC_ON_BOOT=0 @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/defines -IC:\Users\fkoeh\Documents\Arduino\Meine Programme\Nextion\Test_Minimal_Konfig_Mega -iprefix C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/include/ @C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/flags/includes -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\tools\esp32-libs\3.3.7/qio_qspi/include -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\cores\esp32 -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\variants\esp32 -IC:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\libraries\Wire\src @C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53/build_opt.h @C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53/file_opts C:\Users\fkoeh\AppData\Local\arduino\sketches\56164712BA62FC5C993EE01ECCADFE53\sketch\Test_Minimal_Konfig_Mega.ino.cpp -o C:\Users\fkoeh\AppData\Local\Temp\2824191940\sketch_merged.cpp
C:\Users\fkoeh\AppData\Local\Arduino15\packages\builtin\tools\ctags\5.8-arduino11/ctags -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives C:\Users\fkoeh\AppData\Local\Temp\2824191940\sketch_merged.cpp

Sketch wird kompiliert ...
"C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp-x32\\2511/bin/xtensa-esp32-elf-g++" -MMD -c "@C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-libs\\3.3.7/flags/cpp_flags" -Wall -Wextra -Os -Werror=return-type -DF_CPU=240000000L -DARDUINO=10607 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"ESP32_DEV\"" "-DARDUINO_VARIANT=\"esp32\"" -DARDUINO_PARTITION_default "-DARDUINO_HOST_OS=\"windows\"" "-DARDUINO_FQBN=\"esp32:esp32:esp32:UploadSpeed=921600,CPUFreq=240,FlashFreq=80,FlashMode=qio,FlashSize=4M,PartitionScheme=default,DebugLevel=none,PSRAM=disabled,LoopCore=1,EventsCore=1,EraseFlash=none,JTAGAdapter=default,ZigbeeMode=default\"" -DESP32=ESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DARDUINO_USB_CDC_ON_BOOT=0 "@C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-libs\\3.3.7/flags/defines" "-IC:\\Users\\fkoeh\\Documents\\Arduino\\Meine Programme\\Nextion\\Test_Minimal_Konfig_Mega" -iprefix "C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-libs\\3.3.7/include/" "@C:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-libs\\3.3.7/flags/includes" "-IC:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-libs\\3.3.7/qio_qspi/include" "-IC:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.7\\cores\\esp32" "-IC:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.7\\variants\\esp32" "-IC:\\Users\\fkoeh\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.3.7\\libraries\\Wire\\src" "@C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53/build_opt.h" "@C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53/file_opts" "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\sketch\\Test_Minimal_Konfig_Mega.ino.cpp" -o "C:\\Users\\fkoeh\\AppData\\Local\\arduino\\sketches\\56164712BA62FC5C993EE01ECCADFE53\\sketch\\Test_Minimal_Konfig_Mega.ino.cpp.o"
C:\Users\fkoeh\Documents\Arduino\Meine Programme\Nextion\Test_Minimal_Konfig_Mega\Test_Minimal_Konfig_Mega.ino: In function 'void setup()':
C:\Users\fkoeh\Documents\Arduino\Meine Programme\Nextion\Test_Minimal_Konfig_Mega\Test_Minimal_Konfig_Mega.ino:26:37: error: 'RX_nxt_16' was not declared in this scope
   26 |   nxtSerial.begin(9600, SERIAL_8N1, RX_nxt_16, TX_nxt_17);
      |                                     ^~~~~~~~~
C:\Users\fkoeh\Documents\Arduino\Meine Programme\Nextion\Test_Minimal_Konfig_Mega\Test_Minimal_Konfig_Mega.ino:26:48: error: 'TX_nxt_17' was not declared in this scope
   26 |   nxtSerial.begin(9600, SERIAL_8N1, RX_nxt_16, TX_nxt_17);
      |                                                ^~~~~~~~~
Bibliothek Wire in Version 3.3.7 im Ordner: C:\Users\fkoeh\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.3.7\libraries\Wire  wird verwendet
exit status 1

Compilation error: 'RX_nxt_16' was not declared in this scope

Wenn ich das so schreibe:

 Serial.begin(115200);
  HardwareSerial nxtSerial(2);
  nxtSerial.begin(9600, SERIAL_8N1, RX_nxt_16, TX_nxt_17);

Du musst natürlich zuvor auch deine Pins richtig definieren und nicht nur leere Variablen einsetzen. Der Fehler steht doch in der Fehlermeldung.

Ja OK. Habe es jetzt so gemacht:


```cpp
#include <Wire.h>
byte RX_nxt_Pin = 16;
byte TX_nxt_Pin = 17;
byte NexT[3] = { 255, 255, 255 };  // global deklarieren
const byte bufferSize = 64;
/*
Wird dann so benutzt:
Serial2.write(NexT, 3);
*/
byte Seite = 0;  // Nextion Startseite einstellen
int Messung = 35;
int ads_mv0 = 30;
String Text31 = "Ein Test";
unsigned long Sekundenablauf01 = 0;
const unsigned long Pausezeit01 = 5000;
unsigned long startzeit = 0;
unsigned long endzeit = 0;
//######################################################################################
//#################################### SETUP ###########################################
//######################################################################################
//
void setup() {
  Serial.begin(115200);
  //HardwareSerial Serial(2);
  //Serial2.begin(9600, SERIAL_8N1, 16, 17);
  HardwareSerial nxtSerial(2);
  nxtSerial.begin(9600, SERIAL_8N1, RX_nxt_Pin, TX_nxt_Pin);
  //Serial2.begin(9600);
  //
  Serial2.print("Volt1.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  Serial2.print(Messung);
  Serial2.write(NexT, 3);
  Serial2.print("Volt2.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.print(ads_mv0);
  Serial2.write(NexT, 3);
}
//######################################################################################
//#################################### LOOP ############################################
//######################################################################################
//
void loop() {
  startzeit = millis();
  kommunikation();
  NextionRueck();
  endzeit = millis();
  //Serial.println(endzeit - startzeit);
}
//######################################################################################
//########################## Kommunikation mit dem Nextion #############################
//######################################################################################
//
void kommunikation() {
  Serial2.print("page 3");
  Serial2.write(NexT, 3);
  Serial2.print("Daten_suchen.Textfeld1.txt=\"Ein_Test\"");
  Serial2.write(NexT, 3);
  delay(3000);
  Serial2.print("Daten_suchen.Textfeld1.txt=\"Ein_ weiterer_Test\"");
  Serial2.write(NexT, 3);
  delay(3000);
  Serial2.print("page 0");
  Serial2.write(NexT, 3);
  Serial2.print("Volt3.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  Serial2.print(Messung);
  Serial2.write(NexT, 3);
  Serial2.print("Volt4.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.print(ads_mv0);
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=37");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=32");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt3.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
  delay(1000);
  Serial2.print("Volt4.val=39");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  Serial2.write(NexT, 3);
}
//######################################################################################
//########################### Rückmeldung vom Nextion auswerten ########################
//######################################################################################
//
void NextionRueck() {
  static uint8_t bIndex;
  static uint8_t buffer[bufferSize];
  bool allesDa = false;
  if (Serial2.available()) {
    uint8_t inChar = Serial2.read();
    buffer[bIndex++] = inChar;
    if (inChar == 0xFF && (bIndex >= (*buffer == 0x71 ? 8 : 3)) && buffer[bIndex - 2] == 0xFF && buffer[bIndex - 3] == 0xFF) {
      allesDa = true;
    } else {
      allesDa = (bIndex == bufferSize);
    }
  }
  if (allesDa) {
    if (*buffer != 0x65) {
      Serial.println(F("No TouchEvent"));
    } else {
      Serial.print(F("TouchEvent: page "));
      Serial.print(buffer[1]);
      Serial.print(F(", id "));
      Serial.print(buffer[2]);
      Serial.print(F(", event "));
      Serial.println(buffer[3] ? F("PRESS") : F("RELEASE"));
    }
    bIndex = 0;
  }
}
```

Da funktioniert aber wiedr gar nichts. Kommuniziert nicht und bringt keinen Fehler.

Aber das ist doch jetzt das selbe, als wenn ich schreiben:

HardwareSerial nxtSerial(2);
  nxtSerial.begin(9600, SERIAL_8N1, 16, 17);

Das ist richtig. Aber es kommt keine Fehlermeldung mehr.
Nur warum er nicht kommuniziert, musst du mal untersuchen.
Evtl. Kabel defekt oder vertauscht, oder....oder.

Das Signal ist mit dem Oszi am TX und am RX High, was vom Nextion kommt. Wenn ich an den TX/RX Klemmen des ESP32 bin, habe ich das selbe Signal. Also Kaben gut, Getauscht habe ich auch nochmal, Aber es ist im Normalzustand gekreuzt.

Ich habe auch mit dem Oszi zum Vergleich das Signal der Serial 0 angschaut, da sieht man richtig schön die Signale, wenn der ESP beim Reset was zum PC schickt, aber zwischen Nextion und ESP ist Schweigen im Walde. :roll_eyes:

Ok...du musst natürlich auch den Rest des Sketches an die Bezeichnung "nxtSerial" anpassen.
Da passt "Serial2" nicht mehr.

OK. Habe ich geändert. Klar, das muss natürlich passen.

Aber es ist jetzt wieder das selbe wie bei “Serial2”, oder auch “Serial1”. Einfach tot und keine Fehlermeldung.

Mir reichts für heute. Das ist total unverständlich. Ich möchte kommende Woche mal bei “joy-it” eine Anfrage starten.

Sicher nicht, denn zuvor war die Definition der Schnittstelle total falsch.
Nur ein Fehler muss da noch sein.

Nachtrag:
Was ich noch vermute, deine GPIOs (16 + 17) sind evtl. defekt, da du die zuvor mit einem Levelshifter betrieben hast, der evtl. nicht richtig gearbeitet hat.

Weise der UART 2 doch einfach andere GPIOs zu, oder verwende die UART 1. Auch da kannst du andere GPIO zuweisen.

Habe mir so einige Beispiele mit ESP32 + Nextion angeschaut versuche mall das unten


#include <Wire.h>
byte RX_nxt_Pin = 16;
byte TX_nxt_Pin = 17;

const byte bufferSize = 64;
#include <HardwareSerial.h>
HardwareSerial nxtSerial(2);

byte Seite = 0;  // Nextion Startseite einstellen
int Messung = 35;
int ads_mv0 = 30;
String Text31 = "Ein Test";
unsigned long Sekundenablauf01 = 0;
const unsigned long Pausezeit01 = 5000;
unsigned long startzeit = 0;
unsigned long endzeit = 0;
//######################################################################################

void setup() {
  Serial.begin(115200);
  nxtSerial.begin(9600, SERIAL_8N1, RX_nxt_Pin, TX_nxt_Pin);
  
  nxtSerial.print("Volt1.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  nxtSerial.print(Messung);
  endNextionCommand();
  nxtSerial.print("Volt2.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  nxtSerial.print(ads_mv0);
  endNextionCommand();
}
//#################################### LOOP ############################################

void loop() {
  startzeit = millis();
  kommunikation();
  NextionRueck();
  endzeit = millis();
  //Serial.println(endzeit - startzeit);
}

//######################################################################################
void endNextionCommand()
{
  nxtSerial.write(0xff);
  nxtSerial.write(0xff);
  nxtSerial.write(0xff);
}
//########################## Kommunikation mit dem Nextion #############################

void kommunikation() {
  nxtSerial.print("page 3");
  endNextionCommand();
  nxtSerial.print("Daten_suchen.Textfeld1.txt=\"Ein_Test\"");
  endNextionCommand();

  delay(3000);
  nxtSerial.print("Daten_suchen.Textfeld1.txt=\"Ein_ weiterer_Test\"");
  endNextionCommand();
  delay(3000);
  nxtSerial.print("page 0");
  endNextionCommand();
  nxtSerial.print("Volt3.val=");  // Messung in Anzeigefeld "Volt1" ausgeben.
  nxtSerial.print(Messung);
  endNextionCommand();
  nxtSerial.print("Volt4.val=");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  nxtSerial.print(ads_mv0);
  endNextionCommand();
  delay(1000);
  nxtSerial.print("Volt4.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  endNextionCommand();
  delay(1000);
  nxtSerial.print("Volt4.val=37");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  endNextionCommand();
  delay(1000);
  nxtSerial.print("Volt4.val=32");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  endNextionCommand();
  delay(1000);
  nxtSerial.print("Volt3.val=34");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  endNextionCommand();
  delay(1000);
  nxtSerial.print("Volt4.val=39");  // ads_mv0 in Anzeigefeld "Volt2" ausgeben.
  endNextionCommand();
}
//######################################################################################
//########################### Rückmeldung vom Nextion auswerten ########################
//######################################################################################
//
void NextionRueck() {
  static uint8_t bIndex;
  static uint8_t buffer[bufferSize];
  bool allesDa = false;
  if (nxtSerial.available()) {
    uint8_t inChar = nxtSerial.read();
    buffer[bIndex++] = inChar;
    if (inChar == 0xFF && (bIndex >= (*buffer == 0x71 ? 8 : 3)) && buffer[bIndex - 2] == 0xFF && buffer[bIndex - 3] == 0xFF) {
      allesDa = true;
    } else {
      allesDa = (bIndex == bufferSize);
    }
  }
  if (allesDa) {
    if (*buffer != 0x65) {
      Serial.println(F("No TouchEvent"));
    } else {
      Serial.print(F("TouchEvent: page "));
      Serial.print(buffer[1]);
      Serial.print(F(", id "));
      Serial.print(buffer[2]);
      Serial.print(F(", event "));
      Serial.println(buffer[3] ? F("PRESS") : F("RELEASE"));
    }
    bIndex = 0;
  }
}

Danke. :+1:

Ja, das war das Zauberwort. Ich habe auch viele Programme mit zweiter Schnittstelle am ESP32 angeschaut. Da war immer

HardwareSerial nxtSerial(2);

in allen Variationen, aber nie eine Lib aufgerufen. Ich dachte dann, das ist ja auch keine SoftSerial, sondern eine vorhandene Hardware und habe es mir eben damit erklärt. Scheiße wars, der Mond schien helle. :roll_eyes: Man braucht für eine Hardwaremässig vorhandene Serial2 eine Lib.

Mich hat gewundert das die Verbindung zwischen ESP und Display bei Allen funktioniert nur nicht hier.

Ja, da sind offenbar viele Beispiele im Netz unterwegs, die gar nicht funktionieren können. Weil sie HardwareSerial ohne die Lib aufrufen.

Wenn ich helfen konnte ist super, persönlich bleibe bei HMI Displays wo ich selber die GUI baue, geht schneller als mit Zusatzsoftware wo man die erstmals erlernen muss.