#define BLYNK_TEMPLATE_ID "TMPL6iIdVKLAa"
#define BLYNK_TEMPLATE_NAME "Led Controller"
#define BLYNK_AUTH_TOKEN "RBbZzea0vIovW2al0B_5xQfoYkLdz3-F"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// ===== LED CONFIG =====
int ledPins[10] = {23,22,21,19,18,5,17,16,4,2};
bool ledState[10] = {0};
// ===== ĐẾM LED =====
int countLedOn() {
int count = 0;
for (int i = 0; i < 10; i++) {
if (ledState[i]) count++;
}
return count;
}
// ===== UPDATE COUNT =====
void updateLedCount() {
int count = countLedOn();
Blynk.virtualWrite(V20, count);
Serial.print("LED ON: ");
Serial.println(count);
}
// ===== SYNC TỪ HARDWARE → BLYNK =====
void syncHardwareToBlynk() {
for (int i = 0; i < 10; i++) {
int state = digitalRead(ledPins[i]); // đọc trạng thái thực tế
ledState[i] = state;
Blynk.virtualWrite(i, state); // cập nhật app
}
updateLedCount();
}
// ===== CALLBACK KHI CONNECT =====
BLYNK_CONNECTED() {
syncHardwareToBlynk();
}
// ===== MACRO GIẢM LẶP CODE =====
#define BLYNK_LED_HANDLER(vpin, index) \
BLYNK_WRITE(vpin) { \
int s = param.asInt(); \
digitalWrite(ledPins[index], s); \
ledState[index] = s; \
updateLedCount(); \
}
// ===== CONTROL TỪNG LED =====
BLYNK_LED_HANDLER(V0, 0)
BLYNK_LED_HANDLER(V1, 1)
BLYNK_LED_HANDLER(V2, 2)
BLYNK_LED_HANDLER(V3, 3)
BLYNK_LED_HANDLER(V4, 4)
BLYNK_LED_HANDLER(V5, 5)
BLYNK_LED_HANDLER(V6, 6)
BLYNK_LED_HANDLER(V7, 7)
BLYNK_LED_HANDLER(V8, 8)
BLYNK_LED_HANDLER(V9, 9)
// ===== ALL LED =====
BLYNK_WRITE(V10) {
int state = param.asInt();
for (int i = 0; i < 10; i++) {
digitalWrite(ledPins[i], state);
ledState[i] = state;
Blynk.virtualWrite(i, state); // sync lại từng nút
}
updateLedCount();
}
// ===== SETUP =====
void setup() {
Serial.begin(115200);
for (int i = 0; i < 10; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // trạng thái ban đầu
}
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
}
// ===== LOOP =====
void loop() {
Blynk.run();
}