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
}