ESP8266-12 - use with
Alexa
d. bodnar 11-28-2016
Objective - program the ESP8266 to operate
with Amazon's Alexa - it should be able to operate multiple devices
|
Using the modules from DX http://www.dx.com/p/esp-12-esp8266-serial-wifi-wireless-module-w-pcb-antenna-adapter-board-for-arduino-raspberry-pi-379296 Need to remove 0 ohm resistor in center to use voltage regulator |
Needed to do this first to get it ready
for programming http://www.instructables.com/id/Get-Your-ESP8266-12-Ready-for-AT-Commands/?ALLSTEPS
|
Then programmed using the code from here: https://github.com/kakopappa/arduino-esp8266-alexa-multiple-wemo-switch - had pin 0 jumpered to ground to program |
![]() |
![]() |
To program connect GPIO0 (zero) to ground
and program with Arduino IDE - might need to repeat after a hard
reset - allow GPIO zero to float after - should see something like
this:`þsúÿ Connecting to WiFi... Connecting ............... Connection failed. I%_€à1þÿ Connecting to WiFi... Connecting ............ Connected to main2 IP address: 192.168.1.33 Begin multicast .. Udp multicast server started at 239.255.255.250:1900 WebServer started on port: 80 WebServer started on port: 81 WebServer started on port: 82 WebServer started on port: 83 Adding switches upnp broadcast responder Adding switch : basement lights index : 0 Adding switch : garage lights index : 1 Adding switch : bench lights index : 2 Adding switch : desk lights index : 3
|
This code was modified to support four
LEDs called
Very cool! // working d. bodnar 11-27-2016 with program (pin 0) floating - stayed on overnight // REMEMBER to jumper pin "0" to ground when programming #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <WiFiUdp.h> #include <functional> #include "switch.h" #include "UpnpBroadcastResponder.h" #include "CallbackFunction.h" int LED4 = 4; int LED5 = 5; int LED14 = 14; // 3rd LED for testing int LED12 = 12; // 4th LED for testing // prototypes boolean connectWifi(); //on/off callbacks void basementLightsOn(); void basementLightsOff(); void garageLightsOn(); void garageLightsOff(); void benchLightsOn(); void benchLightsOff(); void deakLightsOn(); void deskLightsOff(); // Change this before you flash const char* ssid = "main2"; const char* password = "*******8"; boolean wifiConnected = false; UpnpBroadcastResponder upnpBroadcastResponder; Switch *basement = NULL; Switch *garage = NULL; Switch *bench = NULL; Switch *desk = NULL; void setup() { pinMode(LED5, OUTPUT); pinMode(LED4, OUTPUT); pinMode(LED14, OUTPUT); pinMode(LED12, OUTPUT); Serial.begin(9600); // Initialise wifi connection wifiConnected = connectWifi(); if (wifiConnected) { upnpBroadcastResponder.beginUdpMulticast(); // Define your switches here. Max 14 // Format: Alexa invocation name, local port no, on callback, off callback basement = new Switch("basement lights", 80, basementLightsOn, basementLightsOff); garage = new Switch("garage lights", 81, garageLightsOn, garageLightsOff); bench = new Switch("bench lights", 82, benchLightsOn, benchLightsOff); desk = new Switch("desk lights", 83, deskLightsOn, deskLightsOff); Serial.println("Adding switches upnp broadcast responder"); upnpBroadcastResponder.addDevice(*basement); upnpBroadcastResponder.addDevice(*garage); upnpBroadcastResponder.addDevice(*bench); upnpBroadcastResponder.addDevice(*desk); } } void loop() { if (wifiConnected) { upnpBroadcastResponder.serverLoop(); garage->serverLoop(); basement->serverLoop(); bench->serverLoop(); desk->serverLoop(); } } void basementLightsOn() { Serial.print("Switch 1 turn ON ..."); digitalWrite(LED4, HIGH); } void basementLightsOff() { Serial.print("Switch 1 turn OFF ..."); digitalWrite(LED4, LOW); } void garageLightsOn() { Serial.print("Switch 2 turn ON ..."); digitalWrite(LED5, HIGH); } void garageLightsOff() { Serial.print("Switch 2 turn OFF ..."); digitalWrite(LED5, LOW); } void benchLightsOn() { Serial.print("Switch 14 turn ON ..."); digitalWrite(LED14, HIGH); } void benchLightsOff() { Serial.print("Switch 14 turn OFF ..."); digitalWrite(LED14, LOW); } void deskLightsOn() { Serial.print("Switch 12 turn ON ..."); digitalWrite(LED12, HIGH); } void deskLightsOff() { Serial.print("Switch 12 turn OFF ..."); digitalWrite(LED12, LOW); } // connect to wifi – returns true if successful or false if not boolean connectWifi() { boolean state = true; int i = 0; WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.println(""); Serial.println("Connecting to WiFi..."); // Wait for connection Serial.print("Connecting ..."); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (i > 10) { state = false; break; } i++; } if (state) { Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } else { Serial.println(""); Serial.println("Connection failed."); } return state; }
|