esp8266-google-home-notifier
Send notifications to Google Home from esp8266.
This library depends on Google Translate Service.
This is the Japanese document on Qiita.com;
Install
This library can be installed from the Library Manager on Arduino IDE
Requirement
-
Arduino board
- esp8266 *Arduino Core ESP8266 2.x only
- esp32
(note: 1.0.2 and later, and 1.0.4 requires 83810fa or later of arduino-esp32)
-
esp8266-google-tts
download from Library Manager of Arduino IDE -
(only for ver 1.0.1 and earlier) Latest ESP8266mDNS
- download ESP8266mDNS.cpp/.h to
$LIBRARIES_DIR/esp8266-google-home-notifier/src/
and restart Arduino IDE, like below structure.
$LIBRARIES_DIR └── esp8266-google-home-notifier/ ├── LICENSE ├── README.md : └── src/ ├── ESP8266mDNS.cpp # <- additional file ├── ESP8266mDNS.h # <- additional file : ├── esp8266-google-home-notifier.cpp └── esp8266-google-home-notifier.h
or
use Arduino Core for ESP8266 2.5.0, which will merge ESP8266mDNS.cpp/.h, or later.
-> The PR wasn't merged, so MDNS handling in this library should be fix under ESP8266 cor 2.5.0 or later.
- download ESP8266mDNS.cpp/.h to
Usage
Simple for esp8266/32
#ifdef ARDUINO_ARCH_ESP8266
#include <ESP8266WiFi.h>
#endif
#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#endif
#include <esp8266-google-home-notifier.h>
const char* ssid = "<REPLASE_YOUR_WIFI_SSID>";
const char* password = "<REPLASE_YOUR_WIFI_PASSWORD>";
GoogleHomeNotifier ghn;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("");
Serial.print("connecting to Wi-Fi");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}
Serial.println("");
Serial.println("connected.");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); //Print the local IP
const char displayName[] = "Family Room";
Serial.println("connecting to Google Home...");
if (ghn.device(displayName, "en") != true) {
Serial.println(ghn.getLastError());
return;
}
Serial.print("found Google Home(");
Serial.print(ghn.getIPAddress());
Serial.print(":");
Serial.print(ghn.getPort());
Serial.println(")");
if (ghn.notify("Hello, World!") != true) {
Serial.println(ghn.getLastError());
return;
}
Serial.println("Done.");
}
void loop() {
// put your main code here, to run repeatedly:
}
Notification Server for esp8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <esp8266-google-home-notifier.h>
const char* ssid = "<REPLASE_YOUR_WIFI_SSID>";
const char* password = "<REPLASE_YOUR_WIFI_PASSWORD>";
ESP8266WebServer server(80);
GoogleHomeNotifier ghn;
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("");
Serial.print("connecting to Wi-Fi");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
Serial.print(".");
}
Serial.println("");
Serial.println("connected.");
Serial.print("IP address: ");
Serial.println(WiFi.localIP()); //Print the local IP
const char displayName[] = "Family Room";
Serial.println("connecting to Google Home...");
if (ghn.device(displayName, "en") != true) {
Serial.println(ghn.getLastError());
return;
}
Serial.print("found Google Home(");
Serial.print(ghn.getIPAddress());
Serial.print(":");
Serial.print(ghn.getPort());
Serial.println(")");
server.on("/speech", handleSpeechPath);
server.on("/", handleRootPath);
server.begin();
}
void handleSpeechPath() {
String phrase = server.arg("phrase");
if (phrase == "") {
server.send(401, "text / plain", "query 'phrase' is not found");
return;
}
if (ghn.notify(phrase.c_str()) != true) {
Serial.println(ghn.getLastError());
server.send(500, "text / plain", ghn.getLastError());
return;
}
server.send(200, "text / plain", "OK");
}
void handleRootPath() {
server.send(200, "text/html", "<html><head></head><body><input type=\"text\"><button>speech</button><script>var d = document;d.querySelector('button').addEventListener('click',function(){xhr = new XMLHttpRequest();xhr.open('GET','/speech?phrase='+encodeURIComponent(d.querySelector('input').value));xhr.send();});</script></body></html>");
}
void loop() {
// put your main code here, to run repeatedly:
server.handleClient();
}