Menu

Expand
Calificar esta página:

Enviar mensajes SMS y MMS desde el ESP8266 en C++

En este artículo, persuadiremos a un ESP8266 para que envíe mensajes MMS y SMS mediante el uso de C++ y el IDE de Arduino. Necesitarás un ESP-8266 configurado para el IDE de Arduino, una conexión en serie (muy probablemente con un adaptador o módulo de puerto serie a USB integrado) y una red inalámbrica WEP o WPA (1 o 2) abierta.

Sigue leyendo, fusionaremos el Internet de las cosas con la API de Twilio.

Inicia sesión en tu cuenta de Twilio o regístrate para obtener una

Crea una cuenta de Twilio nueva (regístrate para obtener una prueba gratuita de Twilio aquí) o inicia sesión en tu cuenta de Twilio.

Buscar o adquirir un número compatible con SMS (y MMS)

Para esta demostración, deberás utilizar un número compatible con SMS y MMS de tu propiedad o adquirir uno nuevo con las funcionalidades necesarias.

En primer lugar, ingresa a la consola de Twilio. En segundo lugar, selecciona la sección de números de teléfono/numeral (“#”) en el lado izquierdo y dirígete hasta los números activos actuales.

En Capabilities (Funcionalidades), verás las funciones que podrás utilizar con los números de teléfono de Twilio. Para este artículo, necesitarás números con funcionalidades de SMS, o de SMS y MMS.

Si actualmente no tienes un número compatible con SMS o MMS, deberás comprar uno. Después de dirigirte al enlace Buy a Number (Comprar un número), haz clic en la casilla de verificación SMS y, de manera opcional, MMS.

Buy a Number.png

Requisitos previos de la guía de MMS y SMS de ESP8266 en C++

El ESP8266 de Espressif, que a veces se encuentra en placas que cuestan tan solo 2 USD, es una base increíble para tu proyecto de IoT. Dado que es compatible con TLS 1.2, nos complace compartir un ejemplo de envío de mensajes con el ESP8266 y la API de Twilio.

El desarrollo de hardware presenta muchas más variables que el desarrollo de software. Haremos todo lo posible para guiarte durante la fase de configuración. Aunque lamentablemente no podemos probar todas las configuraciones, deja un comentario si tienes problemas. Nosotros, y quizás otros lectores, haremos todo lo posible para ayudarte a superar cualquier obstáculo.

Selección de la placa

Si bien sería imposible enumerar todas las variaciones de la placa ESP8266 que funcionarían con esta guía, el repositorio de Arduino sobre ESP8266 tiene una excelente lista de placas probadas. Te recomendamos seleccionar una de ellas si aún no has elegido una placa de desarrollo. Las variantes de ESP-8266 12-E como esta funcionan bien.

Cuando desarrollamos esto por primera vez, utilizamos una placa Sparkfun Thing y la placa Basic FTDI Breakout de Sparkfun para la programación. La Thing sobrecarga el PIN DTR y no funciona cuando se programa y se conecta al monitor serial. En la mayoría de las placas, no es necesario tocar los #define en el código.

Pero si lo haces: puedes activar o desactivar el software serial al cambiar #define USE_SOFTWARE_SERIAL en Twilio_ESP8266_Example.ino.

IDE de Arduino

El uso del IDE de Arduino con el ESP8266 ayuda a eliminar algunas de las variables inherentes a este tipo de proyectos. La conexión de Arduino al ESP-8266 incluye la cadena de herramientas Xtensa gcc, ofrece acceso a las bibliotecas de Arduino y facilita la programación del ESP-8266.

Si decides reescribir el código para renunciar al supuesto entorno de Arduino (quizás para el SDK de Espressif), los pasos más importantes serán eliminar las dependencias de las cadenas de Arduino y asegurarte de conectarte a api.twilio.com:443 mediante TLS 1.2. Esto está fuera del alcance de esta guía, pero podrías compartir en los comentarios si logras tener éxito.

Desarrollo del ejemplo de MMS y SMS del ESP8266

(Ten en cuenta que este proyecto se amplió en la guía sobre cómo recibir y responder mensajes desde el ESP8266, que puedes consultar aquí)

Después de clonar este proyecto desde el repositorio de GitHub, deberás recopilar algunas credenciales antes de enviar el primer mensaje. En la parte superior de Twilio_ESP8266_Example.ino, establecimos una serie de globales para la conexión a la red Wi‐Fi, la verificación de la firma SHA1 de api.twilio.com (estaremos atentos a la verificación de CA en el ESP8266) y el envío de mensajes con tu cuenta de Twilio.

Ten en cuenta que la incorporación de las credenciales a un dispositivo de hardware solo es admisible para crear prototipos y cuando conserves la posesión física de tu dispositivo. Si el dispositivo va a estar en el campo, debes utilizar claves revocables u otro tipo de autenticación reversible.

Esta es la sección que deberás editar:

Loading Code Sample...
        
        
        Carga de las credenciales de Twilio y Wi‑Fi desde la consola de Twilio y la red en el ESP8266

        Configuración de las credenciales en el ESP8266

        Carga de las credenciales de Twilio y Wi‑Fi desde la consola de Twilio y la red en el ESP8266

        Después de eso, crear el ejemplo debería ser tan simple como presionar el botón Upload (Cargar) en el IDE de Arduino.

        Si todo sale bien, deberías recibir un mensaje de texto con el contenido de la variable message_body. Si todo sale mal, incluimos un código de ejemplo para realizar la depuración con SoftwareSerial. Según la placa y la configuración, es probable que tengas que cambiarlo o utilizar la biblioteca Serial predeterminada. Estos son los primeros pasos de una sesión de depuración (exitosa) de ejemplo con SoftwareSerial:

        Connected to WiFi, IP address: 
        192.168.1.155
        Connecting to host api.twilio.com
        Certificate fingerprints match.
        Sending http POST: 
        POST /2010-04-01/Accounts/ACXXXXXXXXXXXXXXXXXXXXXXXXXX/Messages HTTP/1.1
        Authorization: Basic BASE64ENCODEDSTRINGHERE
        Host: api.twilio.com
        Cache-control: no-cache
        User-Agent: ESP8266 Twilio Example
        Content-Type: application/x-www-form-urlencoded
        Content-Length: 72
        Connection: close
        
        To=+18005551212&From=+18005551212&Body=Hello+from+Twilio+and+the+ESP8266
        

        Si tienes cuidado, la razón más común por la que el mensaje falla es la actualización del certificado. En la siguiente sección, se explica cómo actualizar la huella digital.

        Corrección de fallas en el mensaje

        Cada año api.twilio.com actualiza su certificado, lo que significa que debes actualizar una huella digital nueva. Puedes encontrar la huella digital nueva de varias maneras, pero las dos más rápidas son usar un navegador o usar openssl en la línea de comandos de un sistema *NIX.

        Buscar la huella digital de api.twilio.com en un navegador web

        Para buscar la huella digital desde un navegador web, una computadora o un equipo portátil, visita api.twilio.com. Revisa el certificado para *.twilio.com, y desplázate hasta la huella digital SHA-1.

        Así se ve en Chrome (captura de pantalla de julio del 2020):

        SHA-1 fingerprint for api.twilio.com in Chrome

        Copia los caracteres hexadecimales y agrégalos a la línea const char fingerprint[] = del archivo .ino.

        Buscar la huella digital de api.twilio.com en la línea de comandos

        Como alternativa, si cuentas con openssl en el sistema, puedes obtener la huella digital sin abrir un navegador. Ejecuta la siguiente línea en la línea de comandos:

        openssl s_client -connect api.twilio.com:443 < /dev/null 2>/dev/null | openssl x509 -fingerprint -noout -in /dev/stdin | sed -En "s/SHA1 Fingerprint=//p" | sed "s/:/ /g"

        El resultado que obtendrás será el siguiente:

        BC B0 1A 32 80 5D E6 E4 A2 29 66 2B 08 C8 E0 4C 45 29 3F D0

        Copia los caracteres hexadecimales y agrégalos a la línea const char fingerprint[] = del archivo .ino.

        Envío de un mensaje con el ESP8266

        Dado que utilizaremos la API REST de Twilio de manera directa, este código tiene algunas similitudes superficiales con los ejemplos de SMS en C y C++. Por supuesto, si no hay una biblioteca como libcurl que abstraiga los detalles más precisos, tendremos que escribir un código de nivel inferior. Te habrás dado cuenta de que incluimos un código para la conexión a una red Wi‐Fi y la verificación de la firma SHA1 de api.twilio.com.

        Sin embargo, lo más llamativo es que estamos desarrollando una solicitud HTTP POST de forma manual:

        Loading Code Sample...
              
              
              Manually crafting a HTTP POST on the ESP8266 in order to send a SMS or MMS.

              Sending a SMS or MMS with the ESP8266 in C++

              Manually crafting a HTTP POST on the ESP8266 in order to send a SMS or MMS.

              También debemos realizar una serie de cosas que no son necesarias (o que se abstraen) en el escritorio. Habrás notado que incluimos un código a fin de codificar mediante el sistema Base64 las variables ACCOUNT_SID y AUTH_TOKEN para la autenticación básica de HTTP. Además, hemos incluido las funciones de codificación y decodificación de URL de Steve Nelson para evitar caracteres especiales en el cuerpo del SMS o MMS. Asegúrate de que la aplicación móvil final tenga funciones similares y que tu objeto de IoT funcionará correctamente a la primera.

              Del Internet de las cosas al bolsillo de todos con Twilio

              El ESP8266 es un excelente chip que puede funcionar como el cerebro de tu próximo proyecto de IoT, incluso con poco silicio externo. Si deseas agregar conectividad telefónica a tu próximo proyecto, pero una computadora de placa única *NIX es demasiado pesada, es bueno saber que existen alternativas.

              Independientemente de lo que desees crear después, como una herramienta de monitoreo, un dispositivo portátil imprescindible o un producto de automatización del hogar, agrega interoperabilidad telefónica a bajo costo (y con una seguridad razonable) con el ESP8266 y la API de Twilio.

              Paul Kamp Kevin Segovia Daniel Erazo
              Calificar esta página:

              ¿Necesitas ayuda?

              Todos la necesitamos a veces; la programación es difícil. Obtén ayuda ahora de nuestro equipo de soporte, o recurre a la sabiduría de la multitud visitando Stack Overflow Collective de Twilio o navegando por la etiqueta de Twilio en Stack Overflow.

              Loading Code Sample...
                    
                    
                    

                    Gracias por tus comentarios.

                    Selecciona los motivos de tus comentarios. La información adicional que nos brindas nos ayuda a mejorar nuestra documentación:

                    Enviando tus comentarios…
                    🎉 Gracias por tus comentarios.
                    Se produjo un error. Inténtalo de nuevo.

                    Gracias por tus comentarios.

                    thanks-feedback-gif