Arduino - Passer un appel vocal

Dans ce tutoriel, nous allons apprendre à utiliser Arduino pour effectuer un appel VoIP (Voice over Internet Protocol) en temps réel vers votre téléphone. Le code est disponible pour l'Arduino Ethernet Shield 2. Vous pouvez le modifier pour qu'il fonctionne avec d'autres shields/cartes.

Le tutoriel fournit le code Arduino pour deux cas :

Préparation du matériel

1×Arduino UNO R4 WiFi
1×USB Cable Type-C
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

Alternatively if using Ethernet:

1×Arduino Uno
1×USB 2.0 cable type A/B
1×Arduino Ethernet Shield 2
1×Ethernet Cable
1×(Optional) 9V Power Adapter for Arduino
1×(Recommended) Screw Terminal Block Shield for Arduino Uno
1×(Optional) Transparent Acrylic Enclosure For Arduino Uno

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

Préalable

Si vous ne connaissez pas IFTTT et les concepts associés, nous vous recommandons vivement de lire les tutoriels suivants :

Diagramme de câblage

  • Nous devons simplement empiler le shield sur l'Arduino Uno/Mega.
Arduino - Bouclier Ethernet 2

Comment ça marche

Nous devons :

  • Installez l'application IFTTT sur votre téléphone (disponible pour Android et iOS).
  • Créez un Applet IFTTT sur le site web IFTTT, qui connecte Webhooks au service d'appels VoIP.

Lorsque nous créons l'Applet :

  • Nous pouvons écrire le message texte, qui est converti en message vocal à envoyer sur le téléphone.
  • Nous pouvons inclure des données provenant d'Arduino dans le message.

Flux de travail

  • Arduino effectue une requête HTTP aux Webhooks de IFTTT,
  • Les Webhooks déclenchent le service d'appels VoIP sur IFTTT
  • Le service d'appels VoIP sur IFTTT convertit le message texte en message vocal.
  • Le service d'appels VoIP sur IFTTT passe un appel à l'application IFTTT sur votre téléphone.
  • Votre téléphone sonne.
  • Vous acceptez l'appel
  • Le message vocal est énoncé.

※ NOTE THAT:

  • Le message est spécifié sur l'applet, pas dans le code Arduino.
  • Puisque c'est du VoIP, votre téléphone doit être connecté à Internet.
  • L'appel VoIP est gratuit.
  • Arduino peut vous parler, mais vous ne pouvez pas parler à Arduino.

Comment utiliser IFTTT avec Arduino

  • Installez l'application IFTTT sur votre téléphone
  • Créez un compte IFTTT et connectez-vous à IFTTT.
  • Créez un Applet des services Webhooks et des appels VoIP. Veuillez noter le nom de l'événement utilisé
  • Après avoir créé l'applet, obtenez la clé Webhooks depuis IFTTT.
  • Copiez le code Arduino ci-dessous et collez-le dans l'IDE Arduino.
  • Remplacez le nom de l'événement et la clé Webhooks dans le code Arduino
  • Téléchargez le code sur Arduino

※ NOTE THAT:

  • Le nom de l'événement est donné par vous. Vous pouvez donner n'importe quel nom.
  • La clé des Webhooks est créée par IFTTT. Vous ne pouvez pas la modifier.

Consultez le tutoriel vidéo à la fin de ce tutoriel.

Code Arduino

Code Arduino IFTTT pour Arduino Uno R4 WiFi

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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() { }

Code Arduino IFTTT pour Arduino Uno/Mega avec Ethernet Shield 2

/* * Ce code Arduino a été développé par newbiely.fr * Ce code Arduino est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/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() { }

※ NOTE THAT:

Ce tutoriel utilise l'adresse IP dynamique (via DHCP). Si vous souhaitez utiliser l'adresse IP statique :

Résultat

Dans les deux codes ci-dessus, si réussi,

  • Le résultat dans le moniteur série est le suivant :
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  
  • Vérifiez si votre téléphone sonne.
  • Répondez à l'appel.
  • Écoutez le message vocal.

Tutoriel vidéo

Comment inclure les données des capteurs dans un message vocal

Pour inclure des données provenant de l'Arduino dans le message vocal, nous devons :

  • Dans Arduino : Inclure des données dans la requête HTTP (dans la chaîne de requête).
  • Dans Applet : modifier le paramètre pour extraire les données de la requête HTTP.

Vous pouvez apprendre ce qu'est une chaîne de requête dans ce tutoriel

Il y a 5 variables que nous pouvons utiliser dans la configuration de l'Applet 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

Par exemple :

  • Dans Arduino : Changez String queryString = "" par String queryString = "?value1=26&value2=70" dans les codes ci-dessus.
  • Dans l'Applet : Modifiez le message texte dans les paramètres de l'Applet IFTTT comme suit :

Salut mec,

Voici l'Arduino Uno, je tiens à vous informer que :

  • La température extérieure est de {{Value1}} °C
  • L'humidité extérieure est de {{Value2}} %

Toutes les valeurs ci-dessus sont mesurées à {{OccurredAt}}

Bonne chance et restez en bonne santé !

Dans le message ci-dessus, "
" crée une nouvelle ligne lors de l'affichage.

Le message vocal sera comme ci-dessous :

VIDÉO YOUTUBE

Vous pouvez lire la température et l'humidité depuis le capteur et les insérer dans la chaîne de requête. Voir comment inclure des données du capteur dans la chaîne de requête

Défiez-vous

Sur la base du code ci-dessus, réalisez le projet suivant :

  • Effectuez un appel VoIP sur votre téléphone lorsque le bouton est pressé
  • Effectuez un appel VoIP sur votre téléphone lorsque la porte est ouverte
  • Effectuez un appel VoIP sur votre téléphone lorsque la température est trop élevée

WARNING

Veuillez noter que ce tutoriel est incomplet. Nous publierons sur notre Page Facebook lorsque le tutoriel sera complet. Aimez-la pour rester informé.

Tutoriels connexes

※ OUR MESSAGES

  • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!