#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6aFfKHIte"
#define BLYNK_TEMPLATE_NAME "Toggle Led"
#define BLYNK_AUTH_TOKEN "C_l4vMR5OCRlwqltBpAvdmEQ58sK2oK7"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
const char* ssid = "Wokwi-GUEST";
const char* password = "";
#define LED1 4
#define LED2 2
#define BUTTON 5
#define LED_1_ON digitalWrite(LED1, HIGH)
#define LED_1_OFF digitalWrite(LED1, LOW)
#define LED_2_ON digitalWrite(LED2, HIGH)
#define LED_2_OFF digitalWrite(LED2, LOW)
volatile bool buttonPressedFlag = false;
void taskButton(void *pvParameters){
bool lastState = HIGH;
bool reading;
while(1){
reading = digitalRead(BUTTON);
if(reading != lastState){
vTaskDelay(50/portTICK_PERIOD_MS);
reading = digitalRead(BUTTON);
if(reading == LOW && lastState == HIGH){
buttonPressedFlag = !buttonPressedFlag;
}
}
lastState = reading;
vTaskDelay(10/portTICK_PERIOD_MS);
}
}
void taskLED(void *pvParameters){
bool ledState = false;
while(1){
if(buttonPressedFlag){
ledState = !ledState;
if(ledState){
LED_1_ON;
LED_2_OFF;
}else{
LED_1_OFF;
LED_2_ON;
}
vTaskDelay(1000/portTICK_PERIOD_MS);
}else{
LED_1_OFF;
LED_2_OFF;
vTaskDelay(50/portTICK_PERIOD_MS);
}
}
}
void setup(){
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(BUTTON, INPUT_PULLUP);
Serial.begin(115200);
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
while (WiFi.status() != WL_CONNECTED) {
vTaskDelay(50/portTICK_PERIOD_MS);
Serial.print(".");
}
Serial.println("\n Connected to WiFi");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
xTaskCreate(taskButton, "Button Task", 2048, NULL, 1, NULL);
xTaskCreate(taskLED, "LED Task", 2048, NULL, 1, NULL);
}
void loop(){
Blynk.run();
}