Hola compañeros, les comparto mi código con comentarios para comprender que hace cada parte del programa.
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <DHT.h>
#include <BlynkSimpleEsp32.h>
//Con define podemos asignarle un nombre al puerto para centralizar aquí la asignación de puertos y cambiar el número de puerto en caso de cambios... En nombre asignado aquí aparecerá en la linea de código abajo.
#define INTPIN 23 //Pin GPIO de INTERRUPCION, para conectar el pulsador.... conectado a tierra.
#define LED 1 // Pin GPIO de salida, se conectará el LED activado desde internet, la APP.
#define DHTPIN 22 // Pin GPIO para conectar el DHT, sensor de temp y humedad.
char token[]="TSXXXXXXxxxxXXXXXxXX"; // Clave suministrada por la APP para ser accesada desde el microprocesador.
DHT dht(DHTPIN,DHT22); //DHT22 es un tipo de sensor... No es un puerto.
BlynkTimer timer;
WidgetLED led1(V1); //Para activar el LED en la APP... usando el transportador V1. El V1 también debe asignarse en la APP.
//Inicializamos la variable global, inicializamos las banderas. Estas banderas las estará observando periódicamente el programa (en el loop) para hacer algo en caso que haya cambiado el estado de dicha bandera.
bool ext_intFlag = 0;
bool pinChanged = 0;
//Función que se ejecutará cada vez que llegue un dato a través de cable virtual V2
BLYNK_WRITE(V2){
int V2Data = param.asInt();
//.asString
//.asDouble
Serial.print("Valor de V2 = ");
Serial.println(V2Data);
digitalWrite(1,V2Data);//Puerto GPIO 1, cable virtual V2 en la APP.
}
void sendSensor(){
float t = dht.readTemperature();
float h = dht.readHumidity();
Blynk.virtualWrite(V5,h);
Blynk.virtualWrite(V6,t);
}
//Esta función se ejecutará cada vez que haya una interrupción externa.
void checkPin(){
ext_intFlag = !ext_intFlag;
pinChanged = true;
}
void setup() {
Serial.begin(115200);
pinMode(INTPIN,INPUT_PULLUP); //Pin para conectar el pulsador.... conectado a tierra.
pinMode(LED,OUTPUT);
attachInterrupt(digitalPinToInterrupt(INTPIN),checkPin,RISING); //Para activar la interrupción desde el pulsador.
digitalWrite(LED,LOW); //Aseguramos que el LED inicia apagado.
dht.begin();
timer.setInterval(2000L,sendSensor); //Cada 2000 milisegundos se va a leer el sensor DHT.
Blynk.begin(token,"Nombre_mi_Wifi","Clave_de_mi_Wifi");
}
//A continuación vamos a estar verificando si el LED virtual de la APP ha sido modificado.
void loop() {
Blynk.run();
timer.run();
if(pinChanged){
if(ext_intFlag){
led1.on();
}
else{
led1.off();
}
pinChanged=0;
}
}