// ที่ Wokwi ใช้บอร์ด ESP32 แทน ESP8266 สามารถทำงานได้ปกติ
// ที่ Blynk สร้าง Template โดยเลือกบอร์ด ESP8266
#define BLYNK_TEMPLATE_ID "TMPL6YZRnUCsm"
#define BLYNK_TEMPLATE_NAME "ESP8266 Led Built In"
#define BLYNK_AUTH_TOKEN "IT1vgFlWWCRW3cbYPMba1dC5AwDK0wez"
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#elif defined(ESP32)
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#endif
#define LED_BUILTIN 2
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASS ""
BLYNK_WRITE(V0)
{
int value = param.asInt(); // 0 หรือ 1 จากแอพ
digitalWrite(LED_BUILTIN, value);
}
BLYNK_CONNECTED() {
// เมื่อเชื่อม Blynk สำเร็จ ให้ดึงสถานะจากเซิร์ฟเวอร์ (แอป)
Blynk.syncVirtual(V0);
// หรือถ้าต้องการให้ฮาร์ดแวร์เป็น authority: บังคับอัพเดต UI
// Blynk.virtualWrite(V0, digitalRead(LED_BUILTIN) == LED_ON ? 1 : 0);
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
// ตั้งค่าให้ LED ดับตั้งแต่แรก (consider active-low)
digitalWrite(LED_BUILTIN, LOW);
Serial.begin(9600);
Serial.println();
Serial.println("Connecting to WiFi...");
WiFi.begin(WIFI_SSID, WIFI_PASS);
// รอ WiFi ต่อจนได้ IP
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println();
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// ต่อ Blynk หลัง WiFi พร้อม
Blynk.config(BLYNK_AUTH_TOKEN);
Blynk.connect();
// ถ้าต้องการรอจน Blynk connect ก่อนทำอย่างอื่น (ไม่จำเป็นเสมอไป)
// while (!Blynk.connected()) { delay(100); Serial.print("*"); }
// หลังเชื่อมแล้ว BLYNK_CONNECTED() จะถูกเรียกและ sync จะทำงาน
Serial.println("System ready");
}
void loop() {
Blynk.run();
}