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.
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:
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):
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:
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.
¿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.