Estoy queriendo usar una placa ESP32 como lector serie de una balanza, usando el puerto UART2 con los pines 16 y 17 como RX y TX.
El codigo que estoy utilizando es el siguiente:
#include <HardwareSerial.h>
// Pines de RX y TX en el ESP32
const byte txPin = 17; // TX2
const byte rxPin = 16; // RX2
void setup() {
Serial.begin(1200);
// Configuración de los pines para Serial2
Serial2.begin(1200, SERIAL_8N1, rxPin, txPin);
while (!Serial2) {
Serial.println("Esperando inicialización del lector");
delay(1000);
}
Serial.println("Lector inicializado");
}
void loop() {
Serial.println("Esperando a la balanza:");
for (int loops = 0; loops < 120; ++loops) {
if (Serial2.available()) {
Serial.println("Datos recibidos desde la balanza");
break;
}
delay(1000);
}
char result[100] = "-1, -1";
if (Serial2.available()) {
Serial.println("Leyendo...");
int i = 0;
while (Serial2.available()) {
result[i++] = Serial2.read();
Serial.print((char)result[i - 1]);
}
result[i] = '\n';
} else {
Serial.println("Tiempo de espera agotado");
}
Serial.println(result);
}
El código fue realizado en base al siguiente tutorial para una placa ESP8266:
El codigo funciona utilizando SoftwareSerial y una placa ESP8266 pero al querer utilizar una placa ESP32 y HardwareSerial no logro que llegue ningun dato. El programa compila y no arroja errores, simplemente toco el boton de print de la balanza y no hace nada.
Ya probe cambiar Tx y Rx, tengo mis dudas con la tension que utiliza la comunicación RS232 de la balanza ya que no especifica el valor en el manual, segun tengo entendido los pines de la placa ESP32 trabajan hasta 3,3V mientras que el ESP8266 admite 5V asi que se me ocurrió que el error puede venir por ahi.
NO. Los pines del ESP8266 son de 3.3V tmb. Nada de 5V en ninguno de los dos.
Solo tienen entrada de 5V que con el regulador pasa a 3.3V y listo ahi se acabó. Ni siquiera son 5V tolerantes en ninguno de los dos casos ni ningún Expressif hasta la fecha.
Dices que el ESP8266 funciona bien con ese hardware y en la misma condición el ESP32 no. O mejor dicho con el ESP8266 usaste SoftwareSerial y anduvo pero no te funciona con el ESP32.
Lo primero es que no se porque usas 1200 para el puerto ESP32, puedes usar cualquier velocidad y claro, 1200 tmb pero no tiene porque ser la misma que la que debes comunicarte con la impresora.
En el ejemplo la comunicación es a 9600 bps, estas seguro que estas usando la velocidad adecuada?
Solo para probar, quita esto
while (!Serial2) {
Serial.println("Esperando inicialización del lector");
delay(1000);
}
Verifica los bps de la impresora, y de tu monitor serie.
Muchas gracias por la información, me imagine que podía llegar a necesitar un level shifter por lo que ya compre uno y viene en camino, voy a hacer las pruebas y actualizare en el foro.