Ir al contenido

Envío de mensajes SMS o Telegram con un ESP32 PLC 14 con 4G integrado

Guía paso a paso para enviar mensajes SMS y notificaciones de Telegram desde un ESP32 PLC 14 con 4G integrado usando la librería NB y Call Me Bot
18 de junio de 2026 por
Envío de mensajes SMS o Telegram con un ESP32 PLC 14 con 4G integrado
Boot & Work Corp. S.L, Joan Bello

Introducción

La integración de la comunicación 4G en PLCs basados en ESP32 abre un sinfín de posibilidades para el IoT y la automatización industrial. En una entrada anterior del blog,​ "Cómo utilizar 4G con un ESP32 PLC", explicamos la configuración inicial para habilitar 4G en el ESP32 PLC. Esto incluye preparar la tarjeta SIM, configurar el APN e inicializar la librería NB (Narrowband IoT). Si eres nuevo en este proceso, te recomendamos comenzar con esa publicación antes de adentrarte en esta guía.

En este artículo, nos centraremos en aplicaciones prácticas: el envío de mensajes SMS y notificaciones de Telegram directamente desde el ESP32 PLC. El ejemplo de SMS que aquí se muestra está disponible en la librería de Industrial Shields, en Archivo -> Ejemplos -> Ejemplos para la familia de PLCs 14 IOs -> NB -> SendSMS.

Envío de mensajes SMS con un ESP32 PLC 14

La capacidad de enviar mensajes SMS es muy valiosa en la automatización industrial, ya sea para alarmas, notificaciones o comandos remotos. El siguiente ejemplo muestra cómo enviar mensajes SMS desde el ESP32 PLC 14 utilizando la librería NB.

Ejemplo de código: Envío de SMS

Este ejemplo se incluye en la librería de Industrial Shields en: Archivo -> Ejemplos -> Ejemplos para la familia de PLCs 14 IOs -> NB -> SendSMS. A continuación se muestra el código completo:

arduino_secrets.h (dependencia):

#define SECRET_PINNUMBER     ""
#define SECRET_APN           ""
#define SECRET_USERNAME      ""
#define SECRET_PASSWORD      ""

Código de ejemplo para enviar SMS:

// Include the NB library
#include <NB.h>

// Uncomment to automatically configure the module baud rate
#define MAKE_AUTOBAUD 

#include "arduino_secrets.h" 

// PIN and APN details
const char PINNUMBER[] = SECRET_PINNUMBER;
const char APN[] = SECRET_APN;
const char USERNAME[] = SECRET_USERNAME;
const char PASSWORD[] = SECRET_PASSWORD;

// Initialize the library instance
NB nbAccess(true);
NB_SMS sms;

void setup() {
  Serial.begin(115200);
  while (!Serial);

  Serial.println("SMS Messages Sender");

  // Connection state
  bool connected = false;

  // Configure autobaud
#ifdef MAKE_AUTOBAUD
  if (nbAccess.autobaud()) {
    Serial.println("Autobaud completed successfully");
    nbAccess.shutdown();
  } else {
    Serial.println("Autobaud failed.");
    while (1);
  }
#endif

  // Connect to the network
  while (!connected) {
    if (nbAccess.begin(PINNUMBER, APN, USERNAME, PASSWORD) == NB_READY) {
      connected = true;
    } else {
      Serial.println("Not connected, retrying...");
      delay(1000);
    }
  }

  Serial.println("NB initialized");
}

void loop() {
  Serial.print("Enter a mobile number: ");
  char remoteNum[20];
  readSerial(remoteNum);

  Serial.print("Now, enter SMS content: ");
  char txtMsg[200];
  readSerial(txtMsg);

  sms.beginSMS(remoteNum);
  sms.print(txtMsg);
  sms.endSMS();
  Serial.println("Message sent!");
}

int readSerial(char result[]) {
  int i = 0;
  while (true) {
    while (Serial.available() > 0) {
      char inChar = Serial.read();
      if (inChar == '\n') {
        result[i] = '\0';
        return 0;
      }
      if (inChar != '\r') {
        result[i] = inChar;
        i++;
      }
    }
  }
}

Con este código, puedes enviar fácilmente mensajes SMS introduciendo el número de teléfono del destinatario y el mensaje deseado a través del Monitor Serial.

Puedes descargar el ejemplo aquí:

SendSMS

Envío de mensajes de Telegram con Call Me Bot

Aunque la librería no incluye actualmente un ejemplo para enviar mensajes de Telegram, puedes implementar esta funcionalidad utilizando el servicio Call Me Bot. Call Me Bot te permite enviar mensajes de Telegram sin lidiar con la complejidad de la API de Telegram. Antes de usar este ejemplo, debes otorgar permisos al bot a través de esta página de autenticación.

Ejemplo de código: Envío de mensajes de Telegram

A continuación se muestra el código para enviar mensajes de Telegram utilizando el servicio Call Me Bot:

arduino_secrets.h (dependencia):

#define SECRET_PINNUMBER     ""
#define SECRET_APN           ""
#define SECRET_USERNAME      ""
#define SECRET_PASSWORD      ""

#define SECRET_USER          ""

Código de ejemplo para enviar mensajes de Telegram:

// Include the NB library
#include <NB.h>

// Uncomment to automatically configure the module baud rate
#define MAKE_AUTOBAUD 

#include "arduino_secrets.h"

// PIN and APN details
const char PINNUMBER[] = SECRET_PINNUMBER;
const char APN[] = SECRET_APN;
const char USERNAME[] = SECRET_USERNAME;
const char PASSWORD[] = SECRET_PASSWORD;

// Telegram USER (without '@')
const char USER[] = SECRET_USER;

// Initialize library instances
NBClient client;
GPRS gprs;
NB nbAccess(true);

// Server details
char server[] = "api.callmebot.com";
int port = 80;

void setup() {
  Serial.begin(115200);
  while (!Serial);

  Serial.println("Call Me Bot Messages Sender");

  // Connection state
  bool connected = false;

#ifdef MAKE_AUTOBAUD
  if (nbAccess.autobaud()) {
    Serial.println("Autobaud completed successfully");
    nbAccess.shutdown();
  } else {
    Serial.println("Autobaud could not configure the module correctly. Trying again...");
    if (nbAccess.autobaud()) {
      Serial.println("Autobaud completed successfully");
      nbAccess.shutdown();
    } else {
      Serial.println("Autobaud could not configure the module correctly. Blocking...");
      while(1);
    }
  }
#endif

  // Start NB module and attach GPRS
  while (!connected) {
    if ((nbAccess.begin(PINNUMBER, APN, USERNAME, PASSWORD) == NB_READY) && (gprs.attachGPRS() == GPRS_READY)) {
      connected = true;
    } else {
      Serial.println("Not connected, retrying...");
      delay(1000);
    }
  }

  Serial.println("NB and GPRS initialized");
}

void loop() {
  // Prompt user for a message
  Serial.print("Enter the message to send: ");
  char txtMsg[200];
  readSerial(txtMsg);

  // Encode the message for URL (replace spaces with '%20')
  String msgPayload = txtMsg;
  msgPayload.replace(" ", "%20");

  // Construct the GET request path
  char path[500];
  sprintf(path, "/text.php?source=web&user=@%s&text=%s", USER, msgPayload.c_str());

  Serial.println("Connecting to Call Me Bot...");

  if (client.connect(server, port)) {
    Serial.println("Connected to Call Me Bot server");

    // Make an HTTP GET request
    client.print("GET ");
    client.print(path);
    client.println(" HTTP/1.1");
    client.print("Host: ");
    client.println(server);
    client.println("Connection: close");
    client.println();
  } else {
    Serial.println("Connection failed");
    return;
  }

  // Wait for the server to respond, read response
  while (client.connected()) {
    while (client.available()) {
      char c = client.read();
      Serial.print(c);
    }
  }

  Serial.println();
  Serial.println("Disconnecting from server.");
  client.stop();
}

int readSerial(char result[]) {
  int i = 0;
  while (1) {
    while (Serial.available() > 0) {
      char inChar = (char)Serial.read();
      if (inChar == '\n') {
        result[i] = '\0';
        Serial.flush();
        return 0;
      }
      if (inChar != '\r') {
        result[i] = inChar;
        i++;
      }
    }
  }
}

Con este código, puedes enviar fácilmente mensajes de Telegram introduciendo el mensaje deseado a través del Monitor Serial.

Puedes descargar el ejemplo aquí:

SendTelegram

Conclusión

El ESP32 PLC 14 con conectividad 4G demuestra ser una herramienta potente para el IoT y la automatización industrial. Utilizando la librería integrada, el envío de mensajes SMS es sencillo gracias al ejemplo proporcionado (SendSMS). Además, con una ligera personalización, es posible enviar notificaciones a Telegram a través del servicio Call Me Bot.

Para aquellos que deseen profundizar más en la configuración inicial del 4G, recomendamos revisar nuestra guía anterior: "Cómo utilizar 4G con un ESP32 PLC".

Buscar en nuestro blog

Envío de mensajes SMS o Telegram con un ESP32 PLC 14 con 4G integrado
Boot & Work Corp. S.L, Joan Bello 18 de junio de 2026
Compartir esta publicación
Etiquetas

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.

Comparativa de PLCs