#define BLYNK_TEMPLATE_ID "TMPL6FIf8b1oa"
#define BLYNK_TEMPLATE_NAME "tewgwsb"
#define BLYNK_AUTH_TOKEN "bvekCkco2myGQpdvucWh2yb9yqUa80Tm"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// WiFi
const char* WIFI_SSID = "Wokwi-GUEST";
const char* WIFI_PASS = "";
// OLED
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// Ultrasonic
#define TRIG 14
#define ECHO 33
// RGB
#define RED 27
#define GREEN 26
#define BLUE 25
long duration;
float distance;
void setup() {
Serial.begin(115200);
pinMode(TRIG, OUTPUT);
pinMode(ECHO, INPUT);
pinMode(RED, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(BLUE, OUTPUT);
// ✅ บังคับระบุขา SDA=21, SCL=22 (ค่า default ESP32)
Wire.begin(21, 22);
// ✅ เริ่มต้น OLED ที่ address 0x3C
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Natakorn 15297");
display.display();
delay(2000);
// ✅ เชื่อม WiFi แบบ debug
Serial.print("Connecting to WiFi: ");
Serial.println(WIFI_SSID);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\n✅ WiFi Connected!");
Serial.print("IP Address: ");
Serial.println(WiFi.localIP());
// ✅ เชื่อม Blynk
Blynk.begin(BLYNK_AUTH_TOKEN, WIFI_SSID, WIFI_PASS);
}
void loop() {
Blynk.run();
// Ultrasonic
digitalWrite(TRIG, LOW);
delayMicroseconds(2);
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
duration = pulseIn(ECHO, HIGH);
distance = duration * 0.034 / 2;
// ✅ แสดงผลบน OLED
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.println("Natakorn 15297");
display.setTextSize(2);
display.setCursor(0, 20);
display.print("Dist:");
display.print(distance, 1);
display.println(" cm");
display.display();
// Blynk
Blynk.virtualWrite(V0, distance);
// RGB LED
if (distance < 20) {
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
} else if (distance >= 20 && distance <= 30) {
digitalWrite(RED, HIGH);
digitalWrite(GREEN, HIGH);
digitalWrite(BLUE, HIGH);
delay(200);
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
delay(200);
} else {
digitalWrite(RED, LOW);
digitalWrite(GREEN, LOW);
digitalWrite(BLUE, LOW);
}
delay(100);
}
.