NodeMCU + Alexa (Funciona pero me falta algo)

Hola buenas tardes !!!

Tengo una Sketch que FUNCIONA perfectamente con mi Alexa.
O que necesito es adicionar en el código para que tenga la posibilidad de apagar y prender los focos por un pushbutton en alguna puerta del nodemcu (porque vou poner conmutador de timbre para este uso)
Asi podré prender y apagar las luces por voz (con Alexa) con por los conmutadores

  • Alguin puede ayudarme como puedo add estes botones en mi programación para que se quede integrado a mi sketch de alexa?

Gracias de verdad


#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif

#include <Espalexa.h>

int Fokita = D1;
int Foco = D2;
int Led = D8;

const char* ssid = "xxxx";
const char* password = "xxxxx";

Espalexa alexita;

void FuncionFokita(uint8_t brightness);
void FuncionFoco(uint8_t brightness);

void setup() {
 Serial.begin(115200);
 pinMode(Fokita, OUTPUT);
 pinMode(Foco, OUTPUT);
 pinMode(Led, OUTPUT);
 
 ConectarWifi();
 alexita.addDevice("Foco", FuncionFoco);
 alexita.addDevice("Fokita", FuncionFokita);
 alexita.begin();
}

void loop() {
 ConectarWifi();
 alexita.loop();
 delay(1);
}

void ConectarWifi() {
 if (WiFi.status() != WL_CONNECTED) {
   WiFi.mode(WIFI_STA);
   WiFi.begin(ssid, password);
   Serial.println("");
   Serial.println("Connecting to WiFi");
   
   while (WiFi.status() != WL_CONNECTED) {
     /*digitalWrite(Led, LOW);
     delay(1000);
     digitalWrite(Led, HIGH);*/
     delay(1000);
     Serial.print(".");
   }
   
   Serial.print("Connected to ");
   Serial.println(ssid);
   Serial.print("IP address: ");
   Serial.println(WiFi.localIP());

   digitalWrite(Led, LOW);
   delay(1500);
   digitalWrite(Led, HIGH);
   delay(2000);
   digitalWrite(Led, LOW);

 }
}

void FuncionFoco(uint8_t brightness) {
 Serial.print("Funcion Foco - ");

 if (brightness) {
   digitalWrite(Foco, 1);
   Serial.println(" Encender ");
 }
 else {
   digitalWrite(Foco, 0);
   Serial.println(" Apagar ");
 }
}

void FuncionFokita(uint8_t brightness) {
 Serial.print("Funcion Fokita - ");

 if (brightness) {
   digitalWrite(Fokita, 1);
   Serial.println(" Encender ");
 }
 else {
   digitalWrite(Fokita, 0);
   Serial.println(" Apagar ");
 }
}

Lee el privado que te envié y edita tu post!!

Nadie podría ayudarme?

El IDE trae ejemplos de como leer el esado de un pulsador. Es el ejemplo mas simple de digitalRead(pin)

LEER UN PULSADOR CON ARDUINO

Como ya sabes leer un pin se hace con digitalRead y escribir con digitalWrite.
Crea una función para procesar el estado de los botones y ponla en el loop. Así quedara mas claro el código que escribas.

En el loop:

void loop() {
 ConectarWifi();
 alexita.loop();
 delay(1);

 checkButton();

}

En la funcion checkbutton(), he puesto un delay de 200 para los rebotes del pulsador. No creo que de problemas. El botón 0 se corresponde con el boton flash del nodemcu.
El segundo botón lo puedes agregar en la misma función checkbuttons.
Con esto funcionará.
Si quieres que alexa 'se de cuenta' de que han cambiado el estado de las lamparas, por ejemplo si estas usando la aplicación para el movil. Tienes que meter estas dos lineas dentro del bloque del if cuando haces el digitalWrite:

EspalexaDevice* deviceFoco = espalexa.getDevice(0);
deviceFoco->setValue(!deviceFoco->getValue());

El primer dispositivo es el 0, el segundo el 1 y así...

#define boton1  0

void checkButtons(){

  if(!digitalRead(boton1)){
      delay(200);
      if(!digitalRead(boton1)){
        digitalWrite(rele[0],!digitalRead(rele[0]));
      }
  }
}