Home automation com AFSmartHome E Alexa

home automation

Já escrevi dois outros artigos, um deles falando sobre a biblioteca fauxmo e a outra utilizando o firmware Tasmota. Apesar da extrema simplicidade na implementação do firmware Tasmota, ele não é tão flexível, já que não podemos adicionar rotinas dentro das funções de callback. Mas há outra ótima opção, que vale inclusive referenciar uma placa ideal para a biblioteca ideal. Vamos ver como fazer home automation com AFSmartHome e Alexa, em um setup de 3 minutos!

Qual a melhor biblioteca para configurar Alexa?

O “melhor” é relativo, mas a resposta mais provável é que a melhor biblioteca é a que funciona. Mas decidir entre as que funcionam pode não ser uma tarefa tão rápida, por isso vou relatar minhas experiências com 3 principais.

A primeira vez que fiz um dispositivo rodar com Alexa não foi uma das tarefas mais simples. Rodei um emulador no Raspberry sem propósito algum; a placa não era encontrada pela Alexa e demorei um bocado para descobrir um procedimento que pudesse ser repetido. Mas como isso já faz um tempo, certamente a biblioteca fauxmo deve ter melhorado, apesar de que agora não me parece mais interessante, principalmente por causa das duas bibliotecas que cito a seguir.

A segunda vez que resolvi mexer com Alexa, queria algo que me fizesse sofrer menos. Daí encontrei em minhas pesquisas algo que eu não dava atenção – um firmware pronto pra uso. Nunca gostei disso por diversas razões, das quais segurança é uma delas, mas cada dia que passa me sinto mais preguiçoso e não custava nada experimentar algo que só precisava ser gravado. Daí o artigo do primeiro parágrafo, que foi uma grata surpresa, considerando que o firmware oferece inclusive a possibilidade de usar MQTT. Mas há vezes que queremos implementar alguma rotina; gravar um arquivo de log no sistema de arquivos ou algo do tipo. Bem, nesse caso a biblioteca mais adequada talvez seja a espalexa, que está disponível pelo repositório oficial do Arduino, mas também pode ser pega diretamente no github. E é dessa que trataremos nesse artigo.

Instalar a biblioteca ESPAlexa

Uma coisa é certa; você iniciará seu projeto de home automation em menos de 5 minutos. Abra a IDE do Arduino ou a aba do PlatformIO em sua IDE de preferência. Recomendo o VSCode. Procure por espalexa e instale-a.

Peguei um sketch dos exemplos e só adicionei as credenciais e uma cópia de um dos callbacks. No callback só tive que passar o pino digital a escrever. Não tem como ser mais fácil! Apenas remova o include do credentials.h ou crie um contendo o SSID e senha. O código que utilizei ficou assim:

#include <Arduino.h>
/*
 * This is a basic example on how to use Espalexa and its device declaration methods.
 */
#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
#include <Espalexa.h>

#include "credentials.h"
// prototypes
boolean connectWifi();

//callback functions
void firstLightChanged(uint8_t brightness);
void secondLightChanged(uint8_t brightness);
void alarmOne(uint8_t brightness); //TX
void alarmTwo(uint8_t brightness); //RX

boolean wifiConnected = false;

Espalexa espalexa;

EspalexaDevice *device3; //this is optional

void setup()
{

    for (uint8_t i=0;i<4;i++){
        pinMode(i,OUTPUT);
    }

    //Serial.begin(115200);
    // Initialise wifi connection
    wifiConnected = connectWifi();

    if (wifiConnected)
    {

        // Define your devices here.
        espalexa.addDevice("computador", firstLightChanged);       //simplest definition, default state off
        espalexa.addDevice("monitor", secondLightChanged, 255); //third parameter is beginning state (here fully on)

        device3 = new EspalexaDevice("alerta 1", alarmOne); //you can also create the Device objects yourself like here
        espalexa.addDevice(device3);                                //and then add them
        device3->setValue(0);                                     //this allows you to e.g. update their state value at any time!

        espalexa.addDevice("alerta 2", alarmTwo);

        espalexa.begin();
    }
    else
    {
        while (1)
        {
            //Serial.println("Cannot connect to WiFi. Please check data and reset the ESP.");
            delay(2500);
        }
    }
}

void loop()
{
    espalexa.loop();
    delay(1);
}

//our callback functions
void firstLightChanged(uint8_t brightness)
{
    digitalWrite(0,brightness);

}

void secondLightChanged(uint8_t brightness)
{
    digitalWrite(2,brightness);
}

void alarmOne(uint8_t brightness)
{
    digitalWrite(1,brightness);
}

void alarmTwo(uint8_t brightness)
{
    digitalWrite(3,brightness);
}

// 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, PASSWD);
    //Serial.println("");
    //Serial.println("Connecting to WiFi");

    // Wait for connection
    //Serial.print("Connecting...");
    while (WiFi.status() != WL_CONNECTED)
    {
        delay(500);
        //Serial.print(".");
        if (i > 20)
        {
            state = false;
            break;
        }
        i++;
    }
    return state;
}

É só gravar, subir o firmware e dizer: “Alexa, procurar dispositivos”. Aqui os 4 dispositivos do sketch foram achados rapidamente.

Também fiz uso dos pinos TX e RX do ESP8266 de forma a ter mais duas saídas. No vídeo eu mostro tudo em detalhes, confira clicando aqui.

No vídeo mostrei a placa da AFEletronica, que você pode encontrar no site deles. Também usei o osciloscópio digital DSO138 da Autocore que é uma ótima ferramenta para, entre outros, esse tipo de análise. O Osciloscópio você encontra na loja virtual.