Arduino - Fazer Chamada de Voz

Neste tutorial, vamos aprender a usar o Arduino para fazer uma chamada VoIP (Voice over Internet Protocol) em tempo real para o seu celular. O código está disponível para o Arduino Uno R4 WiFi e para o Arduino Uno/Mega com Ethernet Shield. Você pode modificá-lo para funcionar com outros shields/placas.

O tutorial fornece o código Arduino para dois casos:

Pré-requisitos

Se você não conhece o IFTTT e os conceitos relacionados, recomendamos muito que você leia os seguintes tutoriais:

Diagrama de Ligação

  • Arduino - Ethernet Shield: basta encaixar o shield no Arduino Uno/Mega
Arduino - Ethernet Shield

Como Funciona

Precisamos:

  • Instalar o aplicativo IFTTT no seu celular (disponível para Android e iOS).
  • Criar um Applet do IFTTT no site do IFTTT, que conecta o Webhooks ao serviço VoIP Calls.

Ao criar o Applet:

  • Podemos escrever a mensagem de texto, que é convertida em mensagem de voz para ser enviada ao celular.
  • Podemos incluir dados do Arduino na mensagem.

Fluxo de Trabalho

  • O Arduino faz uma requisição HTTP ao Webhooks do IFTTT,
  • O Webhooks aciona o serviço VoIP Calls no IFTTT
  • O serviço VoIP Calls no IFTTT converte a mensagem de texto em mensagem de voz.
  • O serviço VoIP Calls no IFTTT faz uma chamada para o aplicativo IFTTT no seu celular.
  • O seu celular toca.
  • Você atende a chamada
  • A mensagem de voz é falada.

※ Nota:

  • A mensagem é definida no Applet, não no código Arduino.
  • Como isso é VoIP, o seu celular precisa estar conectado à Internet.
  • A chamada VoIP é gratuita
  • O Arduino pode falar com você, mas você não pode falar com o Arduino.

Como Usar o IFTTT com o Arduino

  • Instale o aplicativo IFTTT no seu celular
  • Crie uma conta no IFTTT e faça login no IFTTT.
  • Crie um Applet com os serviços Webhooks e VoIP Calls. Anote o nome do evento que usamos
  • Depois de criar o applet, pegue a chave do Webhooks no IFTTT.
  • Copie o código Arduino abaixo e cole na Arduino IDE.
  • Substitua o nome do evento e a chave do Webhooks no código Arduino
  • Faça o upload do código para o Arduino

※ Nota:

  • O nome do evento é definido por você. Você pode dar qualquer nome.
  • A chave do Webhooks é criada pelo IFTTT. Você não pode alterá-la.

Veja o tutorial em vídeo no final deste tutorial.

Código Arduino

Código Arduino IFTTT para Arduino Uno R4 WiFi

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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 Arduino IFTTT para Arduino Uno/Mega com Ethernet Shield

/* * Este código de Arduino foi desenvolvido por pt.newbiely.com * Este código de Arduino é disponibilizado ao público sem nenhuma restrição. * Para tutoriais completos e diagramas de ligação, visite: * https://pt.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 usou o endereço IP dinâmico (via DHCP). Se você quiser usar o endereço IP estático:

Resultado

Nos dois códigos acima, se der certo,

  • O resultado no Serial Monitor fica parecido com o abaixo:
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
Arduino Uno
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Uno' on 'COM15')
New Line
9600 baud
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
Ln 11, Col 1
Arduino Uno on COM15
2
  • Verifique se o seu celular está tocando.
  • Atenda a chamada
  • Ouça a mensagem de voz.

Tutorial em Vídeo

Como Incluir Dados do Sensor na Mensagem de Voz

Para incluir dados do Arduino na mensagem de voz, precisamos:

  • No Arduino: incluir os dados na requisição HTTP (na query string).
  • No Applet: modificar as configurações para extrair os dados da requisição HTTP.

Você pode aprender o que é query string neste tutorial

Existem 5 variáveis que podemos usar nas configurações do Applet do IFTTT.

{{EventName}} Extraído da requisição HTTP
{{OccurredAt}} Hora do sistema em que o evento ocorre
{{Value1}} Extraído da variável value1 da query string na requisição HTTP
{{Value2}} Extraído da variável value2 da query string na requisição HTTP
{{Value3}} Extraído da variável value3 da query string na requisição HTTP

Por exemplo:

  • No Arduino: altere String queryString = "" para String queryString = "?value1=26&value2=70" nos códigos acima.
  • No Applet: modifique a mensagem de texto nas configurações do Applet do IFTTT da seguinte forma:

Olá,


Aqui é o Arduino Uno, gostaria de informar que:

  • A temperatura externa é {{Value1}} °C
  • A umidade externa é {{Value2}} %


Todos os valores acima foram medidos em {{OccurredAt}}


Boa sorte e cuide-se!

Na mensagem acima, "
" cria uma nova linha na exibição.

A mensagem de voz ficará assim:

YOUTUBE VIDEO

Você pode ler a temperatura e a umidade do sensor e colocá-las na query string. Veja como incluir dados do sensor na query string

Desafie-se

Com base no código acima, faça o seguinte projeto:

  • Fazer uma chamada VoIP para o seu celular quando o botão for pressionado
  • Fazer uma chamada VoIP para o seu celular quando a porta for aberta
  • Fazer uma chamada VoIP para o seu celular quando a temperatura estiver muito alta ...

WARNING

Observe que este tutorial está incompleto. Vamos avisar na nossa página do Facebook quando o tutorial estiver completo. Curta a página para ficar atualizado.

Tutoriais Relacionados

※ NOSSAS MENSAGENS

  • Fique à vontade para compartilhar o link deste tutorial. Porém, por favor, não use nosso conteúdo em outros sites. Investimos muito esforço e tempo para criar este conteúdo, por favor respeite nosso trabalho!