Arduino - Sprachanruf tätigen

In diesem Tutorial lernen wir, wie man Arduino verwendet, um einen Echtzeit-VoIP-Anruf (Voice over Internet Protocol) auf Ihr Telefon zu tätigen. Der Code ist für das Arduino Ethernet Shield verfügbar. Sie können ihn so anpassen, dass er auch mit anderen Shields oder Boards funktioniert.

Im Tutorial wird der Arduino-Code für zwei Fälle bereitgestellt:

Voraussetzung

Wenn Sie sich nicht mit IFTTT und verwandten Konzepten auskennen, empfehlen wir Ihnen dringend, die folgenden Tutorials zu lesen:

Verdrahtungsdiagramm

  • Arduino - Ethernet-Shield: Wir müssen das Shield einfach auf dem Arduino Uno/Mega aufsetzen.
Arduino - Ethernet-Shield

Wie es funktioniert

Wir müssen:

  • Installiere die IFTTT-App auf deinem Smartphone (verfügbar für Android und iOS).
  • Erstelle ein IFTTT-Applet auf der IFTTT-Website, das Webhooks mit dem VoIP-Anrufdienst verbindet.

Wenn wir das Applet erstellen:

  • Wir können eine Textnachricht schreiben, die in eine Sprachnachricht umgewandelt wird und über das Telefon gesendet wird.
  • Wir können Daten vom Arduino in die Nachricht aufnehmen.

Arbeitsablauf

  • Arduino sendet eine HTTP-Anfrage an die Webhooks von IFTTT,
  • Webhooks lösen den VoIP-Anrufdienst von IFTTT aus
  • Der VoIP-Anrufdienst von IFTTT wandelt die Textnachricht in eine Sprachnachricht um.
  • Der VoIP-Anrufdienst von IFTTT führt einen Anruf an die IFTTT-App auf Ihrem Telefon aus.
  • Ihr Telefon klingelt.
  • Sie nehmen den Anruf entgegen
  • Die Sprachnachricht wird gesprochen.

※ Notiz:

  • Die Nachricht wird im Applet festgelegt, nicht im Arduino-Code.
  • Da dies VoIP ist, muss dein Telefon mit dem Internet verbunden sein.
  • VoIP-Anruf ist kostenlos.
  • Arduino kann mit dir sprechen, aber du kannst nicht mit dem Arduino sprechen.

So verwenden Sie IFTTT mit Arduino

  • Installiere die IFTTT-App auf deinem Smartphone
  • Erstelle ein IFTTT-Konto und melde dich bei IFTTT an.
  • Erstelle ein Applet für Webhooks- und VoIP-Anrufdienste. Notiere bitte den Ereignisname, den wir verwenden.
  • Nachdem du das Applet erstellt hast, hole dir den Webhooks-Schlüssel von IFTTT.
  • Kopiere den untenstehenden Arduino-Code und füge ihn in die Arduino-IDE ein.
  • Ersetze den Ereignisname und den Webhooks-Schlüssel im Arduino-Code.
  • Lade den Code auf den Arduino hoch.

※ Notiz:

  • Der Name des Ereignisses wird von Ihnen vorgegeben. Sie können jeden beliebigen Namen verwenden.
  • Der Webhook-Schlüssel wird von IFTTT erstellt. Sie können ihn nicht ändern.

Schau dir am Ende dieses Tutorials das Videotutorial an.

Arduino-Code

Arduino IFTTT-Code für Arduino Uno R4 WiFi

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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() { }

Arduino IFTTT-Code für Arduino Uno/Mega mit Ethernet-Shield

/* * Dieser Arduino Code wurde von newbiely.de entwickelt * Dieser Arduino Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. * Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: * https://newbiely.de/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() { }

※ Notiz:

Dieses Tutorial verwendete die dynamische IP-Adresse (über DHCP). Wenn Sie die statische IP-Adresse verwenden möchten:

Ergebnis

In den beiden oben genannten Codes, falls erfolgreich,

  • Das Ergebnis im Serial Monitor sieht unten so aus:
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  
  • Überprüfe, ob dein Telefon klingelt oder nicht.
  • Nimm den Anruf entgegen.
  • Höre die Sprachnachricht an.

Video-Tutorial

Wie man Sensordaten in eine Sprachnachricht einbindet

Um Daten vom Arduino in die Sprachnachricht einzubinden, müssen wir Folgendes tun:

  • In Arduino: Daten in die HTTP-Anfrage einfügen (in der Abfragezeichenfolge).
  • In Applet: die Einstellung ändern, um Daten aus der HTTP-Anfrage zu extrahieren.

Sie können lernen was eine Abfragezeichenfolge in diesem Tutorial ist

Es gibt fünf Variablen, die wir in der Einstellung des IFTTT-Applets verwenden können.

{{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

Zum Beispiel:

  • Bei Arduino: Ändern Sie String queryString = "" zu String queryString = "?value1=26&value2=70" in den oben genannten Codes.
  • Im Applet: Ändern Sie die Textnachricht in der Einstellung des IFTTT-Applets wie folgt:

Hallo, Kerl,


Dies ist Arduino Uno, ich möchte Sie darauf hinweisen, dass:

  • Die Außentemperatur beträgt {{Value1}} °C
  • Die Luftfeuchtigkeit im Freien beträgt {{Value2}} %


Alle oben genannten Werte werden zum Zeitpunkt {{OccurredAt}} gemessen


Viel Glück und bleib gesund!

In der obigen Nachricht soll "
" beim Anzeigen eine neue Zeile erzeugen.

Die Sprachnachricht wird unten wie folgt aussehen:

YouTube-Video

Sie können die Temperatur und die Luftfeuchtigkeit vom Sensor auslesen und in die Abfragezeichenfolge einfügen. Siehe wie man Daten vom Sensor in die Abfragezeichenfolge einfügt

Fordere dich selbst heraus

Basierend auf dem obigen Code erstellen Sie das folgende Projekt:

  • Rufen Sie Ihr Telefon per VoIP an, wenn der Knopf gedrückt wird
  • Rufen Sie Ihr Telefon per VoIP an, wenn die Tür offen ist
  • Rufen Sie Ihr Telefon per VoIP an, wenn die Temperatur zu hoch ist ...

WARNING

Bitte beachten Sie, dass dieses Tutorial unvollständig ist. Wir werden auf unserer Facebook-Seite posten, wenn das Tutorial vollständig ist. Liken Sie sie, um auf dem Laufenden zu bleiben.

Verwandte Tutorials

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!