// ======= Blynk Defines ======= //
#define BLYNK_TEMPLATE_ID "TMPL26E90YKRa"
#define BLYNK_TEMPLATE_NAME "Controle de Rele"
#define BLYNK_AUTH_TOKEN "NagCE54xIsHL5pWNk_sPVcvEEgXWNfJY"
#define BLYNK_PRINT Serial
// ======= Inclusão das Bibliotecas ======= //
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// ======= WiFi Configuration ======= //
// SSID = nome_rede, pass = Senha da Rede
// Senhas nomeadas com "" são para redes abertas
char ssid[] = "Wokwi-GUEST", pass[] = "";
// ======= Blynk Timer Configuration ======= //
BlynkTimer timer;
// ======= Mapeamento de Hardware ======= //
#define btn1 19
#define btn2 18
#define rele1_pin 23
#define rele2_pin 22
// ======= Mapeamento de Hardware Virtual ======= //
#define v_btn1 V0
#define v_btn2 V1
WidgetLED v_rele1(V2);
WidgetLED v_rele2(V3);
// ======= Blynk Functions ======= //
BLYNK_CONNECTED(){
Blynk.syncVirtual(v_btn1);
Blynk.syncVirtual(v_btn2);
}
BLYNK_WRITE(v_btn1){
rele1_estado = param.asInt();
digitalWrite(rele1_pin, rele1_estado);
}
BLYNK_WRITE(v_btn2){
rele2_estado = param.asInt();
digitalWrite(rele2_pin, rele2_estado);
}
// ======= Variáveis Globais ======= //
bool rele1_estado, rele2_estado,
btn1_f, btn2_f;
char *estados[] = {"Desligado","Ligado"};
void setup() {
Serial.begin(115200); // Inicializa a comunicação serial
// Botões de entrada configurados como PULL UP
pinMode(btn1, INPUT_PULLUP);
pinMode(btn2, INPUT_PULLUP);
// Configurando os relés como saída
pinMode(rele1_pin, OUTPUT);
pinMode(rele2_pin, OUTPUT);
Blynk.begin(auth, ssid, pass); // inicializa e loga no blynk
}
void loop() {
Blynk.run();
timer.run();
controle();
atualiza_led();
}
void controle()
{
if(!digitalRead(btn1)) btn1_f = 0x01;
if(!digitalRead(btn2)) btn2_f = 0x01;
if(digitalRead(btn1) && btn1_f){
btn1_f = 0x00;
controle_rele(1);
Blynk.virtualWrite(v_btn1, rele1_estado);
}
if(digitalRead(btn2) && btn2_f){
btn2_f = 0x00;
controle_rele(2);
Blynk.virtualWrite(v_btn2, rele2_estado);
}
}
void controle_rele(int rele) {
switch(rele)
{
case 1:
rele1_estado = !rele1_estado;
digitalWrite(rele1_pin, rele1_estado);
Serial.print("Estado Relé 1 = ");
Serial.println(estados[rele1_estado]);
break;
case 2:
rele2_estado = !rele2_estado;
digitalWrite(rele2_pin, rele2_estado);
Serial.print("Estado Relé 2 = ");
Serial.println(rele2_estado);
break;
}
}
void atualiza_led()
{
if(rele1_estado) rele1v.on();
else rele1v.off();
if(rele2_estado) rele2v.on();
else rele2v.off();
}