// Define Blynk print to Serial
#define BLYNK_PRINT Serial
// Define Blynk template ID
#define BLYNK_TEMPLATE_ID "TMPL6CJwjMPS0"
// Define Blynk template name
#define BLYNK_TEMPLATE_NAME "CS Rakha Argya Zahran IOT9"
// Define Blynk auth token
#define BLYNK_AUTH_TOKEN "HW5qkrbrz_myFamlygcqgLgOOoq5pbA4"
// Include necessary libraries
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
// Define auth array
char auth[] = BLYNK_AUTH_TOKEN;
// Define SSID array
char ssid[] = "Wokwi-GUEST";
// Define pass array
char pass[] = "";
// Define struct Data
struct Data {
int temperature;
int fanSpeed;
} data;
// Define virtual pins
#define VIRTUAL_PIN_LED V1
#define VIRTUAL_PIN_DATA V2
#define VIRTUAL_PIN_POWER_BTN V3
#define VIRTUAL_PIN_TEMP_BTN V4
#define VIRTUAL_PIN_FAN_SPEED_BTN V5
// Define last temperature and fan speed
int lastTemperature = 25;
int lastFanSpeed = 0;
// Define setup function
void setup()
{
// Start serial communication
Serial.begin(9600);
// Start Blynk
Blynk.begin(auth, ssid, pass);
// Set LED_BUILTIN as output
pinMode(BUILTIN_LED, OUTPUT);
// data.temperature = 25;
// Blynk.virtualWrite(VIRTUAL_PIN_TEMP_BTN, 25);
// Blynk.virtualWrite(VIRTUAL_PIN_DATA, String(data.temperature) + "°C, ");
// data.fanSpeed = 0;
}
// Define loop function
void loop()
{
// Run Blynk
Blynk.run();
}
// Define BLYNK_WRITE for VIRTUAL_PIN_POWER_BTN
BLYNK_WRITE(VIRTUAL_PIN_POWER_BTN)
{
// Define pinValue
int pinValue = param.asInt();
// If pinValue is 1
if (pinValue == 1) {
// Turn on LED_BUILTIN
digitalWrite(LED_BUILTIN, HIGH);
// Print "Power: ON" to Serial
Serial.println("Power: ON");
// Write 1 to VIRTUAL_PIN_LED
Blynk.virtualWrite(VIRTUAL_PIN_LED, 1);
// Set data.temperature to lastTemperature
data.temperature = lastTemperature;
// Set data.fanSpeed to lastFanSpeed
data.fanSpeed = lastFanSpeed;
// Write lastTemperature to VIRTUAL_PIN_TEMP_BTN
Blynk.virtualWrite(VIRTUAL_PIN_TEMP_BTN, lastTemperature);
// Write lastFanSpeed to VIRTUAL_PIN_FAN_SPEED_BTN
Blynk.virtualWrite(VIRTUAL_PIN_FAN_SPEED_BTN, lastFanSpeed);
} else {
// Turn off LED_BUILTIN
digitalWrite(LED_BUILTIN, LOW);
// Print "Power: OFF" to Serial
Serial.println("Power: OFF");
// Write 0 to VIRTUAL_PIN_LED
Blynk.virtualWrite(VIRTUAL_PIN_LED, 0);
// Set lastTemperature to data.temperature
lastTemperature = data.temperature;
// Set lastFanSpeed to data.fanSpeed
lastFanSpeed = data.fanSpeed;
}
}
// Define BLYNK_WRITE for VIRTUAL_PIN_TEMP_BTN
BLYNK_WRITE(VIRTUAL_PIN_TEMP_BTN)
{
// If LED_BUILTIN is HIGH
if (digitalRead(BUILTIN_LED) == HIGH) {
// Define pinValue
int pinValue = param.asInt();
// Set data.temperature to pinValue
data.temperature = pinValue;
// Print "Temperature: " + data.temperature to Serial
Serial.println("Temperature: " + String(data.temperature));
// Write data.temperature + "°C, " + data.fanSpeed to VIRTUAL_PIN_DATA
Blynk.virtualWrite(VIRTUAL_PIN_DATA, String(data.temperature) + "°C, ", String(data.fanSpeed));
}
}
// Define BLYNK_WRITE for VIRTUAL_PIN_FAN_SPEED_BTN
BLYNK_WRITE(VIRTUAL_PIN_FAN_SPEED_BTN)
{
// If LED_BUILTIN is HIGH
if (digitalRead(BUILTIN_LED) == HIGH) {
// Define pinValue
int pinValue = param.asInt();
// Set data.fanSpeed to pinValue
data.fanSpeed = pinValue;
// Print "Fan Speed: " + data.fanSpeed to Serial
Serial.println("Fan Speed: " + String(data.fanSpeed));
// Write data.temperature + "°C, " + data.fanSpeed to VIRTUAL_PIN_DATA
Blynk.virtualWrite(VIRTUAL_PIN_DATA, String(data.temperature) + "°C, ", String(data.fanSpeed));
}
}