Spreek met Arduino en bedien het met Google Assistant
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 |
Apps en online services
| ||||
|
Over dit project
In dit project leren we hoe we een verbinding kunnen maken tussen een internetservice en Arduino-kaarten. Aan het einde van dit artikel zult u:
- weten hoe je gegevens van de Google Assistent kunt krijgen
- weet hoe je het IFTTT-protocol moet gebruiken
- wees bekend met webhooks en http-verzoeken
- tegen je Arduino kunnen praten
Google Assistent &IFTTT-applets
De Google Assistent is een virtuele assistent op basis van kunstmatige intelligentie, ontwikkeld door Google en voornamelijk beschikbaar op mobiele apparaten en smarthome-apparaten. In tegenstelling tot de vorige virtuele assistent van het bedrijf, Google Now, kan de Google Assistent tweerichtingsgesprekken voeren. Het herkent uw woorden beter dan welk ander apparaat dan ook en reageert snel en correct op uw commando's. Gebruikers communiceren voornamelijk met de Google Assistent via natuurlijke stem, hoewel toetsenbordinvoer ook wordt ondersteund. Op dezelfde manier en op dezelfde manier als Google Now, kan de Assistent op internet zoeken, gebeurtenissen en alarmen plannen, hardware-instellingen aanpassen op het apparaat van de gebruiker en informatie weergeven van het Google-account van de gebruiker. Google heeft ook aangekondigd dat de Assistent objecten kan identificeren en visuele informatie kan verzamelen via de camera van het apparaat, en ondersteuning zal bieden voor het kopen van producten en het verzenden van geld, evenals het identificeren van nummers.
If This Then That, ook bekend als IFTTT, is een gratis webgebaseerde service om ketens van eenvoudige voorwaardelijke instructies te maken, applets genaamd. Een applet wordt geactiveerd door wijzigingen die plaatsvinden binnen andere webservices zoals Gmail, Facebook, Telegram, Instagram of Pinterest. Een applet kan bijvoorbeeld een e-mailbericht verzenden als de gebruiker tweet met een hashtag, of een foto op Facebook naar het archief van een gebruiker kopiëren als iemand een gebruiker in een foto tagt. Naast de webgebaseerde applicatie draait de dienst op iOS en Android. In februari 2015 hernoemde IFTTT de oorspronkelijke toepassing naar IF en bracht een nieuwe reeks apps uit, Do genaamd, waarmee gebruikers snelkoppelingstoepassingen en -acties kunnen maken. Vanaf 2015 maakten IFTTT-gebruikers elke dag ongeveer 20 miljoen recepten. Alle functionaliteiten van de Do-suite met apps zijn sindsdien geïntegreerd in een opnieuw ontworpen IFTTT-app.
Webhook &JSON-inhoud
Een webhook in webontwikkeling is een methode om het gedrag van een webpagina of webtoepassing te vergroten of te wijzigen met aangepaste callbacks. Deze callbacks kunnen worden onderhouden, gewijzigd en beheerd door externe gebruikers en ontwikkelaars die niet noodzakelijkerwijs verbonden zijn aan de oorspronkelijke website of applicatie. De term "webhook" is in 2007 bedacht door Jeff Lindsay uit de computerprogrammeerterm hook.
In de informatica is JavaScript Object Notation (JSON) een open-standaard bestandsindeling die door mensen leesbare tekst gebruikt om gegevensobjecten te verzenden die bestaan uit attribuut-waardeparen en array-gegevenstypen (of een andere serialiseerbare waarde). Het is een veelgebruikt gegevensformaat dat wordt gebruikt voor asynchrone browser-servercommunicatie, ook als vervanging voor XML in sommige AJAX-achtige systemen.
Google Assistent naar Arduino
In dit project willen we verschillende delen van een Arduino besturen, zoals I/O-pinnen, PWM, seriële poort enzovoort door een string van Google Assistant naar Arduino seriële poort te sturen. Allereerst moeten we enkele specifieke zinnen voor Google Assistent definiëren om erachter te komen wat we bedoelen. Vervolgens maken we een applet in de IFTTT-website en maken we een verbinding tussen Google Assistant en onze database. Daarna lezen we gegevens uit de database door de ESP8266-module en sturen deze naar de Arduino. Laten we beginnen!
Circuit
Implementatie
Allereerst heb je een apparaat nodig om je Google assist uit te voeren. Ga naar assistant.google.com en bekijk alle apparaten die de assistent ondersteunen. In dit project gebruiken we een Android-telefoonapparaat. Open ifttt.com en maak een account aan. Nadat u zich hebt aangemeld, klikt u op Mijn applets en vervolgens op Nieuwe applet. Nu kunt u uw service toevoegen als DIT in uw applet. Klik op DIT en zoek naar Google Assistant. Je hebt 4 keuzes om je zin te definiëren voor Google Assist. Kies een zin met een nummeringrediënt. Op de volgende pagina kunt u uw zin toevoegen. U wilt bijvoorbeeld zeggen "Stel PWM van pin 9 in op 255". Typ het gewoon als uw zin en vervang "255" door een "#" -symbool. U kunt meer zinnen met dezelfde betekenis toevoegen, zoals "PWM 9 tot 255". Voeg nu een reactie toe zodat de Google Assistent je kan laten weten dat je opdracht is begrepen en de nodige actie is ondernomen, bijvoorbeeld "De PWM is bijgewerkt". Als u klaar bent, klikt u op Trigger maken. In het gedeelte "DAT" van uw applet heeft u veel services om te zoeken naar "Webhooks" en dat te kiezen. Klik op "Maak een webverzoek." Voeg de URL van uw server toe om gegevens te ontvangen. Stel de methode in op POST en selecteer Toepassing/json voor het inhoudstype. Nu zou u een inhoudsopgave moeten toevoegen. Zoiets als dit:{"Nummer":"{ {NumberField}}'}. Klik nu op 'Actie maken'.
Server en database
We schrijven voorbeeldcode voor Server om gegevens van IFTTT op te halen en op te slaan in de database. U kunt modellen wijzigen om uw gegevens op te slaan als uw interesse. Download vanaf hier.
ESP8266 &Arduino-code
Eerst schrijven we een code voor ESP-01 om gegevens uit de database te halen en deze via de seriële poort naar de Arduino te sturen. Vervolgens schrijven we nog een code voor Arduino om gegevens van ESP-01 te krijgen en voeren we de opdracht uit (bijvoorbeeld de PWM wijzigen). Je kunt Arduino IDE gebruiken om beide codes te compileren en ze naar de boards te uploaden.
Voordat u de ArduinoJson-bibliotheek kunt gebruiken, moet u ervoor zorgen dat de bibliotheek op uw computer is geïnstalleerd. Ga voor een snelle controle naar de bibliotheekmanager in de Arduino IDE (Schets> Bibliotheek opnemen> Bibliotheken beheren) en typ "ArduinoJson" in het tekstvak, als u een groen gekleurd "GENSTALLEERD" label ziet naast de naam van de bibliotheek, dat betekent dat u helemaal klaar bent om te gaan en kunt u doorgaan naar de volgende stap. Als u het label niet ziet, klikt u eenmaal op de doos/divisie en ziet u de knop "Installeren". Druk op installeren en je bent klaar voor de volgende stap.
Upload deze code nu naar ESP-01
#include "ESP8266WiFi.h"#include "ESP8266HTTPClient.h"#include "ArduinoJson.h"// WiFi Parametersconst char* ssid ="YOUR_SSID";const char* password ="YOUR_PASSWORD";instelling ongeldig () { Serieel.begin(115200); WiFi.begin(ssid, wachtwoord); while (WiFi.status() !=WL_CONNECTED) { delay(1000); Serial.println("Verbinding maken..."); }}void loop() {// Controleer wifi-status if (WiFi.status() ==WL_CONNECTED) { HTTPClient http; //Object van klasse HTTPClient http.begin("http://yourip/api/Home/GetAllApp"); int httpCode =http.GET(); // Controleer de terugkerende code if (httpCode> 0) { // Haal de payload van het verzoekantwoord op String payload =http.getString(); // TODO:Serial.println (payload) parseren; } http.end(); //Verbinding sluiten } // Vertragingsvertraging (3000);}
En dit is de code voor Arduino om bestellingen van Google Assistant op te halen en uit te voeren.
String inputString =""; // een tekenreeks om inkomende data vast te houdenString buff; bool stringComplete =false; // of de string completebool id is;int f,buf;char x;void setup() {// initialiseer serieel:Serial.begin (9600); // reserveer 200 bytes voor de inputString:inputString.reserve(200);}void loop() { // print de string wanneer een nieuwe regel arriveert:if (stringComplete) { while (f <100) { if (inputString.substring( f) =="id") { id =waar; pauze; } f++; } if (id ==true) { x =inputString.charAt(f + 4); } if (x =='4') { f =0; while (f <100) { if (inputString.substring(f) =="getal") { f +=9; for (int i =0; i <3; i++) { if (inputString.charAt(f + i) =='"') i =3; else buff +=inputString.charAt(f + i);} buf =buff.toInt(); analogWrite(9, buf); break; } f++; } } // wis de string:inputString =""; stringComplete =false; }}void serialEvent() { while (Serial.available()) {// haal de nieuwe byte:char inChar =(char)Serial.read(); // voeg deze toe aan de inputString:inputString +=inChar; // als het inkomende teken een nieuwe regel is, stel dan een vlag in zodat de hoofdlus kan // er iets aan doen:if (inChar =='\n') { stringComplete =true; } }}
Wat is de volgende stap?
U kunt dit project naar wens verbeteren. Hier zijn een paar suggesties:
- Probeer je favoriete commando's toe te voegen, zoals het bedienen van je uitgangspinnen, je kunt een relaismodule gebruiken en het licht in je kamer regelen.
- Probeer gegevens van Arduino naar Google Assistant te verzenden.
Productieproces
- Toegangscontrole met QR, RFID en temperatuurverificatie
- Universele afstandsbediening met Arduino, 1Sheeld en Android
- Bedien muntvangers met Arduino
- Arduino met Bluetooth om een LED te bedienen!
- Arduino Nano:bedien 2 stappenmotoren met joystick
- Besturing van servomotor met Arduino en MPU6050
- Bluetooth spraakgestuurde apparaten met OK Google
- u-blox LEA-6H 02 GPS-module met Arduino en Python
- Spraakherkenning en synthese met Arduino
- ThimbleKrox - Muisbediening met je vingers
- Aanwezigheidssysteem op basis van Arduino en Google Spreadsheet