Arduino - Realizar una llamada de voz

En este tutorial vamos a aprender a usar Arduino para realizar una llamada VoIP en tiempo real (Voz sobre IP) a tu teléfono. El código está disponible para el Arduino Ethernet Shield. Puedes modificarlo para que funcione con otros shields o placas.

El tutorial proporciona el código de Arduino para dos casos:

Requisito

Si no conoces IFTTT y los conceptos relacionados, te recomendamos encarecidamente que leas los siguientes tutoriales:

Diagrama de Cableado

  • Arduino - Escudo Ethernet: solo necesitamos apilar el escudo sobre el Arduino Uno/Mega
Arduino - Escudo Ethernet

Cómo Funciona

Necesitamos:

  • Instala la aplicación de IFTTT en tu teléfono (disponible para Android e iOS).
  • Crea un Applet de IFTTT en el sitio web de IFTTT, que conecta Webhooks al servicio de llamadas VoIP.

Cuando creamos el applet:

  • Podemos escribir el mensaje de texto, que se convierte en un mensaje de voz que se enviará al teléfono.
  • Podemos incluir datos del Arduino en el mensaje.

Flujo de trabajo

  • Arduino hace una solicitud HTTP a Webhooks de IFTTT.
  • Webhooks dispara el servicio de llamadas VoIP de IFTTT.
  • El servicio de llamadas VoIP de IFTTT convierte el mensaje de texto en mensaje de voz.
  • El servicio de llamadas VoIP de IFTTT realiza una llamada a la aplicación de IFTTT en tu teléfono.
  • Tu teléfono está sonando.
  • Aceptas la llamada.
  • Se reproduce el mensaje de voz.

※ Nota:

  • El mensaje se especifica en el Applet, no en el código de Arduino.
  • Como esto es VoIP, tu teléfono debe estar conectado a Internet.
  • La llamada VoIP es gratuita.
  • El Arduino puede hablar contigo, pero no puedes hablar con el Arduino.

Cómo usar IFTTT con Arduino

  • Instala la aplicación IFTTT en tu teléfono
  • Crea una cuenta de IFTTT e inicia sesión en IFTTT.
  • Crea un Applet de los servicios Webhooks y Llamadas VoIP. Por favor, toma nota del nombre del evento que usamos
  • Después de crear el applet, obtén la clave de Webhooks de IFTTT.
  • Copia el código de Arduino que se muestra a continuación y pégalo en el IDE de Arduino.
  • Reemplaza el nombre del evento y la clave de Webhooks en el código de Arduino
  • Carga el código al Arduino

※ Nota:

  • El nombre del evento es dado por ti. Puedes darle cualquier nombre.
  • La clave de Webhooks es creada por IFTTT. No puedes cambiarla.

Vea el tutorial en video al final de este tutorial.

código de Arduino

Código Arduino IFTTT para Arduino Uno R4 WiFi

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-make-voice-phone-call */ #include <WiFiS3.h> const char ssid[] = "YOUR_WIFI_SSID"; // change your network SSID (name) const char pass[] = "YOUR_WIFI_PASSWORD"; // change your network password (use for WPA, or use as key for WEP) WiFiClient client; int status = WL_IDLE_STATUS; int HTTP_PORT = 80; String HTTP_METHOD = "GET"; char HOST_NAME[] = "maker.ifttt.com"; String PATH_NAME = "/trigger/send-call/with/key/XXXXXXXXXXXXXXXXXXXXX"; // change your Webhooks key String queryString = "?value1=27"; // the supposed temperature value is 27°C void setup() { Serial.begin(9600); // check for the WiFi module: if (WiFi.status() == WL_NO_MODULE) { Serial.println("Communication with WiFi module failed!"); // don't continue while (true) ; } String fv = WiFi.firmwareVersion(); if (fv < WIFI_FIRMWARE_LATEST_VERSION) { Serial.println("Please upgrade the firmware"); } // attempt to connect to WiFi network: while (status != WL_CONNECTED) { Serial.print("Attempting to connect to SSID: "); Serial.println(ssid); // Connect to WPA/WPA2 network. Change this line if using open or WEP network: status = WiFi.begin(ssid, pass); // wait 10 seconds for connection: delay(10000); } // print your board's IP address: Serial.print("IP Address: "); Serial.println(WiFi.localIP()); // connect to web server on port 80: if (client.connect(HOST_NAME, HTTP_PORT)) { // if connected: Serial.println("Connected to server"); // make a HTTP request: // send HTTP header client.println("GET " + PATH_NAME + queryString + " HTTP/1.1"); client.println("Host: " + String(HOST_NAME)); client.println("Connection: close"); client.println(); // end HTTP header while (client.connected()) { if (client.available()) { // read an incoming byte from the server and print it to serial monitor: char c = client.read(); Serial.print(c); } } // the server's disconnected, stop the client: client.stop(); Serial.println(); Serial.println("disconnected"); } else { // if not connected: Serial.println("connection failed"); } } void loop() { }

Código IFTTT de Arduino para Arduino Uno/Mega con Escudo Ethernet

/* * Este código de Arduino fue desarrollado por es.newbiely.com * Este código de Arduino se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/arduino/arduino-make-voice-phone-call */ #include <SPI.h> #include <Ethernet.h> // replace the MAC address below by the MAC address printed on a sticker on the Arduino Shield 2 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; EthernetClient client; int HTTP_PORT = 80; String HTTP_METHOD = "GET"; char HOST_NAME[] = "maker.ifttt.com"; String PATH_NAME = "/trigger/send-call/with/key/XXXXXXXXXXXXXXXXXXXXX"; // change your Webhooks key String queryString = "?value1=27"; // the supposed temperature value is 27°C void setup() { Serial.begin(9600); // initialize the Ethernet shield using DHCP: if (Ethernet.begin(mac) == 0) { Serial.println("Failed to obtaining an IP address using DHCP"); while (true); } // connect to web server on port 80: if (client.connect(HOST_NAME, HTTP_PORT)) { // if connected: Serial.println("Connected to server"); // make a HTTP request: // send HTTP header client.println("GET " + PATH_NAME + queryString + " HTTP/1.1"); client.println("Host: " + String(HOST_NAME)); client.println("Connection: close"); client.println(); // end HTTP header while (client.connected()) { if (client.available()) { // read an incoming byte from the server and print it to serial monitor: char c = client.read(); Serial.print(c); } } // the server's disconnected, stop the client: client.stop(); Serial.println(); Serial.println("disconnected"); } else {// if not connected: Serial.println("connection failed"); } } void loop() { }

※ Nota:

Este tutorial utilizó la dirección IP dinámica (a través de DHCP). Si desea usar la dirección IP estática:

Resultado

En los dos códigos anteriores, si tuvo éxito,

  • El resultado en el Monitor Serial se muestra a continuación:
COM6
Send
Connected to server HTTP/1.1 200 OK Date: Thu, 14 May 2020 07:06:40 GMT Content-Type: text/html; charset=utf-8 Content-Length: 44 Connection: close X-Top-SecreTTT: VG9vIGVhc3k/IElmIHlvdSBjYW4gcmVhZCB0a== ETag: W/"2c-4f52ca3d" Server: web_server Congratulations! You've fired the test event disconnected
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Verifica si tu teléfono está sonando o no.
  • Aceptar la llamada.
  • Escucha el mensaje de voz.

Tutorial en vídeo

Cómo incluir datos de sensores en un mensaje de voz

Para incluir datos de Arduino en el mensaje de voz, debemos hacer lo siguiente:

  • En Arduino: Incluir datos en la solicitud HTTP (en la cadena de consulta).
  • En Applet: Modificar la configuración para extraer datos de la solicitud HTTP.

Puedes aprender qué es la cadena de consulta en este tutorial

Hay cinco variables que podemos usar en la configuración del Applet de IFTTT.

{{EventName}} Extracted from HTTP request
{{OccurredAt}} System time when event occurs
{{Value1}} Extracted from the variable value1 of query string in HTTP request
{{Value2}} Extracted from the variable value2 of query string in HTTP request
{{Value3}} Extracted from the variable value3 of query string in HTTP request

Por ejemplo:

  • En Arduino: Modifique String queryString = "" a String queryString = "?value1=26&value2=70" en los códigos anteriores.
  • En Applet: Modifique el mensaje de texto en la configuración de la Applet de IFTTT como se indica a continuación:

Hola, amigo,


Este es Arduino Uno, me gustaría informarle que:

  • La temperatura exterior es {{Value1}} °C
  • La humedad exterior es {{Value2}} %


Todos los valores anteriores se miden en {{OccurredAt}}


¡Buena suerte y mantente saludable!

En el mensaje anterior, "
" haga una nueva línea al mostrar.

El mensaje de voz será como se muestra a continuación:

Vídeo de YouTube

Puedes leer la temperatura y la humedad desde el sensor y colocarlas en la cadena de consulta. Ver cómo incluir datos desde el sensor a la cadena de consulta

Desafíate a ti mismo

Basado en el código anterior, crea el siguiente proyecto:

  • Haz una llamada VoIP a tu teléfono cuando se presione el botón
  • Haz una llamada VoIP a tu teléfono cuando la puerta esté abierta
  • Haz una llamada VoIP a tu teléfono cuando la temperatura esté demasiado alta ...

WARNING

Tenga en cuenta que este tutorial está incompleto. Publicaremos en nuestra página de Facebook cuando el tutorial esté completo. Déle like para mantenerse actualizado.

Tutoriales Relacionados

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!