ESP32 lector Serie con MAX3232

Buenas tardes,

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.

Muchas gracias de antemano!

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.

Acá tienes un ejemplo que es básicamente lo mismo

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.

Saludos!

Pude solucionar el problema con la compra del level shifter, se ve que el problema era por la tension que le estaba llegando al pin

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.