// ===== Preprocessor Directives =====
#define BLYNK_TEMPLATE_ID "TMPL6o-IG2yyg"
#define BLYNK_TEMPLATE_NAME "IoT Temperature"
#define BLYNK_AUTH_TOKEN "6vHgD1naSz1UKKONl7xIYYwDgdjqgtMr"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
// ===== กำหนดค่าของ Microcontroller =====
#define DHTPIN 13
#define DHTTYPE DHT22
#define LED1_PIN 2
#define LED2_PIN 5
#define TEMP_THRESHOLD 30.0
#define VOLTAGE_PIN 34 // ขา ADC เชื่อมต่อ Potentiometer
// WiFi สำหรับ Wokwi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
// ===== ฟังก์ชันวัดแรงดันไฟฟ้าจาก Potentiometer =====
void measureVoltage() {
// อ่านค่า ADC จาก Potentiometer ที่ขา D34
int rawValue = analogRead(VOLTAGE_PIN);
// แปลงค่า ADC (0-4095) เป็นแรงดัน (0-3.3V)
float voltage = (rawValue / 4095.0) * 3.3;
Serial.println("=============================");
Serial.println(" ผลการวัดแรงดันไฟฟ้า");
Serial.println(" (จาก Potentiometer)");
Serial.println("=============================");
Serial.print("ADC Raw Value : ");
Serial.println(rawValue);
Serial.print("แรงดันที่อ่านได้ : ");
Serial.print(voltage, 2);
Serial.println(" V");
Serial.println("แรงดันจ่าย ESP32 : 3.30 V (3.3V Rail)");
Serial.println("แรงดันจาก USB : 5.00 V (5V Rail)");
Serial.println("=============================");
Serial.println("หมุน Potentiometer เพื่อ");
Serial.println("ปรับค่าแรงดัน 0.00-3.30V");
Serial.println("=============================\n");
}
// ===== รับคำสั่งจาก Blynk Dashboard (Switch LED2) =====
BLYNK_WRITE(V1) {
int val = param.asInt();
if (val == 1) {
digitalWrite(LED2_PIN, HIGH);
Serial.println("LED2: ติด ✓");
} else {
digitalWrite(LED2_PIN, LOW);
Serial.println("LED2: ดับ ✓");
}
}
// ===== ฟังก์ชันอ่านและส่งค่าอุณหภูมิ =====
void sendTemperature() {
float temp = dht.readTemperature();
if (isnan(temp)) {
Serial.println("อ่านเซนเซอร์ไม่ได้!");
return;
}
Serial.println("-----------------------------");
Serial.print("อุณหภูมิ : ");
Serial.print(temp, 2);
Serial.println(" °C");
// ส่งค่าอุณหภูมิไป Blynk (V0)
Blynk.virtualWrite(V0, temp);
// เงื่อนไข LED1
if (temp > TEMP_THRESHOLD) {
digitalWrite(LED1_PIN, HIGH);
Blynk.virtualWrite(V2, "LED1: ติด (อุณหภูมิ > 30°C)");
Serial.println("LED1 : ติด (อุณหภูมิสูงกว่า 30°C)");
} else {
digitalWrite(LED1_PIN, LOW);
Blynk.virtualWrite(V2, "LED1: ดับ (อุณหภูมิปกติ)");
Serial.println("LED1 : ดับ (อุณหภูมิปกติ)");
}
Serial.println("-----------------------------");
}
// ===== Setup =====
void setup() {
Serial.begin(115200);
pinMode(LED1_PIN, OUTPUT);
pinMode(LED2_PIN, OUTPUT);
digitalWrite(LED1_PIN, LOW);
digitalWrite(LED2_PIN, LOW);
dht.begin();
// แสดงข้อมูลระบบตอนเริ่มต้น
Serial.println("\n=============================");
Serial.println(" ระบบ IoT เริ่มทำงาน");
Serial.println("=============================");
Serial.println("Microcontroller : ESP32");
Serial.println("แรงดันจ่าย : 3.3V / 5V (USB)");
Serial.println("เซนเซอร์ : DHT22");
Serial.println("LED1 ขา : GPIO2");
Serial.println("LED2 ขา : GPIO5");
Serial.println("Potentiometer : GPIO34");
Serial.println("=============================\n");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, password);
// วัดแรงดันครั้งแรกตอนเริ่ม
measureVoltage();
// ส่งค่าอุณหภูมิทุก 2 วินาที
timer.setInterval(2000L, sendTemperature);
// วัดแรงดันทุก 10 วินาที
timer.setInterval(10000L, measureVoltage);
}
// ===== Loop =====
void loop() {
Blynk.run();
timer.run();
}