Amazon Alexa Wemos D1, ESP8266 und SonOff (Itead)

Mehr
20 Mär 2017 00:24 - 20 Mär 2017 00:26 #147 von Helmut
Helmut erstellte das Thema Amazon Alexa Wemos D1, ESP8266 und SonOff (Itead)
Nach dem Flashen Alexa Geräte suchen lassen.
Die Worte "Stehlampe" sind die Alexa Aufrufe, also mit "Alexa schalte Stehlampe EIN " sollte die Stehlampe EIN gehen
Wemos D1 als Belkin Gerät zum Schalten mit Amazon Echo mit serielle Ausgabe:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>
#include <functional>
#include "switch.h"
#include "UpnpBroadcastResponder.h"
#include "CallbackFunction.h"

// prototypes
boolean connectWifi();

//on/off callbacks 
//- Wintergarten
//- Essen
//- Küche
//- Wohnen
//- Schlafen
//- Wandleuchten
//- Anrichte


void WintergartenLightsOn();
void WintergartenLightsOff();

void EssenLightsOn();
void EssenLightsOff();

void KuecheLightsOn();
void KuecheLightsOff();

void WohnenLightsOn();
void WohnenLightsOff();

void SchlafenOn();
void SchlafenOff();

void WandleuchtenLightsOn();
void WandleuchtenLightsOff();

void AnrichteOn();
void AnrichteOff();
// Change this before you flash
const char* ssid = "SSID";
const char* password = "passwort";

boolean wifiConnected = false;

UpnpBroadcastResponder upnpBroadcastResponder;

Switch *Wintergarten = NULL;
Switch *Essen = NULL;
Switch *Kueche = NULL;
Switch *Wohnen = NULL;
Switch *Schlafen = NULL;
Switch *Wandleuchten = NULL;
Switch *Anrichte = NULL;

void setup()
{
  Serial.begin(115200);
   
  // 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
    Wintergarten = new Switch("Wintergarten Licht", 80, WintergartenLightsOn, WintergartenLightsOff);
    Essen = new Switch("Essen Licht", 81, EssenLightsOn, EssenLightsOff);
    Kueche = new Switch("Kueche Licht", 82, KuecheLightsOn, KuecheLightsOff);
    Wohnen = new Switch("Wohnen Licht", 83, WohnenLightsOn, WohnenLightsOff);
    Schlafen = new Switch("Schlafen Licht", 84, SchlafenLightsOn, SchlafenLightsOff);
    Wandleuchten = new Switch("Wandleuchten Licht", 85, WandleuchtenLightsOn, WandleuchtenLightsOff);
    Anrichte = new Switch("Anrichte Licht", 86, AnrichteLightsOn, AnrichteLightsOff);
    //Wohnen = new Switch("Wohnen Licht", 87, WohnenLightsOn, WohnenLightsOff); 
            
    Serial.println("Adding switches upnp broadcast responder");
    upnpBroadcastResponder.addDevice(*Wintergarten);
    upnpBroadcastResponder.addDevice(*Essen);
    upnpBroadcastResponder.addDevice(*Kueche);
    upnpBroadcastResponder.addDevice(*Wohnen);
    upnpBroadcastResponder.addDevice(*Schlafen);  
    upnpBroadcastResponder.addDevice(*Wandleuchten);
    upnpBroadcastResponder.addDevice(*Anrichte);  
  }
}
 
void loop()
{
	 if(wifiConnected){
      upnpBroadcastResponder.serverLoop();      
      Essen->serverLoop();
      Wintergarten->serverLoop();
      Kueche->serverLoop();
      Wohnen->serverLoop();      
      Schlafen->serverLoop();
      Wandleuchten->serverLoop();      
      Anrichte->serverLoop();      
	 }
}

void WintergartenLightsOn() {
    Serial.print("Wintergarten Licht geht EIN ...");
}

void WintergartenLightsOff() {
    Serial.print("Wintergarten Licht geht AUS ...");
}

void EssenLightsOn() {
    Serial.print("Essen Licht geht EIN ...");
}

void EssenLightsOff() {
  Serial.print("Essen Licht geht AUS ...");
}
void KuecheLightsOn() {
    Serial.print("Kuechen Licht geht EIN ...");
}

void KuecheLightsOff() {
    Serial.print("Kuechen Licht geht AUS ...");
}

void WohnenLightsOn() {
    Serial.print("Wohnen Licht geht EIN ...");
}

void WohnenLightsOff() {
  Serial.print("Wohnen Licht geht AUS ...");
}

void SchlafenLightsOn() {
    Serial.print("Schlafen Licht geht EIN ...");
}

void SchlafenLightsOff() {
  Serial.print("Schlafen Licht geht AUS ...");
}
void WandleuchtenLightsOn() {
    Serial.print("Wandleuchten Licht geht EIN ...");
}

void WandleuchtenLightsOff() {
  Serial.print("Wandleuchten Licht geht AUS ...");
}

void AnrichteLightsOn() {
    Serial.print("Anrichte Licht geht EIN ...");
}

void AnrichteLightsOff() {
  Serial.print("Anrichte Licht geht AUS ...");
}

// 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;
}

Ein ähnliches Programm für das Itead SonOff WiFiRelais, so kann man mit ca 7 Euro schon Alexa als Smarthome Gerät einsetzen, Taster auch in Funktion, LED leuchtet noch beim Starten, müßte man noch ändern, wieder nach dem Flashen Alexa Geräte suchen lassen:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <WiFiUdp.h>
#include <functional>
#include "switch.h"
#include "UpnpBroadcastResponder.h"
#include "CallbackFunction.h"

// prototypes
boolean connectWifi();

//on/off callbacks 

//- Stehlampe


void StehlampeLightsOn();
void StehlampeLightsOff();


// Change this before you flash
const char* ssid = "SSID";
const char* password = "passwort";
// Wemos blaue LED ist auf GPIO 2
// im SonOff ist LED auf GPIO13
// im SonOff ist Relais auf GPIO 12
// im SonOff ist LED auf GPIO 0
const int ledPin = 13;
const int Relais = 12;
const int Taster = 0;
boolean wifiConnected = false;
boolean val = 0;        // SchaltZustand
UpnpBroadcastResponder upnpBroadcastResponder;

Switch *Stehlampe = NULL;

void setup()
{
  Serial.begin(115200);
  // initialize the digital pin as an output.
  pinMode(ledPin, OUTPUT);   
  pinMode(Relais, OUTPUT); 
  pinMode(Taster, INPUT_PULLUP);
  // 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

    Stehlampe = new Switch("Stehlampe", 81, StehlampeLightsOn, StehlampeLightsOff);

    Serial.println("Adding switches upnp broadcast responder");

    upnpBroadcastResponder.addDevice(*Stehlampe);
          
  }
}
 
void loop()
 // --------------------------------- Taster ---------------------------------------------------------- 
{
  if (!digitalRead(Taster)) // Wenn Taster betätigt
  {
    delay(50);              // Entprellung 
    if (!digitalRead(Taster))  //immer noch betätigt? Noch mal prüfen
    {
      val = !val;           // Umschalten
      digitalWrite(Relais, val);
      digitalWrite(ledPin, !val);     
     
      while (!digitalRead(Taster)); // Warten bis der Taster losgelassen wird
    }
  }

// ---------------------------------WLAN-------------------------------------------------------

	 if(wifiConnected){
      upnpBroadcastResponder.serverLoop();      
      Stehlampe->serverLoop();
         
	 }
}


void StehlampeLightsOn() {
   Serial.print("Stehlampe geht EIN ...");
   digitalWrite(ledPin, LOW); 
   digitalWrite(Relais, HIGH);  
}

void StehlampeLightsOff() {
  Serial.print("Stehlampe geht AUS ...");
  digitalWrite(ledPin, HIGH);
  digitalWrite(Relais, 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;
}
Gruß Helmut
Letzte Änderung: 20 Mär 2017 00:26 von Helmut.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Powered by Kunena Forum