Estoy intentando comunicar una pantalla Nextion y una placa ESP32 DEVKIT 1.
Si utilizo una placa mega, todo funciona perfecto. Al poner la esp32, lo primero que indica es un error de compilacion al dar fallo por incluir el software serial. Eliminando esta parte de las librerias el programa compila perfectamente, pero el problema es que no comunica. Estoy usando, como viene de serie, el serial para la comunicacion con el monitor serial y el serial2 para comunicarme con la pantalla.
No hay forma de que comunique y no recibe datos por el serial2 del esp32.
Hay diferentes videos en internet, donde conectan a los pines 16 y 17, que es serial2 del esp32, y todo les funciona sin problemas, pero son videos antiguos y me temo que algo ha cambiado, ya que ahora no funciona.
Ya no tengo mas ideas de como atacar este problema.
Alguien me puede dar alguna idea?
Aqui el codigo que uso (como digo, en arduino mega va perfecto).
#include "Nextion.h"
void n0PopCallback(void *ptr);
void b0PopCallback(void *ptr);
void b1PopCallback(void *ptr);
NexNumber n0 = NexNumber(0, 3, "n0"); // Declara un objeto de la clase NexNuber llamado n0.
NexButton b0 = NexButton(0, 1, "b0"); // Declara un objeto de la clase NeButton llamado b0.
NexButton b1 = NexButton(0, 2, "b1"); // Declara un objeto de la clase NeButton llamado b1.
char buffer[100] = {0}; // declara array de 100 posiciones.
NexTouch *nex_listen_list[] = { // Lista de escuchas provenientes de la nextion.
&n0,
&b0,
&b1,
NULL
};
void n0PopCallback(void *ptr) { // Funcion de llamada componente number.
dbSerialPrintln("n0PopCallback");
n0.setValue(50);
}
void b0PopCallback(void *ptr) { // Funcion de llamada componente b0.
uint32_t number;
dbSerialPrintln("b0PopCallback");
n0.getValue(&number);
number += 1;
n0.setValue(number);
}
void b1PopCallback(void *ptr) { // Funcion de llamada componente b1.
uint32_t number;
dbSerialPrintln("b1PopCallback");
n0.getValue(&number);
number -= 1;
n0.setValue(number);
}
void setup(void){
// Inicia comunicacion con la pantalla Nextion.
dbSerial.begin(9600);
Serial2.begin(9600);
delay(500);
nexInit();
n0.attachPop(n0PopCallback); // Registra la llamada funcion denerada por el n0.
b0.attachPop(b0PopCallback); // Registra la llamada funcion denerada por el b0.
b1.attachPop(b1PopCallback); // Registra la llamada funcion denerada por el b1.
dbSerialPrintln("setup done"); // Imprime fin del setup.
}
void loop(void)
{
nexLoop(nex_listen_list); // Escucha eventos producidos en la pantalla.
}
Te doy un código simple que usa dos puertos serie, el Serial x defecto y el Serial2
#include <HardwareSerial.h>
HardwareSerial Serial2(2);
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10);
}
Serial.println("ESP32 con dos puertos serie.");
// Configurar Serial2 con los pines RX y TX
Serial2.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17
}
void loop() {
Serial.println("Enviando al Serial2..."); // Envio un mensaje desde el puerto principal
Serial2.println("Hola desde Serial2");
if (Serial2.available()) { // Leer datos recibidos en Serial2 y mostrarlos en Serial
String mensaje = Serial2.readStringUntil('\n');
Serial.println("Mensaje recibido en Serial2: " + mensaje);
}
delay(1000);
}
Gracias, voy aprobar primero el codigo que me envias para verificar.
Lo deinicializar los seriales, pese a que en el arduino mega no es necesario, si lo habia probado sin funcionar.
Como digo, he mirado mucha informacion, pero son videos de hace dos años o mas y todo el mundo conecta a serial2 y les funciona. Pero he probado varios esp32 y a todos le pasa lo mismo.
Ire contando siencuentro alguna soluccion.
C:/Users/Jose/AppData/Local/Arduino15/packages/esp32/tools/esp-x32/2405/bin/../lib/gcc/xtensa-esp-elf/13.2.0/../../../../xtensa-esp-elf/bin/ld.exe: C:\Users\Jose\AppData\Local\Temp\arduino_cache_335718\core\core_596739c8864f8ba1006e1c7875aaed0b.a(HardwareSerial.cpp.o):C:\Users\Jose\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.1.1\cores\esp32/HardwareSerial.cpp:51: multiple definition of `Serial2'; sketch\sketch_jan22d.ino.cpp.o:C:\Users\Jose\Documents\Arduino\sketch_jan22d/sketch_jan22d.ino:3: first defined here
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compilando para la tarjeta ESP32 Dev Module.
Anduve toda la tarde revisando opciones, y sigo sin conseguir nada.
Pondremos mas empeño.
void setup() {
// Inicializar el puerto serie por defecto (USB)
Serial.begin(115200);
while (!Serial) {
delay(10);
}
Serial.println("ESP32 con dos puertos serie.");
// Configurar Serial2 con los pines RX y TX
Serial2.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17
}
void loop() {
// Enviar un mensaje desde el puerto principal
Serial.println("Enviando al Serial2...");
Serial2.println("Hola desde Serial2");
// Leer datos recibidos en Serial2 y mostrarlos en Serial
if (Serial2.available()) {
String mensaje = Serial2.readStringUntil('\n');
Serial.println("Mensaje recibido en Serial2: " + mensaje);
}
delay(1000);
}
Efectivamente, este lo probe y lo implemente funcionando correctamente.
Basandome en este codigo que me proporcionaste, modifique el programa para indicarle a la pantalla nextion que utilizar el serial2 con los parametros que aqui indicabas.
El resultado fue un exito. La pantalla nextion ya conecta correctamente.
Entonces,recapitulando, para los que empezamos a comunicar esp32 con la nextion, tener en cuenta dos detalles :
1.- Para que al compilar no de errores con software serial a de estar instalas la libreria espsoftwareserial.
2.- Ha que declarar el puesto serial2 como se hace en el ejemplo de Surbyte.