Recibir sms con sim800l y nodemcu esp8266

estoy usando un sim800l conectado a un nodemcu esp8266.
No logro recibir mensajes ni leerlos en el comunicador serial. Puedo enviar mensajes sin problemas pero necesito que también pueda recibirlos.

Este es el codigo:

#include <SoftwareSerial.h>

// Configurar los pines de SoftwareSerial para el SIM800L
SoftwareSerial mySerial(0, 4); // Conectar el TX del SIM800L a D3 (GPIO0) y el RX del SIM800L a D2 (GPIO4)

String message = "";  // Variable para almacenar el mensaje a enviar

void setup() {
  Serial.begin(9600);         // Comunicación con el monitor serial
  mySerial.begin(9600);       // Comunicación con el SIM800L
  Serial.println("Inicializando...");
  delay(1000);

  // Configuración básica del SIM800L
  sendATCommand("AT", 1000);          // Verificar comunicación con el SIM800L
  sendATCommand("AT+CMGF=1", 1000);   // Configurar el modo de SMS en texto
  sendATCommand("AT+CNMI=1,2,0,0,0", 1000); // Configurar notificación de mensajes entrantes
}

void loop() {
  // Leer datos entrantes del monitor serial para enviar un SMS
  updateSerial();

  // Si hay un mensaje para enviar, enviarlo y limpiar la variable
  if (message.length() > 0) {
    sendSMS(message);
    message = "";  // Limpiar el mensaje después de enviarlo
  }

  // Leer cualquier mensaje entrante desde el SIM800L
  receiveSMS();
}

// Función para leer el contenido del monitor serial
void updateSerial() {
  while (Serial.available()) {
    char receivedChar = Serial.read();
    
    // Si el usuario presiona "Enter", el mensaje está listo para enviarse
    if (receivedChar == '\n') {
      return;  // Salir de la función para que el loop() pueda enviar el mensaje
    } else {
      message += receivedChar;  // Agregar el carácter al mensaje
    }
  }
}

// Función para enviar un SMS con el contenido almacenado en la variable `message`
void sendSMS(String text) {
  // Cambiar el número de teléfono por el destino deseado
  sendATCommand("AT+CMGS=\"+543844400476\"", 1000);  // Reemplazar por el número de destino
  mySerial.print(text);  // Enviar el contenido del mensaje
  mySerial.write(26);    // Enviar Ctrl+Z para indicar el final del mensaje
  delay(5000);           // Esperar unos segundos para asegurar que el mensaje se envíe
  
  Serial.println("Mensaje enviado!");
}

// Función para recibir y mostrar un SMS en el monitor serial
void receiveSMS() {
  if (mySerial.available()) {
    Serial.println("Mensaje recibido:");
    while (mySerial.available()) {
      char c = mySerial.read();
      Serial.print(c);  // Mostrar el contenido del mensaje en el monitor serial
    }
    Serial.println(); // Imprimir una línea en blanco después del mensaje
  }
}

// Función para enviar un comando AT y leer la respuesta
void sendATCommand(String command, int timeout) {
  mySerial.println(command);
  unsigned long startTime = millis();
  while (millis() - startTime < timeout) {
    if (mySerial.available()) {
      char c = mySerial.read();
      Serial.print(c);  // Mostrar la respuesta en el monitor serial
    }
  }
  Serial.println(); // Línea nueva después de cada respuesta
}

Prueba esto a ver si funciona, solo envia AT ENTER y deberias recibir un OK

#include <SoftwareSerial.h>
SoftwareSerial serial2(D5, D6);  // Configura D5 como RX y D6 como TX.
                                                        // chequea estos pines

void setup() {
  Serial.begin(115200);       // UART0: Monitor serie
  serial2.begin(9600);        // UART emulada: SoftwareSerial
}

void loop() {
  if (Serial.available()) {
    serial2.write(Serial.read());  // Enviar datos del monitor serie al segundo puerto serie
  }
  if (serial2.available()) {
    Serial.write(serial2.read());  // Enviar datos del segundo puerto serie al monitor serie
  }
}

Probé el codigo de esa forma y cambiando los pines por los que usaba en mi programa y además por rx y tx del nodemcu pero no hay respuesta (solo garabatos). De todas formas con otros programas si logree leer los comandos AT en su momento.

Garabatos puede ser indicativo de que no estas usando los baudios adecuados. Revisa!!

lo probé a 115200 y 9600 pero es lo mismo

Compartes GND con el SIM800L no?
Ten en cuenta que TX del SIM debe ir al pin RX del ESP y vice verza.

Si si todas esas cuestiones las tuve en cuenta

Y a 38400?

Es como te decimos prueba 4800, 9600, 19200, 38400, 56000 y bueno es extremo pero 115200.
Todas deben probarse.

lamentablemente no pude obtener respuesta con ninguna

Bueno entonces muestra el esquema electrónico que estas usando. Como conectas el SIM800L y además y muy importante, como lo alimentas. Con qué fuente? Si la fuente no entrega 2 o 3A, tendrás problemas, es una placa muy demandante.
Finalmente, solo para SMS pero olvida usar estas placas para proyectos de mediano plazo, estan al borde de quedar obsoletas.

al final el error estaba en el step down, se quemó. Al cambiar por otro todo funciona correctamente.