Google assistant merupakan platform yang di buat oleh google untuk mempermudah pengguna smartphone dalam mencari sesuatu baik lokal (di ponselnya saja) ataupun global (internet).
Untuk membuat projek ini kita memerlukan IFTTT dan IO Adafruit untuk dapat terhubung ke google assistant. singkatnya IFTTT digunakan sebagai jembatan untuk menghubungkan antara google assistant dengan IO adafruit, dan IO adafruit berfungsi menjadi penghubung antara ESP8266 dengan IFTTT sehingga ESP8266 dapat saling terhubung dengan perintah yang diberikan dari google assistant.
Alat yang dibutuhkan
- NodeMCU
- LED
Setting IO Adafruit
Buat akun pada IO Adafruit Sign Up dan Login
Login, setelah itu pilih dasboards, pilih new dashboard
pilih dashboard “led”, Create New Block, dan pilih yang model Toggle
Sampai tahap ini sudah selesai untuk adafruit
(sampai tahap ini sudah bisa berkomunikasi antara nodemcu dengan adafruit dengan perintah menjalankan LED nyala dan mati
Setting IFTTT
Buat akun terlebih dahulu IFTTT Sign Up setelah berhasil membuat akun dan berhasil masuk silahkan klik profil kamu lalu pilih menu create dan akan tampil halaman seperti gambar berikut kemudian klik icon + this.
Untuk “If This”, ketikan kata kunci google, lalu pilh Google Assistant
untuk “Then That” pilih Adafruit
untuk Turn ON
Untuk Turn Off
Pada Applet, nanti akan terdiri dari 2 applet yaitu
Pada tahap sudah ada komunikasi antara Google Assistant dengan Adafruit. Pastikan Toggle sudah berubah ketika memasukan perintah Turn on/off the lamp
Kode Program
Sebelum memasukkan kode program, tambahkan library terlebih dahulu
dan berikut code ESP8266 NodeMCU google assistant dari example yang ada dab hubungkan dengan akun google. silahkan ubah AIO username dan AIO key jika ingin menggunakan akun google sendiri.
#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
#define led D2
#define WIFI_SSID "your_ssid" // Your SSID
#define WIFI_PASS "your_password" // Your password
/************************* Adafruit.io Setup *********************************/
//#define AIO_SERVER "https://io.adafruit.com/api/v2/xepatan/feeds/led1"
#define AIO_SERVER "io.adafruit.com"
#define AIO_SERVERPORT 1883 // use 8883 for SSL
#define AIO_USERNAME "xepatan" // Replace it with your username
#define AIO_KEY "aio_JYgf58bt81v8OfS70UKSReFTrh64" // Replace with your Project Auth Key
/************ Global State (you don't need to change this!) ******************/
// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;
// or... use WiFiFlientSecure for SSL
//WiFiClientSecure client;
// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details.
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
/****************************** Feeds ***************************************/
// Setup a feed called 'onoff' for subscribing to changes.
Adafruit_MQTT_Subscribe Light1 = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME"/feeds/led1"); // FeedName
void MQTT_connect();
void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);
// Connect to WiFi access point.
Serial.println(); Serial.println();
Serial.print("Connecting to ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
// Setup MQTT subscription for onoff feed.
mqtt.subscribe(&Light1);
}
void loop() {
MQTT_connect();
Adafruit_MQTT_Subscribe *subscription;
while ((subscription = mqtt.readSubscription(5000))) {
if (subscription == &Light1) {
Serial.print(F("Got: "));
Serial.println((char *)Light1.lastread);
int Light1_State = atoi((char *)Light1.lastread);
digitalWrite(led, !(Light1_State));
}
}
}
void MQTT_connect() {
int8_t ret;
// Stop if already connected.
if (mqtt.connected()) {
return;
}
Serial.print("Connecting to MQTT... ");
uint8_t retries = 3;
while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
Serial.println(mqtt.connectErrorString(ret));
Serial.println("Retrying MQTT connection in 5 seconds...");
mqtt.disconnect();
delay(5000); // wait 5 seconds
retries--;
if (retries == 0) {
// basically die and wait for WDT to reset me
while (1);
}
}
Serial.println("MQTT Connected!");
}
Selamat mencoba
Jika mengalami kegagalan, sebaiknya lakukan langkah troubleshooting dari nodemcu ke adafruit, atau dari adafruit ke ifttt.
Ref : [1]