สวัสดีครับนักศึกษาทุกคน ยินดีต้อนรับสู่ Workshop แรกของเรา! วันนี้เราจะไม่เรียนทฤษฎีใหม่ แต่เราจะมา “ประกอบร่าง” ความรู้เดิมให้เป็นชิ้นงานที่ใช้งานได้จริง
โจทย์ของเราวันนี้: เราจะจำลองระบบห้องนอนอัจฉริยะที่มีความสามารถดังนี้:
- Monitor: ดูค่าอุณหภูมิและความชื้นในห้องผ่านมือถือได้ (ใช้ DHT11)
- Control: สั่งเปิด-ปิด “ไฟเพดาน” ผ่านมือถือได้ (ใช้ LED สีแดง แทนหลอดไฟ)
- Automation: ถ้าอากาศร้อนเกิน 30°C ให้ “พัดลม” เปิดเองอัตโนมัติ (ใช้ LED สีน้ำเงิน แทนพัดลม)
1. เตรียมอุปกรณ์และการต่อวงจร
เราจะใช้อุปกรณ์ทั้งหมด 3 ส่วนหลัก ต่อเข้ากับ ESP32 ดังนี้ครับ:
- เซนเซอร์ DHT11 (ขา Data) -> ต่อเข้า GPIO 15
- หลอดไฟ (LED สีแดง) -> ต่อเข้า GPIO 23 (อย่าลืม R 220Ω)
- พัดลม (LED สีน้ำเงิน/เขียว) -> ต่อเข้า GPIO 22 (อย่าลืม R 220Ω)
[Image Suggestion: Diagram of ESP32 connected to DHT11 on pin 15, Red LED on pin 23, Blue LED on pin 22]
2. ตั้งค่า Blynk (Template & Datastream)
ให้เข้าไปที่ blynk.cloud หรือแอป Blynk แล้วตั้งค่าตามนี้:
1. สร้าง Datastream 4 ตัว:
- V0 (Switch): สำหรับปุ่มเปิด-ปิดไฟ (Integer, 0-1)
- V1 (Temp): สำหรับโชว์อุณหภูมิ (Double, 0-50, หน่วย °C)
- V2 (Hum): สำหรับโชว์ความชื้น (Double, 0-100, หน่วย %)
- V3 (Fan Status): สำหรับโชว์สถานะพัดลม (Integer, 0-1) เอาไว้ดูว่าพัดลมทำงานอยู่ไหม
2. สร้าง Dashboard บนมือถือ:
- Button: เชื่อมกับ V0 (Mode: Switch) -> ตั้งชื่อว่า “Light Switch”
- Gauge: เชื่อมกับ V1 -> ตั้งชื่อว่า “Temperature”
- Gauge: เชื่อมกับ V2 -> ตั้งชื่อว่า “Humidity”
- LED / Indicator: เชื่อมกับ V3 -> ตั้งชื่อว่า “Fan Status”
3. เขียนโค้ดควบคุม (The Logic)
โค้ดนี้จะใช้ BlynkTimer ในการอ่านค่าเซนเซอร์และตัดสินใจ (Automation Logic) ทุกๆ 2 วินาที เพื่อไม่ให้ระบบรวนครับ
#define BLYNK_TEMPLATE_ID "TMPLxxxxxx" // **แก้ไขเป็นของตัวเอง**
#define BLYNK_TEMPLATE_NAME "Smart Bedroom"
#define BLYNK_AUTH_TOKEN "YourAuthToken" // **แก้ไขเป็นของตัวเอง**
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include "DHT.h"
// --- ตั้งค่า WiFi ---
char ssid[] = "YOUR_WIFI_NAME";
char pass[] = "YOUR_WIFI_PASS";
// --- ตั้งค่าขาอุปกรณ์ ---
#define DHTPIN 15
#define DHTTYPE DHT11
#define LIGHT_PIN 23 // ไฟเพดาน
#define FAN_PIN 22 // พัดลม
DHT dht(DHTPIN, DHTTYPE);
BlynkTimer timer;
// --- ฟังก์ชันรับคำสั่งเปิด-ปิดไฟจากมือถือ (Manual Control) ---
BLYNK_WRITE(V0) {
int pinValue = param.asInt(); // รับค่า 0 หรือ 1
digitalWrite(LIGHT_PIN, pinValue); // สั่งงาน LED สีแดง
if(pinValue == 1) Serial.println("Light ON");
else Serial.println("Light OFF");
}
// --- ฟังก์ชันอ่านค่าและทำงานอัตโนมัติ (Automation Logic) ---
void myTimerEvent() {
// 1. อ่านค่าจากเซนเซอร์
float h = dht.readHumidity();
float t = dht.readTemperature();
// เช็คว่าอ่านค่าได้จริงไหม
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// 2. ส่งค่าขึ้น Blynk
Blynk.virtualWrite(V1, t); // ส่งอุณหภูมิไป V1
Blynk.virtualWrite(V2, h); // ส่งความชื้นไป V2
Serial.print("Temp: "); Serial.print(t);
Serial.print(" | Hum: "); Serial.println(h);
// 3. ระบบควบคุมพัดลมอัตโนมัติ (Smart Fan Logic)
if (t > 30.0) { // ถ้าร้อนกว่า 30 องศา
digitalWrite(FAN_PIN, HIGH); // เปิดพัดลม (LED น้ำเงิน)
Blynk.virtualWrite(V3, 1); // ส่งสถานะไปบอกแอปว่า "พัดลมทำงาน"
Serial.println("Auto Fan: ON (Too Hot!)");
}
else { // ถ้าเย็นลงแล้ว
digitalWrite(FAN_PIN, LOW); // ปิดพัดลม
Blynk.virtualWrite(V3, 0); // ส่งสถานะไปบอกแอปว่า "พัดลมหยุด"
Serial.println("Auto Fan: OFF");
}
}
void setup() {
Serial.begin(115200);
// กำหนดโหมดขา
pinMode(LIGHT_PIN, OUTPUT);
pinMode(FAN_PIN, OUTPUT);
dht.begin();
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
// ตั้งเวลาให้ฟังก์ชัน myTimerEvent ทำงานทุกๆ 10 วินาที (10000ms)
timer.setInterval(10000L, myTimerEvent);
}
void loop() {
Blynk.run();
timer.run();
}
4. ขั้นตอนการทดสอบ
- Upload Code: ตรวจสอบความถูกต้องของ Template ID และ WiFi ก่อนอัปโหลด
- เปิด Serial Monitor: ดูว่าเชื่อมต่อ WiFi ได้แล้ว และเริ่มอ่านค่า Temp/Hum ได้หรือไม่
- ทดสอบ Manual: กดปุ่ม Light Switch บนมือถือ -> LED สีแดงต้องติด/ดับ ทันที
- ทดสอบ Auto:
- ลองเอาไฟแช็ค (ลนห่างๆ) หรือไดร์เป่าผม เป่าที่ DHT11 ให้อุณหภูมิขึ้นเกิน 30°C
- ผลลัพธ์: LED สีน้ำเงิน (พัดลม) ต้องติดเอง และในแอปช่อง Fan Status ต้องสว่างขึ้น
- ปล่อยให้เย็นลงต่ำกว่า 30°C -> พัดลมต้องดับเอง
5. โจทย์ท้าทาย (Challenge) สำหรับนักศึกษา
เพื่อให้ได้คะแนนเต็มใน Workshop นี้ ให้นักศึกษาเพิ่มเติมฟีเจอร์ดังนี้:
- เพิ่มปุ่ม “Auto/Manual Mode” (V4):
- ถ้ากดเปิดโหมด Auto -> ให้พัดลมทำงานตามอุณหภูมิ (เหมือนโค้ดข้างบน)
- ถ้ากดปิดโหมด Auto -> ให้เราสามารถกดปุ่มสั่งเปิด-ปิดพัดลมเองได้ (Manual Override)
- เพิ่มการแจ้งเตือน: ถ้าอุณหภูมิสูงเกิน 35°C ให้แจ้งเตือนเข้ามือถือว่า “ร้อนตับแลบแล้ว!” (ใช้
Blynk.logEvent)
สรุปท้ายบท
ยินดีด้วยครับ! ถ้านักศึกษาทำ Workshop นี้สำเร็จ แปลว่าตอนนี้นักศึกษามีทักษะพื้นฐานครบถ้วนที่จะไปสร้างโปรเจกต์ IoT จริงๆ ได้แล้ว เพราะหลักการของ Smart Farm หรือ Smart Factory ก็ใช้ Logic แบบเดียวกันนี้ครับ (แค่เปลี่ยน LED เป็น Relay คุมปั๊มน้ำ หรือแมกเนติกคอนแทคเตอร์)
ภารกิจต่อไป: ใน Workshop ถัดไป เราจะขยับไปทำระบบที่ “จับต้องได้” มากขึ้น เหมาะสำหรับสายเกษตร นั่นคือ Workshop 2: ระบบ Smart Farm รดน้ำต้นไม้อัตโนมัติ (วัดความชื้นดิน) ซึ่งเป็นโปรเจกต์ยอดฮิตตลอดกาลครับ!
หมายเหตุสำหรับคุณครู:
- ใน Workshop นี้ ผมใช้ LED แทน Relay เพื่อความปลอดภัยในการทดลองครับ แต่คุณครูสามารถอธิบายเสริมได้ว่าถ้าจะใช้งานจริง แค่เปลี่ยนจาก LED เป็น Relay Module ก็คุมไฟบ้าน 220V ได้เลย (แต่ต้องระวังเรื่องไฟดูด)
- โค้ดส่วน Automation (
if t > 30) เป็นตัวอย่าง Logic Control แบบพื้นฐานที่สุดที่นักศึกษาต้องเข้าใจครับ
