ESP8266 Fire Monitoring Prototype: รวม 3 Sensor ขึ้น KiwisIoT
ถ้าอยากดูสถานะเปลวไฟ ระดับจาก Smoke/Gas Sensor อุณหภูมิ และความชื้นจาก Dashboard เดียว NodeMCU ESP8266 สามารถทำหน้าที่รวบรวมข้อมูลจาก Sensor หลายชนิด แล้วส่งผ่าน Wi-Fi ไปยัง KiwisIoT เพื่อดูผลจากระยะไกลได้
Project นี้ใช้ Flame Sensor, MQ-2 และ DHT11 เชื่อมกับ NodeMCU ESP8266 แล้วแบ่งข้อมูลออกเป็น 4 Channels บน KiwisIoT เพื่อแสดง Flame Status, MQ-2 Level, Temperature และ Humidity
- NodeMCU ESP8266 เป็น Controller หลักและเชื่อมต่อ KiwisIoT ผ่าน Wi-Fi
- Flame Sensor ใช้ Digital Output ต่อที่ D5
- MQ-2 ใช้ Analog Output ต่อที่ A0
- DHT11 ใช้ DATA ที่ D2 สำหรับ Temperature และ Humidity
- KiwisIoT ใช้ 4 Channels: Flame, MQ-2 Level, Temperature และ Humidity
- Firmware ตัวอย่างส่งข้อมูลประมาณทุก 5 วินาที
- ค่า MQ-2 ที่แสดง 0–100 เป็นเพียง Normalized Reading ไม่ใช่ ppm
- Project นี้เป็น Prototype เพื่อการเรียนรู้ ไม่ใช่ระบบ Fire Alarm สำหรับ Life Safety
IoT Fire Monitoring Project นี้คืออะไร?
แนวคิดของระบบคือใช้ Sensor หลายชนิดตรวจสภาพแวดล้อมคนละด้าน แล้วให้ ESP8266 ทำหน้าที่รวมข้อมูลและส่งขึ้น Cloud Dashboard
ส่งสถานะว่าตรวจพบ Flame หรือไม่
ส่งค่า Analog จาก Smoke/Gas Sensor
อ่าน Temperature และ Humidity
อ่าน Sensor และประมวลผลข้อมูลเบื้องต้น
ส่งข้อมูลไปยัง KiwisIoT
แสดงข้อมูลผ่าน 4 Channels
จุดที่เหมาะกับการเรียนรู้คือ Project เดียวได้ลองทั้ง Digital Input, Analog Input, Digital Sensor, Wi-Fi Connectivity และ Cloud Dashboard
Hardware ที่ใช้มีอะไรบ้าง?
| อุปกรณ์ | หน้าที่ใน Project |
|---|---|
| NodeMCU ESP8266 | อ่าน Sensor และเชื่อม KiwisIoT ผ่าน Wi-Fi |
| Flame Sensor Module | ส่ง Digital Flame Status |
| MQ-2 Smoke/Gas Sensor | ให้ Analog Reading สำหรับระดับที่นำไป Normalize |
| DHT11 | วัด Temperature และ Humidity |
| Jumper Wires | เชื่อม Sensor กับ NodeMCU |
| USB Cable | ใช้กับ NodeMCU ในขั้นตอนพัฒนา / Upload |
| Wi-Fi + Internet | เชื่อมอุปกรณ์กับ KiwisIoT Dashboard |
Architecture ของระบบ
Sensor ทั้งสามไม่ได้ส่งข้อมูลแบบเดียวกัน แต่ ESP8266 ทำหน้าที่รวมข้อมูลให้กลายเป็น Dashboard เดียว
| Sensor | ข้อมูลที่อ่าน | Input | KiwisIoT Channel |
|---|---|---|---|
| Flame Sensor | Flame / No Flame | Digital | Channel 0 |
| MQ-2 | Normalized Sensor Level | Analog | Channel 1 |
| DHT11 | Temperature | Digital Sensor Data | Channel 2 |
| DHT11 | Humidity | Digital Sensor Data | Channel 3 |
ต่อ Sensor กับ NodeMCU อย่างไร?
Flame Sensor
| Flame Sensor | NodeMCU ESP8266 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| DO | D5 |
MQ-2 Sensor
| MQ-2 | NodeMCU ESP8266 |
|---|---|
| VCC | VIN |
| GND | GND |
| AO | A0 |
DHT11
| DHT11 | NodeMCU ESP8266 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| DATA | D2 |
Flame Detection ทำงานอย่างไร?
Project ใช้ Digital Output ของ Flame Sensor ต่อเข้ากับ D5 และอ่านด้วย digitalRead()
ใน Firmware ตัวอย่างนี้ LOW ถูกตีความว่า Flame Detected และสถานะถูกส่งไปยัง KiwisIoT Channel 0
Firmware แสดง “Flame Detected!”
ส่งข้อความ “FLAME DETECTED”
ถ้า Signal ไม่ใช่ LOW Firmware จะส่ง NO FLAME ไปยัง Channel เดียวกัน
MQ-2 ค่า 0–100 หมายถึงอะไร?
Firmware อ่านค่า MQ-2 จาก A0 ด้วย analogRead() ซึ่งใน Source ถูกจัดการเป็นช่วง 0–1023
จากนั้น Code ใช้ map() เปลี่ยนค่าดังกล่าวให้อยู่ในช่วง 0–100 ก่อนส่งไป Channel 1
0–1023 ตาม Firmware ตัวอย่าง
แปลงเป็น 0–100
แสดงเป็น Normalized Level
DHT11 ส่ง Temperature และ Humidity อย่างไร?
DHT11 ใช้ DATA Pin ที่ D2 และ Firmware อ่านข้อมูลผ่าน DHT Library
Temperature ถูกส่งไป Channel 2 ส่วน Humidity ถูกส่งไป Channel 3 โดย Code ใช้ isnan() ตรวจว่าค่าที่อ่านมาถูกต้องก่อนส่งขึ้น Dashboard
ตั้ง KiwisIoT Dashboard 4 Channels
หลังต่อ Hardware แล้ว Source ให้สร้าง Dashboard ชื่อ Fire Monitoring System และสร้าง Widget สำหรับข้อมูล 4 Channels
| Channel | ชื่อข้อมูล | Widget ตาม Source | ค่าที่ส่ง |
|---|---|---|---|
| 0 | FLAME STATUS | Label | FLAME DETECTED / NO FLAME |
| 1 | SMOKE LEVEL | Gauge หรือ Value Display | Normalized 0–100 |
| 2 | TEMPERATURE | Gauge หรือ Value Display | Temperature °C |
| 3 | HUMIDITY | Gauge หรือ Value Display | Humidity % |
Topic ID เชื่อม ESP8266 กับ Dashboard อย่างไร?
หลังสร้าง Dashboard แล้ว KiwisIoT จะมี Topic ID ซึ่งใน Source ใช้รูปแบบตัวอย่าง:
dash_XXXXXXXXXXXXX
จากนั้นนำ Topic ID จริงไปแทน Placeholder ใน Firmware:
const char* topic = "dash_XXXXXXXXXXXXX";
Wi-Fi Name และ Password ใน Code ก็เป็น Placeholder และต้องแทนด้วยข้อมูลของ Network ที่ผู้ใช้ได้รับอนุญาตให้ใช้งาน
Arduino Firmware ทำงานอย่างไร?
Source ให้ Arduino Code สำหรับอ่าน Sensor ทั้งสาม และส่งข้อมูลขึ้น KiwisIoT โดยตรง
เริ่ม Serial, Flame Sensor, DHT11 และ KiwisIoT
รักษาการสื่อสารกับ KiwisIoT
D5 → Channel 0
A0 → Normalize → Channel 1
Temperature → Channel 2 / Humidity → Channel 3
รอ 5 วินาทีก่อน Loop รอบถัดไป
#include <KiwisIoT.h>
#include <DHT.h>
// Wi-Fi Details
const char* ssid = "YOUR_WIFI_NAME";
const char* pass = "YOUR_WIFI_PASSWORD";
// KiwisIoT Dashboard Topic ID
const char* topic = "dash_XXXXXXXXXXXXX";
KiwisIoT kiwisiot(ssid, pass, topic);
// Sensor Pins
#define FLAME_PIN D5
#define MQ2_PIN A0
#define DHT_PIN D2
// DHT Sensor
#define DHTTYPE DHT11
DHT dht(DHT_PIN, DHTTYPE);
void setup() {
Serial.begin(115200);
pinMode(FLAME_PIN, INPUT);
dht.begin();
// Start Wi-Fi and KiwisIoT
kiwisiot.begin();
Serial.println("Fire Monitoring System Started");
}
void loop() {
// Keep KiwisIoT communication active
kiwisiot.run();
// -----------------------------
// Flame Sensor
// -----------------------------
int flame = digitalRead(FLAME_PIN);
if (flame == LOW) {
Serial.println("Flame Detected!");
kiwisiot.send("0", "FLAME DETECTED");
} else {
Serial.println("No Flame");
kiwisiot.send("0", "NO FLAME");
}
// -----------------------------
// MQ-2 Smoke Sensor
// -----------------------------
int smokeRaw = analogRead(MQ2_PIN);
int smokeLevel = map(smokeRaw, 0, 1023, 0, 100);
smokeLevel = constrain(smokeLevel, 0, 100);
Serial.print("Smoke Level: ");
Serial.print(smokeLevel);
Serial.println("%");
kiwisiot.send("1", String(smokeLevel));
// -----------------------------
// DHT11 Temperature
// -----------------------------
float temperature = dht.readTemperature();
if (!isnan(temperature)) {
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
kiwisiot.send("2", String(temperature));
}
// -----------------------------
// DHT11 Humidity
// -----------------------------
float humidity = dht.readHumidity();
if (!isnan(humidity)) {
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
kiwisiot.send("3", String(humidity));
}
Serial.println("----------------------");
delay(5000);
}
ทดสอบ Project อย่างไร?
Source แนะนำ Flow ทดสอบหลัง Upload Code ดังนี้:
- เปิด Arduino Serial Monitor
- ตั้ง Baud Rate เป็น 115200
- รอ NodeMCU เชื่อมต่อ Wi-Fi
- ตรวจสถานะ Flame Sensor
- ดู Analog Level จาก MQ-2
- ดู Temperature จาก DHT11
- ดู Humidity จาก DHT11
- เปิด KiwisIoT Dashboard และตรวจทั้ง 4 Channels
ตัวเลขตัวอย่างไม่ใช่ Threshold
Source ยก Example Reading เช่น Smoke Level 12 หรือ 38, Temperature 30 °C และ Humidity 65% แต่ระบุชัดว่าเป็นเพียง Example Output ไม่ใช่ค่ามาตรฐานหรือ Threshold สำหรับแจ้งเหตุ
ข้อจำกัดของ Prototype นี้
1. MQ-2 ไม่ได้วัด Smoke เป็น % จริง
ค่า 0–100 มาจากการ Map ADC ไม่ใช่ผล Calibration ทาง Gas Concentration และไม่ใช่ ppm
2. Flame Sensor มีปัจจัยแวดล้อม
Source ระบุว่าการตอบสนองสามารถขึ้นกับตัว Sensor Module, Environment, ตำแหน่งของ Flame และแสงโดยรอบ
3. DHT11 ไม่ใช่ Precision Instrument
ใน Project นี้ DHT11 ถูกใช้สำหรับ Basic Environmental Monitoring ไม่ใช่เครื่องมือวัดอุณหภูมิหรือความชื้นแบบความแม่นยำสูง
4. Dashboard พึ่งพา Wi-Fi และ Internet
Architecture ของ Project ใช้ Wi-Fi และ KiwisIoT เพื่อทำ Remote Monitoring จึงไม่ควรถูกนำไปตีความว่าเป็น Independent Fire Alarm สำหรับสถานการณ์ที่ต้องพึ่งการแจ้งเตือนด้านความปลอดภัยต่อชีวิต
ต่อยอด Project นี้ได้อย่างไร?
Source เสนอแนวทาง Future Improvement หลายแบบ เช่น:
- Buzzer Alarm
- Red Warning LED
- Mobile Notification
- Email Alert
- SMS Alert
- Historical Data Graph
- Multiple Sensor Nodes
- Camera-based Verification
- Cloud Data Storage
- Battery Backup
- Automatic Emergency Notification
Maker ได้อะไรจาก Project นี้?
1. ESP8266 ตัวเดียวอ่าน Sensor หลายรูปแบบได้
Project รวม Digital Input จาก Flame Sensor, Analog Input จาก MQ-2 และ Sensor Data จาก DHT11 ไว้ใน Firmware เดียว
2. Data Presentation สำคัญพอ ๆ กับการอ่าน Sensor
จากเดิมที่ข้อมูลอยู่ใน Serial Monitor KiwisIoT ช่วยย้ายข้อมูลไปอยู่บน Dashboard ที่แบ่งแต่ละค่าออกเป็น Channel ชัดเจน
3. ต้องรู้ว่าตัวเลขบน Dashboard หมายถึงอะไรจริง ๆ
ตัวอย่าง MQ-2 แสดงให้เห็นชัดว่า ค่า 0–100 ที่ดูเหมือน Percentage ไม่ได้แปลว่า Sensor ผ่านการ Calibration ให้เป็น Concentration แล้ว
4. IoT Prototype กับ Safety Product เป็นคนละระดับ
การส่งข้อมูลขึ้น Dashboard สำเร็จเป็นบทเรียนด้าน IoT ที่ดี แต่ระบบที่เกี่ยวข้องกับชีวิตและความปลอดภัย ต้องมีข้อกำหนดด้าน Reliability, Certification, Failure Handling และระบบสำรองที่ Source นี้ไม่ได้ครอบคลุม
โปรเจกต์นี้มีหลายขั้น แนะนำอ่านต้นฉบับควบคู่กัน
หากต้องการสร้างตาม Project จริง ควรเปิด Tutorial ต้นฉบับเพื่อดูภาพ Circuit, Dashboard Configuration และ Code ฉบับล่าสุดควบคู่กับบทความนี้
FAQ: คำถามที่พบบ่อย
1. Project นี้ใช้บอร์ดอะไร?
ใช้ NodeMCU ESP8266 เป็น Controller หลัก สำหรับอ่าน Sensor และเชื่อมต่อ KiwisIoT ผ่าน Wi-Fi
2. ใช้ Sensor อะไรบ้าง?
Source ใช้ Flame Sensor, MQ-2 Smoke/Gas Sensor และ DHT11
3. Flame Sensor ต่อขาไหน?
ใน Project นี้ Digital Output ต่อกับ D5
4. Flame Sensor ตรวจพบไฟเมื่อเป็น HIGH หรือ LOW?
Firmware ตัวอย่างตีความ LOW เป็น Flame Detected แต่ไม่ควรถือว่า Sensor Module ทุกแบบใช้ Logic เดียวกัน
5. MQ-2 ต่อขาไหน?
Analog Output ของ MQ-2 ต่อกับ A0 ตาม Circuit ของ Source
6. ค่า Smoke Level 50% หมายถึงควัน 50% หรือไม่?
ไม่ใช่ Firmware เพียง Map Analog Reading 0–1023 ไปเป็นช่วง 0–100 จึงเป็น Normalized Level ไม่ใช่ Smoke Concentration และไม่ใช่ ppm
7. DHT11 ต่อขาไหน?
Source ต่อ DATA ของ DHT11 เข้ากับ D2 และจ่าย VCC จาก 3.3V
8. KiwisIoT ใช้กี่ Channel?
4 Channels: Flame Status, MQ-2 Level, Temperature และ Humidity
9. Topic ID คืออะไร?
Source ใช้ Topic ID ที่มีรูปแบบคล้าย dash_XXXXXXXXXXXXX เพื่อเชื่อม Firmware เข้ากับ Dashboard ที่ถูกต้อง
10. Dashboard Update บ่อยแค่ไหน?
Firmware ตัวอย่างมี delay(5000) จึงอัปเดตข้อมูลประมาณทุก 5 วินาที
11. Serial Monitor ใช้ Baud Rate เท่าไร?
115200 baud ตาม Source Code
12. ต้องใช้ Library อะไร?
Source ระบุ KiwisIoT Library และ DHT Sensor Library รวมถึง ESP8266 Board Package ใน Arduino IDE
13. ใช้ Project นี้แทน Smoke Detector ได้หรือไม่?
ไม่ควร Source ระบุชัดว่าเป็น Educational Prototype และไม่ใช่ตัวแทน Certified Fire Detection, Alarm หรือ Life-safety Equipment
14. MQ-2 วัด ppm ได้จาก Code นี้หรือไม่?
ไม่ Code ใน Source ไม่ได้ทำ Calibration เป็น ppm แต่เพียง Normalize ADC Reading ไปเป็น 0–100
15. มี Mobile Notification หรือ SMS หรือไม่?
Source ระบุสิ่งเหล่านี้เป็น Future Improvement แต่ไม่ได้ให้ Implementation หรือ Code ใน Project ปัจจุบัน
16. ใช้ในโรงงานจริงได้หรือไม่?
Source กล่าวถึง Industrial Environment Monitoring ในบริบทของ Educational Prototype แต่ไม่ได้ให้ Certification, Reliability Test หรือข้อมูลรองรับการใช้เป็นระบบ Fire Safety ในโรงงานจริง
References / แหล่งข้อมูลต้นฉบับ
เริ่มจาก Sensor 3 ตัว แล้วค่อยต่อยอดเป็น IoT Dashboard
Project นี้เหมาะสำหรับเรียนรู้การอ่าน Digital Sensor, Analog Sensor และ Temperature/Humidity Sensor แล้วส่งข้อมูลจาก ESP8266 ไปยัง Dashboard ผ่าน Wi-Fi
หากกำลังทดลอง IoT Monitoring สามารถสอบถามทีม Globalbyte เรื่อง ESP8266, ESP32, Development Board, Sensor, Module และ Maker Accessories ที่เหมาะกับ Project ได้