Hai acquistato o vorresti acquistare un Echo della famiglia Amazon…? E desideri che la tua casa si trasformi in una SmartHome completamente personalizzata…?

In commercio esistono già parecchi dispositivi che potreste acquistare tra Sonoff , Presa Intelligente , Lampadina LED 60W , ma se scegliamo una o tutte queste soluzioni a volte dovremo giostrarci su diverse APP e per un buon prodotto dovremo sborsare molti soldi altimetri ci ritroveremo con lampadine di scarsa luminosità o prese che sopportino carachiri poco efficienti e con  rischio che si brucino.

Grazie alla nostra guida sarai in grado di progettare in completa autonomia la tua casa domotica..

Un dispositivo che può offrirci una assidua gamma di soluzioni e NodeMCU, una scheda di sviluppo programmabile con Arduino con una WIFI Interna ESP8266 che ci permetterà di comunicare con i nostri dispositivi Echo e non solo.



Ma prima di cominciare avrai bisogno di procurarti alcuni componenti sia HARDWARE che SOFTWARE.

HARDWARE

Un Echo Dot (3ª generazione) oppure un Echo Plus (2ª generazione) dove dovrai istallare Amazon Alexa Skills (Sinric)Un NodeMCU ESP8266Un Modulo Relé 5V  da 2/4/8 Canali dipende da ciò che vogliate realizzareUn AC 220V Per DC 5V o un vecchio carica batterie da cellulare (per alimentare il nostro dispositivo)SOFTWAREArduino IDE da scaricare sul pc per programmare il NodeMCUSinric.com dove dovrai registrarti e creare delle chiavi (API) di accesso personali che vedremo più avanti.E poi accedere a sua volta su Amazon Alexa Skills (Sinric)INIZIAMOPer interfacciare NodeMCU e Amazon Alexa, useremo un Skills Amazon chiamata Sinric

    • Prima di tutto, è necessario creare un account in Sinric  dal pc . “Sinric è un sito Web che consente di collegare le schede di sviluppo come RaspberryPi, ESP8226, ESP32 o Arduino con Amazon Alexa”.
    • Una volta creato l’account, accedi ad esso. Quindi fare clic sul pulsante ( Add ) della sessione ( Smart Home Device) che ti permetterà di aggiungere un dispositivo Smart Home potrai scrivere un nome vocale che il tuo Echo Dot riconoscerà al momento della sua pronuncia, potrai in oltre scrivere una breve descrizione per il suo utilizzo in modo che gli utenti che interagiscano con esso sappiano di cosa si tratta.
    • Sentitevi liberi di creare tutti i dispositivi che volete controllare. Nel mio caso, ho creato 4 ( Smart Home Device ). ad ognuno di esso e associato un ( Device ID : 5xxxxxxxxxxxxxxxxxxxxxxx ) unico, che vedremo più avanti come utilizzarlo.

Per questo progetto, useremo il modulo wifi NodeMCU ESP8266.

      • Quindi per programmare la scheda useremo Arduino IDE  poi sarà necessario scaricare alcune schede aggiuntive per interfacciare la nostra scheda al software di Arduino IDE.
      • Ho creato un video dove vi mostro come farlo con pochi semplici passaggi
    Programmare NodeMCU ESP8266 con Arduino IDE

Tornando al nostro progetto ora dovrai:

    • Scarica il codice di programmazione che dovrai a sua volta caricare sulla scheda ( NodeMCU ESP8266 ) ti ricordo che e un codice di esempio quindi dovremo completarlo per poi utilizzarlo; troverai il codice di programmazione sul sito di Github creato da kakopappa presso questo          link =”  https://github.com/kakopappa/sinric  ” dopo averlo scaricato ed estratto il file dal formato zip al suo interno troverai diverse soluzioni che potrai creare; ma noi per questo progetto ci soffermeremo sulla cartella chiamata  “arduino_examples”  e a sua volta aprire il codice denominato “switch_example

    • Ora apri  l’esempio switch_example.ino dal file scaricato

    Ora non ci resterà che effettuare le seguenti modifiche nel codice.

    Trova nel codice la stringa

    #define MyApiKey ""

    E inserisci tra le virgolette il codice API fornito dopo esserti registrato su Sinric

     

    Ora individua la stringa

    #define MySSID ""

    Inserisci qui il tuo nome di rete wifi (sensibile al maiuscolo / minuscolo), il tuo dispositivo Amazon echodovrebbe trovarsi nella stessa rete.
    Continua con individuare la stringa

    #define MyWifiPassword ""

    per poi Inserire la password della rete wifi (sensibile al maiuscolo / minuscolo).

    E ora individua la stringa

    void turnOn(String deviceId)
    {
      if (deviceId == "xxxxxxxxxx") // Device ID of device 1
      { 
        Serial.print("Turnevice id: ");
        Serial.println(deviceId);
        digitalWrite(device1, HIGH);
      }

    Ed inserivi Device ID creato precedentemente su Sinric e continua ad oltranza con gli altri dispositivi creati; fai attenzione tra

    void turnOn(String deviceId)
     void turnOff(String deviceId)

    altrimenti non funzioneranno ( ovvio che sia i “Device ID” ON che OFF devono essere identici )

    Ora non resta che indicare al nostro codice i PIN di riferimento che assegneremo al modulo wifi NodeMCU ESP8266 ( per poi effettuare i collegamenti che vi illustrerò più avanti ) per semplificare il processo, copia e incolla l’intero codice e poi effettuate le modifiche personali sopra indicate

    /*
    Version 0.3 - March 06 2018
    */
    int device1 = 5;
    int device2 = 4;
    int device3 = 0;
    int device4 = 2;
    #include <Arduino.h>
    #include <ESP8266WiFi.h>
    #include <ESP8266WiFiMulti.h>
    #include <WebSocketsClient.h> // https://github.com/kakopappa/sinric/wiki/How-to-add-dependency-libraries
    #include <ArduinoJson.h> // https://github.com/kakopappa/sinric/wiki/How-to-add-dependency-libraries
    #include <StreamString.h>
    
    ESP8266WiFiMulti WiFiMulti;
    WebSocketsClient webSocket;
    WiFiClient client;
    
    #define MyApiKey "dxxxxxxxxxxxxxxxxxx" // TODO: Change to your sinric API Key. Your API Key is displayed on sinric.com dashboard
    #define MySSID " qui il nome della rete wifi " // TODO: Change to your Wifi network SSID
    #define MyWifiPassword " qui della password della wifi  " // TODO: Change to your Wifi network password
    
    #define HEARTBEAT_INTERVAL 300000 // 5 Minutes
    
    uint64_t heartbeatTimestamp = 0;
    bool isConnected = false;
    
    void setPowerStateOnServer(String deviceId, String value);
    void setTargetTemperatureOnServer(String deviceId, String value, String scale);
    
    // deviceId è l'ID assegnato al tuo smart-home-device in sinric.com dashboard. Copia dal dashboard e incollalo qui
    
    void turnOn(String deviceId) {
    if (deviceId == "5xxxxxxxxxxxxxxxxx1") // Device ID of first device
    {
    Serial.print("Turn on device id: ");
    Serial.println(deviceId);
    digitalWrite(device1, HIGH);
    }
    else if (deviceId == "5xxxxxxxxxxxxxxxxx2") // Device ID of second device
    {
    Serial.print("Turn on device id: ");
    Serial.println(deviceId);
    digitalWrite(device2, HIGH);
    }
    else {
    Serial.print("Turn on for unknown device id: ");
    Serial.println(deviceId);
    }
    }
    
    void turnOff(String deviceId) {
    if (deviceId == "5xxxxxxxxxxxxxxxxx1") // Device ID of first device
    {
    Serial.print("Turn off Device ID: ");
    Serial.println(deviceId);
    digitalWrite(device1, LOW);
    }
    else if (deviceId == "5xxxxxxxxxxxxxxxxx2") // Device ID of second device
    {
    Serial.print("Turn off Device ID: ");
    Serial.println(deviceId);
    digitalWrite(device2, LOW);
    }
    else {
    Serial.print("Turn off for unknown device id: ");
    Serial.println(deviceId);
    }
    }
    
    void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
    switch (type) {
    case WStype_DISCONNECTED:
    isConnected = false;
    Serial.printf("[WSc] Webservice disconnected from sinric.com!\n");
    break;
    case WStype_CONNECTED: {
    isConnected = true;
    Serial.printf("[WSc] Service connected to sinric.com at url: %s\n", payload);
    Serial.printf("Waiting for commands from sinric.com ...\n");
    }
    break;
    case WStype_TEXT: {
    Serial.printf("[WSc] get text: %s\n", payload);
    // Example payloads
    
    // For Switch or Light device types
    // {"deviceId": xxxx, "action": "setPowerState", value: "ON"} // https://developer.amazon.com/docs/device-apis/alexa-powercontroller.html
    
    // For Light device type
    // Look at the light example in github
    
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.parseObject((char*)payload);
    String deviceId = json ["deviceId"];
    String action = json ["action"];
    
    if (action == "setPowerState") { // Switch or Light
    String value = json ["value"];
    if (value == "ON") {
    turnOn(deviceId);
    } else {
    turnOff(deviceId);
    }
    }
    else if (action == "SetTargetTemperature") {
    String deviceId = json ["deviceId"];
    String action = json ["action"];
    String value = json ["value"];
    }
    else if (action == "test") {
    Serial.println("[WSc] received test command from sinric.com");
    }
    }
    break;
    case WStype_BIN:
    Serial.printf("[WSc] get binary length: %u\n", length);
    break;
    }
    }
    
    void setup() {
    
    pinMode (device1, OUTPUT);
    pinMode (device2, OUTPUT);
    pinMode (device3, OUTPUT);
    pinMode (device4, OUTPUT);
    
    Serial.begin(115200);
    
    WiFiMulti.addAP(MySSID, MyWifiPassword);
    Serial.println();
    Serial.print("Connecting to Wifi: ");
    Serial.println(MySSID);
    
    // Waiting for Wifi connect
    while (WiFiMulti.run() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    }
    if (WiFiMulti.run() == WL_CONNECTED) {
    Serial.println("");
    Serial.print("WiFi connected. ");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
    }
    
    // server address, port and URL
    webSocket.begin("iot.sinric.com", 80, "/");
    
    // event handler
    webSocket.onEvent(webSocketEvent);
    webSocket.setAuthorization("apikey", MyApiKey);
    
    // try again every 5000ms if connection has failed
    webSocket.setReconnectInterval(5000); // If you see 'class WebSocketsClient' has no member named 'setReconnectInterval' error update arduinoWebSockets
    }
    
    void loop() {
    webSocket.loop();
    
    if (isConnected) {
    uint64_t now = millis();
    
    // Send heartbeat in order to avoid disconnections during ISP resetting IPs over night. Thanks @MacSass
    if ((now - heartbeatTimestamp) > HEARTBEAT_INTERVAL) {
    heartbeatTimestamp = now;
    webSocket.sendTXT("H");
    }
    }
    }
    
    // If you are going to use a push button to on/off the switch manually, use this function to update the status on the server
    // so it will reflect on Alexa app.
    // eg: setPowerStateOnServer("deviceid", "ON")
    
    // Call ONLY If status changed. DO NOT CALL THIS IN loop() and overload the server.
    
    void setPowerStateOnServer(String deviceId, String value) {
    DynamicJsonBuffer jsonBuffer;
    JsonObject& root = jsonBuffer.createObject();
    root["deviceId"] = deviceId;
    root["action"] = "setPowerState";
    root["value"] = value;
    StreamString databuf;
    root.printTo(databuf);
    
    webSocket.sendTXT(databuf);
    }
    
    //eg: setPowerStateOnServer("deviceid", "CELSIUS", "25.0")
    
    // Call ONLY If status changed. DO NOT CALL THIS IN loop() and overload the server.
    
    void setTargetTemperatureOnServer(String deviceId, String value, String scale) {
    DynamicJsonBuffer jsonBuffer;
    JsonObject& root = jsonBuffer.createObject();
    root["action"] = "SetTargetTemperature";
    root["deviceId"] = deviceId;
    
    JsonObject& valueObj = root.createNestedObject("value");
    JsonObject& targetSetpoint = valueObj.createNestedObject("targetSetpoint");
    targetSetpoint["value"] = value;
    targetSetpoint["scale"] = scale;
    
    StreamString databuf;
    root.printTo(databuf);
    
    webSocket.sendTXT(databuf);
    }
    

    Una volta concluso seleziona la ( scheda corretta e la porta COM ) sulla sezione strumenti del software di Arduino IDA e carica lo schizzo.

    • Il NodeMCU si connetterà automaticamente alla rete wifi.
      Assicurati che il tuo wifi sia acceso e che il tuo dispositivo Echo sia connesso alla medesima rete wifi.
    • Accedi all’APP Alexa dal tuo smartphone.
    • Vai alla sezione Skills e giochi e cerca l’abilità Sinric e abilitala.
    • Ora cerca i dispositivi o chiedi ad ” Alexa, scopri i dispositivi “
    • Mostrerà il numero di dispositivi disponibili

    ELETTRONICA
    Il circuito è molto semplice, ma fai attenzione mentre colleghi il carico AC al relè.
    Abbassa l’interruttore generale della tua rete domestica prima di aprire qualsiasi centralina o cassetta di derivazione.

    Ora che tutto è stato collegato non ti resterà altro che comandare il tuo Echo.

    Sentiti come Tony Stark; )

    Ti ricordo che solo grazie alle tue condivisioni e donazioni viviamo un sincero abbraccio da www.ciakishow.it

Liked it? Take a second to support Ciaki on Patreon!

I commenti non sono consentiti.