Smart Fan IoT — Active Devices อุณหภูมิ/ความชื้น อัปเดตเรียลไทม์ทุก 5 วิ
อุณหภูมิอุณหภูมิห้อง (จากพัดลม IoT)
-- C
ความชื้นความชื้นสัมพัทธ์ (จากพัดลม IoT)
-- %
กราฟสรุปย่อ
คลิกเพื่อดูใหญ่
แนวโน้มอุณหภูมิ (Temperature Trend)
คลิกเพื่อดูใหญ่
แนวโน้มความชื้น (Humidity Trend)
คลิกเพื่อดูใหญ่
ค่าเฉลี่ยรายชั่วโมง (Hourly Average)
ข้อมูลการวัดระบบ (System Info)
เซนเซอร์ที่ใช้งาน
DHT22
เซนเซอร์อุณหภูมิและความชื้นดิจิทัล บอร์ด Arduino Uno อ่านค่าแล้วส่งผ่าน Serial ไปยัง NodeMCU ESP8266
หน่วยการวัด
°C / %RH
อุณหภูมิหน่วย °C (เซลเซียส), ความชื้นหน่วย %RH (ความชื้นสัมพัทธ์) — แสดงบนการ์ด KPI พร้อมหน่วยกำกับทุกค่า
ความถี่ในการวัด
ทุก 2 วินาที
Arduino อ่านค่าเซนเซอร์และส่งทุก 2 วินาที ผ่าน Serial; NodeMCU อัปเดตหน้าเว็บอุปกรณ์แบบเรียลไทม์ และส่งค่าขึ้นเซิร์ฟเวอร์ทุก 5 วินาที เพื่อให้แดชบอร์ดนี้แสดงผลแบบเรียลไทม์
รูปร่างของกราฟ
กราฟเส้น (Line)
กราฟแนวโน้มแบบ เส้น (Line Chart) แสดงค่าตามเวลา (เทียบเวลา) + กราฟ ค่าเฉลี่ยรายชั่วโมง คลิกที่กราฟเพื่อดูขนาดใหญ่ และ export JPG/CSV ได้
GET & POST
GET / POST
GET อ่านข้อมูล: api/v1/get.php, api.php — POST ส่งข้อมูลเซนเซอร์จากอุปกรณ์: api/v1/post.php (ทดลองได้ในเมนู API Tester)
API Key
iot_eeiot_2024
ส่งใน Header ชื่อ X-API-Key ทุกคำขอ GET/POST เพื่อผ่านการตรวจสอบสิทธิ์ของระบบ API v1
การวิเคราะห์กราฟ
คลิกเพื่อดูใหญ่
แนวโน้มอุณหภูมิ (Temperature Trend)
คลิกเพื่อดูใหญ่
แนวโน้มความชื้น (Humidity Trend)
คลิกเพื่อดูใหญ่
ค่าเฉลี่ยรายชั่วโมง (Hourly Average)
สถิติรายวัน
ค่าเฉลี่ยและสถิติแยกตามวัน
อุณหภูมิเฉลี่ยรายวัน
ความชื้นเฉลี่ยรายวัน
| วันที่ | บันทึก |
อุณหภูมิเฉลี่ย (°C) | อุณหภูมิ Min/Max (°C) |
ความชื้นเฉลี่ย (%RH) |
โครงงานควบคุมการเปิด-ปิดพัดลมผ่านอินเทอร์เน็ตด้วยระบบ IoT
ระบบควบคุมการเปิด-ปิดพัดลมจากระยะไกลผ่านเว็บไซต์ บนบอร์ด NodeMCU ESP8266 ที่เชื่อมต่อกับ Arduino Uno และเซนเซอร์อุณหภูมิ DHT22 ควบคุมโดยผู้ใช้ผ่านเว็บเพจ (ควบคุมด้วยมือ)
ข้อมูลทั่วไป
| หัวข้อ | รายละเอียด |
| ชื่อโครงงาน | โครงงานควบคุมการเปิด-ปิดพัดลมผ่านอินเทอร์เน็ตด้วยระบบ IoT (Smart Fan IoT) |
| บอร์ดควบคุมหลัก | NodeMCU ESP8266 (Web Server + เชื่อมต่อ WiFi) |
| บอร์ดควบคุมรอง | Arduino Uno ATmega328P (อ่านเซนเซอร์ + ควบคุมรีเลย์) |
| เซนเซอร์ | DHT22 (วัดอุณหภูมิ + ความชื้น) |
| เอาต์พุต | โมดูลรีเลย์ 1 ช่อง (5V) ควบคุมพัดลม DC |
| การสื่อสารระหว่างบอร์ด | พอร์ตอนุกรม (Serial/UART) ความเร็ว 115200 Baud |
| ค่าที่แสดงผล | อุณหภูมิ (°C), ความชื้น (%RH), สถานะพัดลม ON/OFF |
| โหมดการควบคุม | ควบคุมด้วยมือ (Manual) ผ่านปุ่มเปิด/ปิดบนเว็บเพจ |
| ระดับแรงดัน | Arduino Uno 5V / NodeMCU 3.3V (ใช้ตัวแบ่งแรงดัน Voltage Divider) |
วัตถุประสงค์
- เพื่อสร้างระบบควบคุมการเปิด-ปิดพัดลมผ่านเว็บไซต์จากระยะไกลด้วย NodeMCU ESP8266
- เพื่อให้ระบบสามารถวัดอุณหภูมิและความชื้นด้วยเซนเซอร์ DHT22 และแสดงผลบนเว็บเพจแบบเรียลไทม์
- เพื่อออกแบบและสร้างวงจรเชื่อมต่อ Arduino Uno กับ NodeMCU ผ่านพอร์ตอนุกรม (Serial)
อุปกรณ์และวัสดุที่ใช้
| ลำดับ | อุปกรณ์ | จำนวน |
| 1 | บอร์ด NodeMCU ESP8266 | 1 |
| 2 | บอร์ด Arduino Uno | 1 |
| 3 | เซนเซอร์ DHT22 | 1 |
| 4 | โมดูลรีเลย์ 1 ช่อง (5V) | 1 |
| 5 | พัดลม DC ขนาดเล็ก | 1 |
| 6 | สายไฟจัมเปอร์ (Jumper Wire) | หลายเส้น |
| 7 | สาย USB สำหรับอัปโหลดโค้ด | 2 |
| 8 | ตัวต้านทาน 10kΩ (Voltage Divider) | 2 |
| 9 | Breadboard | 1 |
หลักการทำงาน
- NodeMCU เชื่อมต่อ WiFi และสร้างเว็บเซิร์ฟเวอร์แสดงหน้าเว็บเพจควบคุม
- Arduino Uno อ่านค่าอุณหภูมิ/ความชื้นจากเซนเซอร์ DHT22
- Arduino Uno ส่งค่าที่อ่านได้ให้ NodeMCU ผ่านสาย Serial ทุก 2 วินาที
- NodeMCU แสดงค่าอุณหภูมิ ความชื้น และปุ่มควบคุมบนเว็บเพจ
- ผู้ใช้กดปุ่มเปิด/ปิด → NodeMCU ส่งคำสั่งให้ Arduino Uno ควบคุมรีเลย์เปิด-ปิดพัดลม
- ระบบแสดงสถานะพัดลมปัจจุบัน (ON/OFF) อุณหภูมิ และความชื้นแบบเรียลไทม์บนเว็บเพจ
การต่อวงจร
แผนภาพการเชื่อมต่อวงจรจากอุปกรณ์จริง
หมายเหตุ: ตัวต้านทาน 10kΩ บนเส้น Serial TX ทำหน้าที่เป็นตัวแบ่งแรงดัน (Voltage Divider) ลดแรงดันจาก Arduino Uno 5V ลงเหลือประมาณ 2.5V เพื่อป้อนเข้าขารับ RX (GPIO2) ของ NodeMCU 3.3V และสาย DATA ของ DHT22 มีตัวต้านทาน pull-up 10kΩ ไปที่ 5V
โปรโตคอลการสื่อสารแบบ Serial
| ทิศทาง | รูปแบบ | ความหมาย |
| NodeMCU → Uno | F1 / F0 | สั่งเปิดพัดลม / สั่งปิดพัดลม |
| Uno → NodeMCU | T:28.5
H:60
S:1 | แต่ละค่าอยู่คนละบรรทัด: อุณหภูมิ 28.5°C, ความชื้น 60%, พัดลมสถานะเปิด (1=เปิด / 0=ปิด) |
ผลการดำเนินงาน
| รายการ | ผลลัพธ์ |
| เชื่อมต่อ WiFi / Web Server | สำเร็จ และแสดง IP Address เช่น 192.168.1.100 |
| อ่านค่าเซนเซอร์ DHT22 | แสดงค่า 25.4 / 26.1 / 30.3 °C ได้ถูกต้องและเป็นเรียลไทม์ |
| ควบคุมรีเลย์ผ่านหน้าเว็บ | กดเปิด → พัดลมหมุน (ON สีเขียว), กดปิด → พัดลมหยุด (OFF สีแดง) |
ข้อเสนอแนะเพื่อการพัฒนา
- เชื่อมต่ออินเทอร์เน็ตผ่านระบบ Cloud เช่น Node-RED, Blynk, MQTT เพื่อควบคุมจากที่ใดก็ได้ทั่วโลก
- เพิ่มระบบตั้งเวลาอัตโนมัติ (Timer/Schedule) ในการเปิด-ปิดพัดลม
- เพิ่มเซนเซอร์ตรวจจับคน (PIR Sensor) ให้พัดลมทำงานเมื่อมีคนอยู่ในห้อง
- บันทึกประวัติข้อมูลย้อนหลัง (Data Logging) ลงในฐานข้อมูล
คู่มือ GET
คำขอข้อมูลด้วย GET
ใช้วิธีการ GET เพื่ออ่านข้อมูลจากเซนเซอร์ที่บันทึกไว้ โดยใช้ Base URL: http://localhost/dashboard_iot/api/v1/get.php
GET 1. ข้อมูลล่าสุด (latest)
GET /api/v1/get.php?action=latest
ตัวอย่าง curl
curl "http://localhost/dashboard_iot/api/v1/get.php?action=latest"
GET 2. ข้อมูลล่าสุด N เรคคอร์ด (latest_all)
GET /api/v1/get.php?action=latest_all&limit=N
| Parameter | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
| limit | int | 10 | จำนวนเรคคอร์ด (สูงสุด 100) |
| from | string | - | วันที่เริ่มต้น (YYYY-MM-DD) |
| to | string | - | วันที่สิ้นสุด (YYYY-MM-DD) |
ตัวอย่าง curl
curl "http://localhost/dashboard_iot/api/v1/get.php?action=latest_all&limit=10"
curl "http://localhost/dashboard_iot/api/v1/get.php?action=latest_all&limit=10&from=2026-08-01&to=2026-08-31"
GET 3. ค้นหาด้วย ID (by_id)
GET /api/v1/get.php?action=by_id&id=N
ตัวอย่าง curl
curl "http://localhost/dashboard_iot/api/v1/get.php?action=by_id&id=1001"
GET 4. ค้นหาด้วยห้อง (by_room)
GET /api/v1/get.php?action=by_room&room=XXXX&limit=N
ตัวอย่าง curl
curl "http://localhost/dashboard_iot/api/v1/get.php?action=by_room&room=18207&limit=10"
GET 5. สรุปค่าเฉลี่ย (summary)
GET /api/v1/get.php?action=summary
คืนค่าสถิติทั้งหมด เช่น จำนวนเรคคอร์ด ค่าเฉลี่ยของทุกเซนเซอร์
ตัวอย่าง curl
curl "http://localhost/dashboard_iot/api/v1/get.php?action=summary"
GET 6. นับจำนวนข้อมูล (count)
GET /api/v1/get.php?action=count
ตัวอย่าง curl
curl "http://localhost/dashboard_iot/api/v1/get.php?action=count"
GET 7. สถิติรายวัน (daily)
GET /api.php?action=daily&limit=N
คืนค่าเฉลี่ยและสถิติแยกรายวัน
ตัวอย่าง curl
curl "http://localhost/dashboard_iot/api.php?action=daily&limit=7"
คู่มือ POST
การส่งข้อมูลด้วย POST
ใช้วิธีการ POST เพื่อส่งข้อมูลจากเซนเซอร์ (ESP32/ESP8266) เข้าสู่ระบบ URL: http://localhost/dashboard_iot/api/v1/post.php
POST ส่งข้อมูลเซนเซอร์
| Parameter | ชนิด | จำเป็น | คำอธิบาย |
| room | string | REQUIRED | รหัสห้อง / อุปกรณ์ |
| temp1 | float | ไม่บังคับ | อุณหภูมิเซนเซอร์ 1 |
| temp2 | float | ไม่บังคับ | อุณหภูมิเซนเซอร์ 2 |
| humi1 | float | ไม่บังคับ | ความชื้นเซนเซอร์ 1 |
| humi2 | float | ไม่บังคับ | ความชื้นเซนเซอร์ 2 |
| volt1 | float | ไม่บังคับ | แรงดันไฟฟ้า (V) |
| current1 | float | ไม่บังคับ | กระแสไฟฟ้า (A) |
| power1 | float | ไม่บังคับ | กำลังไฟฟ้า (W) |
| kwh1 | float | ไม่บังคับ | พลังงาน (kWh) |
| freq1 | float | ไม่บังคับ | ความถี่ (Hz) |
| pf1 | float | ไม่บังคับ | Power Factor |
แบบฟอร์ม (application/x-www-form-urlencoded)
ตัวอย่าง curl
curl -X POST "http://localhost/dashboard_iot/api/v1/post.php" \
-d "room=18207" \
-d "temp1=28.5" \
-d "temp2=27.3" \
-d "humi1=65.2" \
-d "volt1=220.5" \
-d "current1=1.25" \
-d "power1=275.6" \
-d "freq1=50.0" \
-d "pf1=0.95"
แบบ JSON (application/json)
ตัวอย่าง curl
curl -X POST "http://localhost/dashboard_iot/api/v1/post.php" \
-H "Content-Type: application/json" \
-d '{
"room": "18207",
"temp1": 28.5,
"temp2": 27.3,
"humi1": 65.2,
"volt1": 220.5,
"current1": 1.25,
"power1": 275.6,
"freq1": 50.0,
"pf1": 0.95
}'
ตัวอย่างโค้ด ESP32 (Arduino)
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "YOUR_WIFI";
const char* pass = "YOUR_PASSWORD";
const char* apiUrl = "http://YOUR_SERVER/dashboard_iot/api/v1/post.php";
void setup() {
WiFi.begin(ssid, pass);
while(WiFi.status() != WL_CONNECTED) delay(500);
}
void sendData() {
HTTPClient http;
http.begin(apiUrl);
http.addHeader("Content-Type", "application/json");
String json = "{\"room\":\"18207\",\"temp1\":" + String(temp1) +
",\"humi1\":" + String(humi1) +
",\"volt1\":" + String(volt1) + "}";
int code = http.POST(json);
http.end();
}
คู่มือการใช้งาน
โครงสร้างระบบ
| ไฟล์ | หน้าที่ |
| index.html | หน้าแดชบอร์ดหลัก (หน้าโฮม) |
| api.php | API สำหรับแดชบอร์ด (summary, chart, table, daily ฯลฯ) |
| db.php | การเชื่อมต่อฐานข้อมูล MySQL |
| api/v1/get.php | API รับข้อมูล (GET) สำหรับอุปกรณ์ |
| api/v1/post.php | API ส่งข้อมูล (POST) จาก ESP32/ESP8266 |
| api/v1/db.php | การเชื่อมต่อฐานข้อมูลสำหรับ API v1 |
ขั้นตอนการใช้งาน
- ส่งข้อมูลจากเซนเซอร์: อุปกรณ์ ESP32/ESP8266 ส่งข้อมูลผ่าน POST ไปที่
/api/v1/post.php พร้อมพารามิเตอร์ room และค่าต่างๆ
- ตรวจสอบข้อมูลเข้ามา: ไปที่เมนู ภาพรวมทั้งหมด เพื่อดูค่า KPI แบบเรียลไทม์ หรือไปที่ ตารางข้อมูล เพื่อดูข้อมูลใหม่
- วิเคราะห์ข้อมูล: ใช้เมนู การวิเคราะห์กราฟ เพื่อดูแนวโน้มอุณหภูมิ ความชื้น ไฟฟ้า
- ดูสถิติรายวัน: ใช้เมนู สถิติรายวัน เพื่อดูค่าเฉลี่ยแยกตามวัน และ export เป็น CSV
- กรองช่วงวันที่: ใช้แถบกรองวันที่ด้านบน (เลือก จาก - ถึง แล้วกด "กรองข้อมูล")
- ทดสอบ API: ใช้เมนู API Tester → ทดสอบ API เพื่อลองส่ง/อ่านข้อมูล เปรียบเทียบกับคู่มือ GET / POST
คำอธิบายค่าเซนเซอร์
| ค่า | หน่วย | คำอธิบาย |
| Temp | °C | อุณหภูมิจากเซนเซอร์ DHT22 |
| Humi | %RH | ความชื้นสัมพัทธ์จากเซนเซอร์ DHT22 |
ปุ่ม Refresh และการอัตโนมัติ
เซนเซอร์ DHT22 อ่านค่าทุก 2 วินาที แล้วส่งผ่าน Serial ไปยัง NodeMCU (หน้าเว็บอุปกรณ์อัปเดตเรียลไทม์) จากนั้น NodeMCU อัปโหลดค่าขึ้นเซิร์ฟเวอร์ทุก 5 วินาที และแดชบอร์ดนี้ดึงข้อมูลล่าสุดทุก 5 วินาที เพื่อแสดงอุณหภูมิ/ความชื้นแบบเรียลไทม์ รวมทั้งสามารถกดปุ่ม "รีเฟรช" เพื่อดึงข้อมูลล่าสุดได้ทันที ส่วนนาฬิกาด้านบนแสดงเวลาปัจจุบันแบบเรียลไทม์
API Key (ตัวเลือก)
API v1 รองรับการตรวจสอบด้วย X-API-Key หัวข้อเสริม:
ตัวอย่าง curl
curl -H "X-API-Key: iot_eeiot_2024" "http://localhost/dashboard_iot/api/v1/get.php?action=latest"
การจำลอง Alert (แจ้งเตือน)
ระบบแจ้งเตือนแบบเรียลไทม์ — กดปุ่มด้านล่างเพื่อ จำลองสถานการณ์ ต่าง ๆ ระบบจะแสดงแถบแจ้งเตือน (Alert Banner) พร้อมระดับความรุนแรง และบันทึกลงรายการ Log ทุกครั้ง (ในทางจริง ระบบจะตรวจสอบเกณฑ์จากค่าที่อ่านได้จากเซนเซอร์)
บันทึกรายการ (Log)
ยังไม่มีเหตุการณ์ — กดปุ่มจำลองสถานการณ์ด้านบนได้เลย