Arduino - Maak een spraakoproep

In deze tutorial leert u hoe u met Arduino een real-time VoIP (Voice over Internet Protocol) oproep naar uw telefoon kunt maken. De code is beschikbaar voor Arduino Ethernet Shield. U kunt deze aanpassen om te werken met andere shield/boards.

Deze tutorial bevat Arduino-code voor twee situaties:

Benodigdheden hardware

1×Arduino UNO R4 WiFi
1×Alternatief: DIYables STEM V4 IoT
1×USB-kabel Type-C

Als alternatief bij gebruik van Ethernet:

1×Arduino Uno R3
1×USB 2.0 kabel type A/B
1×Arduino Ethernet Shield
1×Ethernet-kabel
1×(Aanbevolen) Schroefklem Block Shield voor Arduino Uno R4
1×(Aanbevolen) Breadboard-Shield voor Arduino Uno R4
1×(Aanbevolen) Behuizing voor Arduino Uno R4
1×(Aanbevolen) Stromsplitter voor Arduino Uno R4
1×(Aanbevolen) Prototyping Basisplaat & Breadboard Kit voor Arduino Uno

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Vereisten

Als u niet bekend bent met IFTTT en aanverwante concepten, raden wij aan eerst de volgende tutorials te lezen:

Aansluitschema

  • Arduino - Ethernet Shield: u hoeft alleen het shield op Arduino Uno/Mega te plaatsen
Arduino - Ethernet Shield

Werking

We moeten:

  • De IFTTT-app installeren op uw telefoon (beschikbaar voor Android en iOS).
  • Een IFTTT Applet aanmaken op de IFTTT-website, die Webhooks verbindt met de VoIP Calls-service.

Wanneer we de Applet aanmaken:

  • Kunnen we een tekstbericht schrijven dat wordt omgezet in een spraakbericht dat naar de telefoon wordt gestuurd.
  • Kunnen we gegevens van Arduino in het bericht opnemen.

Werkwijze

  • Arduino maakt een HTTP-verzoek naar de Webhooks van IFTTT,
  • Webhooks activeert de VoIP Calls-service op IFTTT,
  • De VoIP Calls-service zet het tekstbericht om naar een spraakbericht,
  • De VoIP Calls-service belt met de IFTTT-app op uw telefoon,
  • Uw telefoon gaat over,
  • U neemt op,
  • Het spraakbericht wordt uitgesproken.

※ Notiz:

  • Het bericht wordt gespecificeerd in de Applet, niet in de Arduino-code.
  • Omdat dit VoIP is, moet uw telefoon verbonden zijn met internet.
  • VoIP-oproepen zijn gratis.
  • Arduino kan tegen u spreken, maar u kunt niet terugpraten tegen Arduino.

Hoe gebruikt u IFTTT met Arduino

  • Installeer de IFTTT-app op uw telefoon.
  • Maak een IFTTT-account aan en log in op IFTTT.
  • Maak een Applet met de Webhooks- en VoIP Calls-services. Schrijf de gebeurtenisnaam op die u gebruikt.
  • Na het aanmaken van de Applet, verkrijgt u de Webhooks-sleutel van IFTTT.
  • Kopieer de onderstaande Arduino-code en plak deze in de Arduino IDE.
  • Vervang de gebeurtenisnaam en Webhooks-sleutel in de Arduino-code.
  • Upload de code naar Arduino.

※ Notiz:

  • De gebeurtenisnaam bepaalt u zelf, u kunt elke naam kiezen.
  • De Webhooks-sleutel wordt gegenereerd door IFTTT. Deze kunt u niet wijzigen.

Bekijk de video tutorial aan het einde van deze handleiding.

Arduino-code

Arduino IFTTT-code voor Arduino Uno R4 WiFi

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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 voor Arduino Uno/Mega met Ethernet Shield

/* * Deze Arduino code is ontwikkeld door newbiely.nl * Deze Arduino code wordt zonder enige beperking aan het publiek beschikbaar gesteld. * Voor volledige instructies en schema's, bezoek: * https://newbiely.nl/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:

Deze tutorial maakt gebruik van een dynamisch IP-adres (via DHCP). Wilt u een statisch IP-adres gebruiken:

Resultaat

In beide bovenstaande codes, als het succesvol is:

  • Het resultaat in de Serial Monitor ziet er als volgt uit:
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  
  • Controleer of uw telefoon overgaat.
  • Neem de oproep aan.
  • Luister naar het spraakbericht.

Video Tutorial

Hoe sensorgegevens in spraakbericht opnemen

Om gegevens van Arduino in het spraakbericht op te nemen, moet u:

  • In Arduino: Voeg gegevens toe aan het HTTP-verzoek (in de query string).
  • In de Applet: Pas de instellingen aan om gegevens uit het HTTP-verzoek te halen.

U kunt leren wat een query string is in deze tutorial

Er zijn 5 variabelen die u in de instellingen van de IFTTT Applet kunt gebruiken.

{{EventName}} Afgeleid uit HTTP-verzoek
{{OccurredAt}} Systeemtijd waarop het evenement plaatsvindt
{{Value1}} Afgeleid uit variabele value1 van query string in HTTP-verzoek
{{Value2}} Afgeleid uit variabele value2 van query string in HTTP-verzoek
{{Value3}} Afgeleid uit variabele value3 van query string in HTTP-verzoek

Bijvoorbeeld:

  • In Arduino: Wijzig String queryString = "" naar String queryString = "?value1=26&value2=70" in bovenstaande codes.
  • In Applet: Wijzig het tekstbericht in de instellingen van de IFTTT Applet als volgt:

Hi guy,


Dit is Arduino Uno, ik wil u laten weten dat:

  • De buitentemperatuur is {{Value1}} °C
  • De buitentemperatuur is {{Value2}} %


Al deze waarden zijn gemeten op {{OccurredAt}}


Veel succes en blijf gezond!

In bovenstaande bericht zorgt "
" voor een nieuwe regel bij weergave.

Het spraakbericht klinkt ongeveer als volgt:

YOUTUBE VIDEO

U kunt temperatuur en luchtvochtigheid uitlezen van een sensor en in de query string plaatsen. Zie hoe u gegevens van sensor aan de query string toevoegt

Daag uzelf uit

Op basis van bovenstaande code maakt u het volgende project:

  • Maak een VoIP-oproep naar uw telefoon wanneer een knop wordt ingedrukt
  • Maak een VoIP-oproep naar uw telefoon wanneer de deur open gaat
  • Maak een VoIP-oproep naar uw telefoon wanneer de temperatuur te hoog is ...

Opmerkingen

WARNING

Let op: deze tutorial is nog niet compleet. We zullen een bericht plaatsen op onze Facebook-pagina wanneer de tutorial compleet is. Like de pagina om op de hoogte te blijven.

Gerelateerde Tutorials

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!