NodeMCU ESP8266 ตรวจฝนและส่งค่าขึ้น KiwisIoT Dashboard
อยากรู้ว่ามีหยดน้ำหรือฝนเริ่มตกโดยไม่ต้องเดินออกไปดู Sensor เอง? โปรเจกต์นี้ใช้ NodeMCU ESP8266 อ่านค่าจาก Rain Drop Sensor แล้วส่งข้อมูลผ่าน Wi-Fi ไปยัง KiwisIoT Dashboard เพื่อดูการเปลี่ยนแปลงของ Sensor จากระยะไกล
สิ่งที่น่าสนใจสำหรับคนเริ่มเล่น IoT คือระบบนี้มี Flow ครบตั้งแต่โลกจริงไปจนถึง Cloud: น้ำตกลงบน Sensing Plate, Sensor เปลี่ยนค่า, ESP8266 อ่าน Analog Value แล้วส่งข้อมูลขึ้น Dashboard
แต่มีจุดสำคัญที่ต้องเข้าใจก่อน: Code ต้นฉบับยังไม่ได้กำหนด Threshold ว่า “ค่าเท่าไรคือฝนตก” ระบบเพียงส่ง Raw Sensor Value ขึ้น KiwisIoT เพื่อให้ผู้ใช้สังเกตการเปลี่ยนแปลงระหว่างพื้นผิวแห้งและเปียก
- Controller หลักคือ NodeMCU ESP8266
- Rain Sensor ใช้ Analog Output ต่อเข้าขา A0
- Wiring ตาม Source คือ VCC → 3.3V, GND → GND และ AO → A0
- ESP8266 อ่านค่าด้วย analogRead()
- Code ส่ง Sensor Value ไป KiwisIoT Channel 1
- KiwisIoT Library ใช้สำหรับ Wi-Fi / MQTT communication ตาม Official Repository
- Code ต้นฉบับหน่วง 2 วินาทีต่อ Loop
- ไม่มี Threshold สำหรับแบ่ง Rain / Dry ใน Firmware ต้นฉบับ
- โปรเจกต์ทดสอบโดยเปรียบเทียบ Sensor ตอนแห้งกับตอนมีหยดน้ำ
โปรเจกต์นี้คืออะไร?
Rain Detection Using NodeMCU ESP8266 and KiwisIoT Platform เป็น Beginner IoT Project ที่สร้างโดยนำ Rain Drop Sensor มาต่อกับ NodeMCU ESP8266
Sensor ตรวจการเปลี่ยนแปลงที่เกิดขึ้น เมื่อมีน้ำสัมผัสกับ Sensing Plate จากนั้น ESP8266 อ่านค่า และใช้ Wi-Fi ส่งข้อมูลไปยัง KiwisIoT
ทำให้ข้อมูลไม่ได้อยู่แค่ใน Serial Monitor แต่สามารถแสดงบน Online Dashboard ผ่าน Gauge หรือ Graph ได้
Rain Sensor ตรวจอะไรจริง ๆ?
Rain Drop Sensor มี Sensing Plate ที่ตอบสนองเมื่อมีน้ำหรือหยดน้ำสัมผัสกับพื้นผิว
ตาม Source เมื่อ Plate แห้งจะมีช่วงค่าหนึ่ง และเมื่อหยดน้ำลงบน Plate Sensor Reading จะเปลี่ยนไป
NodeMCU จึงไม่ได้รับข้อความว่า “Rain” หรือ “No Rain” จาก Sensor โดยตรง
สิ่งที่ Firmware อ่านใน Project นี้คือ Analog Value แล้วนำค่าดังกล่าวไปแสดงและส่งต่อ
Architecture ของระบบ: จากหยดน้ำไปถึง Dashboard
↓ Rain Drop Sensor
↓ Analog Output
NodeMCU ESP8266
↓ Wi-Fi
KiwisIoT
↓ Gauge / Graph Dashboard
Flow นี้เป็นพื้นฐานของ IoT Sensor Project หลายประเภท:
- Sensor รับข้อมูลจากโลกจริง
- Microcontroller อ่านค่า Sensor
- Board เชื่อม Network
- ข้อมูลถูกส่งไปยัง IoT Platform
- Dashboard แสดงค่าให้ผู้ใช้ดู
Official KiwisIoT Repository อธิบาย Library ว่าเป็น MQTT-based IoT SDK สำหรับ ESP8266 และ ESP32 พร้อมฟังก์ชันช่วยเชื่อม Wi-Fi, Publish/Subscribe และสื่อสารกับ KiwisIoT Platform
Hardware และ Software ที่ใช้
| รายการ | หน้าที่ |
|---|---|
| NodeMCU ESP8266 | อ่าน Sensor และเชื่อม Wi-Fi |
| Rain Drop Sensor Module | ตรวจการเปลี่ยนแปลงเมื่อมีน้ำบน Sensing Plate |
| Jumper Wires | เชื่อม Sensor กับ NodeMCU |
| USB Cable | เชื่อม Board สำหรับ Programming / Power ตาม Setup |
| Wi-Fi Connection | ส่งข้อมูลไปยัง KiwisIoT |
| KiwisIoT Platform | รับและแสดง Sensor Value |
| Arduino IDE | ใช้เขียนและ Upload Firmware |
ต่อ Rain Sensor กับ NodeMCU ESP8266 อย่างไร?
| Rain Sensor | NodeMCU ESP8266 |
|---|---|
| VCC | 3.3V |
| GND | GND |
| AO | A0 |
Source ใช้เฉพาะ Analog Output หรือ AO สำหรับโปรเจกต์นี้
A0 และ Analog Value ทำงานอย่างไรใน Project นี้?
Code กำหนด:
#define RAIN_PIN A0
จากนั้นใน Loop ESP8266 อ่านค่าด้วย:
analogRead(RAIN_PIN)
ค่าที่ได้ถูกเก็บไว้ในตัวแปร
rainValue
แล้วส่งทั้งไปยัง Serial Monitor
และ KiwisIoT
จุดประสงค์ของ Raw Analog Value คือช่วยให้เราเห็นว่า Sensor Reading เปลี่ยนเมื่อ Plate แห้งหรือเปียก
Source ไม่ได้ระบุค่าต่ำสุด, ค่าสูงสุด หรือ Calibration Curve ของ Rain Sensor รุ่นที่ใช้ จึงไม่มีการกำหนดตัวเลขเพิ่มเองในบทความนี้
ตั้งค่า KiwisIoT Dashboard
ใน Project ผู้สร้างสร้าง Dashboard แล้วกำหนด:
Channel 1 – Rain Sensor Value
จากนั้นสามารถเพิ่ม Gauge หรือ Graph เพื่อดูค่าที่เปลี่ยนไปจาก Sensor
หลังสร้าง Dashboard ผู้สร้างนำ Topic ID ไปใส่ใน Arduino Program เพื่อให้ Device ส่งข้อมูลมายัง Dashboard ที่ถูกต้อง
Arduino Code: อ่าน A0 แล้วส่งไป KiwisIoT Channel 1
Code ต้นฉบับมี Flow ค่อนข้างตรง: เชื่อม KiwisIoT, อ่าน Rain Sensor, Print ค่าลง Serial และส่งค่าไป Channel 1
#include <KiwisIoT.h>
const char* ssid = "wifi name ";
const char* pass = "password";
const char* topic = "dash_1791290485440";
#define RAIN_PIN A0
KiwisIoT kiwisiot(ssid, pass, topic);
void setup() {
Serial.begin(115200);
delay(1000);
kiwisiot.begin();
Serial.println();
Serial.println("Raindrop Sensor Started");
}
void loop() {
kiwisiot.run();
// Read raindrop sensor analog value
int rainValue = analogRead(RAIN_PIN);
Serial.print("Raindrop Sensor Value: ");
Serial.println(rainValue);
// Send raindrop sensor value to KiwisIoT Channel 1
kiwisiot.send("1", rainValue);
delay(2000);
}
ssid,
pass
และ topic
ในตัวอย่างต้องเปลี่ยนเป็นข้อมูลของผู้ใช้เอง
และไม่ควรเผยแพร่ Wi-Fi Password จริงใน Source Code สาธารณะ
Testing: เทียบค่าตอน Sensor แห้งกับตอนมีหยดน้ำ
ผู้สร้างเริ่มจากเปิด Serial Monitor แล้วทดสอบ Plate ในสภาพแห้ง เพื่อดูค่าที่ Sensor อ่านได้
จากนั้นค่อย ๆ เติมหยดน้ำ ลงบน Sensing Plate
Source รายงานว่า Sensor Reading เริ่มเปลี่ยน เมื่อมีน้ำสัมผัสกับ Plate
ในเวลาเดียวกัน ข้อมูลบน KiwisIoT Dashboard ก็เปลี่ยนตามค่าที่ NodeMCU ส่งขึ้นไป
ดู Sensor Value ผ่าน KiwisIoT Dashboard
ส่วนที่เปลี่ยน Project ธรรมดาให้เป็น IoT คือข้อมูลไม่ได้หยุดอยู่ที่ ESP8266
Code ใช้:
kiwisiot.send("1", rainValue);
เพื่อส่ง Sensor Value ไปยัง Channel 1
ทำให้ผู้ใช้สามารถดูการเปลี่ยนแปลง ผ่าน Dashboard แทนที่จะต้องต่อคอมพิวเตอร์และเปิด Serial Monitor ตลอดเวลา
ทำไม Project นี้ยังไม่ได้บอกว่า “ค่าเท่าไรคือฝนตก”?
Code ต้นฉบับไม่มี Threshold Logic สำหรับแบ่งค่าของ Sensor เป็นสถานะ
ไม่มีเงื่อนไขประเภท:
if (rainValue < threshold)
และไม่มี Output เป็นคำว่า:
- Dry
- Rain
- Light Rain
- Heavy Rain
นั่นทำให้ Project นี้เหมาะกับการเรียนรู้ขั้นแรก: อ่าน Raw Value และดูว่าค่าเปลี่ยนตามสภาพจริงอย่างไร
ข้อจำกัดของ Prototype ที่ควรรู้
1. ไม่ใช่ Rain Gauge
Project ตรวจการเปลี่ยนแปลงบน Sensing Plate แต่ Source ไม่ได้วัดปริมาณฝนเป็นมิลลิเมตร หรือ Rainfall Rate
2. ไม่มี Rain Classification
Code ส่ง Raw Analog Value โดยยังไม่ได้แบ่งฝนเบา ฝนหนัก หรือ Dry/Wet State
3. Rain Sensor รุ่นไม่ได้ระบุ
Source เรียกเพียง Rain Drop Sensor Module จึงไม่ควรนำ Specification ของ Module รุ่นอื่นมาปน
4. ตัว Build ไม่ได้ Weatherproof ทั้งชุด
Sensing Plate ถูกใช้เพื่อสัมผัสน้ำ แต่ไม่ได้หมายความว่า NodeMCU, Jumper Wire และ Connection ที่เห็นใน Prototype ควรโดนฝนโดยตรง
5. Source ไม่ได้ให้ Accuracy
ไม่มี Accuracy Benchmark, Response Time Benchmark หรือ Calibration Curve ที่ใช้สรุปประสิทธิภาพเชิงตัวเลขได้
ต่อยอดไป Smart Window หรือ Smart Agriculture ได้ไหม?
ผู้สร้างยกตัวอย่างการต่อยอดหลายแนวทาง เช่น:
- Rain Detection System
- Smart Window
- Automatic Roof System
- Weather Monitoring
- Smart Agriculture
- Outdoor Equipment Protection
- IoT Weather Station
ผู้สร้างยังยกตัวอย่างว่า ในอนาคตสามารถเพิ่ม Motor เพื่อปิดหน้าต่างอัตโนมัติเมื่อพบฝนได้
Beginner เรียนรู้อะไรจาก Project นี้ได้?
โปรเจกต์นี้เล็ก แต่มีองค์ประกอบ IoT ครบหลายขั้น จึงเหมาะกับการเรียนรู้พื้นฐานมาก
- อ่าน Analog Sensor ผ่านขา A0
- ดู Raw Value ผ่าน Serial Monitor
- เชื่อม ESP8266 กับ Wi-Fi
- ใช้ Library เชื่อม IoT Platform
- Mapping Sensor Value เข้ากับ Dashboard Channel
- ทดสอบ Sensor กับสภาพจริง
- แยกสิ่งที่วัดจริง ออกจากสิ่งที่ต้องเพิ่ม Logic ภายหลัง
โดยเฉพาะข้อสุดท้ายสำคัญ: Sensor Reading กับคำว่า “ฝนตก” ไม่ใช่สิ่งเดียวกันเสมอไป
หากกำลังเริ่ม ESP8266, ESP32 หรือ IoT Sensor Project สามารถสอบถามทีม GlobalByte เรื่อง Development Board, Sensor, Module และ Maker Accessories ที่เหมาะกับ Requirement ได้
โปรเจกต์นี้มี Wiring, Code และ Dashboard Setup แนะนำอ่านต้นฉบับควบคู่กัน
หากจะ Build ตามจริง ควรตรวจรูป Wiring, KiwisIoT Topic ID, Wi-Fi Credential และ Code ต้นฉบับก่อน Upload
FAQ — คำถามเกี่ยวกับ NodeMCU ESP8266 Rain Detection
1. Project นี้ใช้บอร์ดอะไร?
ใช้ NodeMCU ESP8266 ตาม Hardware List ของผู้สร้าง
2. Rain Sensor ต่อขาไหน?
Analog Output หรือ AO ต่อเข้าขา A0 ของ NodeMCU
3. Rain Sensor ใช้ไฟเท่าไรใน Project นี้?
Wiring ใน Source ระบุ VCC ต่อกับ 3.3V ของ NodeMCU
4. ใช้ Digital Output ของ Rain Sensor หรือไม่?
ไม่ใช้ใน Project นี้ Source ระบุ AO → A0
5. ESP8266 อ่าน Sensor ด้วยคำสั่งอะไร?
ใช้ analogRead(RAIN_PIN)
โดย RAIN_PIN ถูกกำหนดเป็น A0
6. ข้อมูลถูกส่งไป KiwisIoT Channel ไหน?
Code ส่งไป Channel 1
ด้วย kiwisiot.send("1", rainValue)
7. Code ส่งข้อมูลทุกกี่วินาที?
Code ต้นฉบับมี
delay(2000)
ที่ท้าย Loop
8. Project กำหนด Threshold สำหรับฝนตกหรือไม่?
ไม่ได้กำหนด Firmware ส่ง Raw Analog Value ขึ้น Dashboard โดยตรง
9. ค่า Analog เท่าไรคือ Dry?
Source ไม่ได้ระบุค่าตายตัว ผู้สร้างทดสอบ Plate ตอนแห้งแล้วสังเกตค่าจริง
10. ค่าเท่าไรคือ Heavy Rain?
Source ไม่ได้กำหนด Light/Heavy Rain Classification จึงไม่มีค่าที่สามารถยืนยันได้จาก Project นี้
11. Project วัดปริมาณน้ำฝนเป็นมิลลิเมตรได้ไหม?
Source ไม่ได้ระบุความสามารถในการวัด Rainfall เป็นมิลลิเมตร Project นี้ติดตามการเปลี่ยนแปลงของ Rain Sensor Value
12. KiwisIoT ใช้กับ ESP8266 ได้หรือไม่?
ได้ Official KiwisIoT Repository ระบุว่า SDK รองรับ ESP8266 และ ESP32
13. Topic ID ในตัวอย่างใช้ซ้ำได้ไหม?
เมื่อนำไปใช้จริงควรใช้ Topic ID จาก Dashboard ของผู้ใช้เอง ตาม Workflow ที่ Project อธิบาย
14. สามารถใช้กลางแจ้งถาวรได้เลยหรือไม่?
Source ไม่ได้ให้ Weatherproof Enclosure สำหรับ NodeMCU และ Connection ทั้งชุด จึงไม่ควรถือว่า Prototype ปัจจุบันพร้อมติดตั้งกลางแจ้งถาวร
สรุป: โปรเจกต์ง่าย แต่สอน IoT Flow ได้ครบตั้งแต่ Sensor ถึง Dashboard
Rain Detection Project นี้ ไม่ได้มี Algorithm ซับซ้อน แต่กลับเหมาะมากกับคนที่กำลังเรียนรู้ ว่า IoT Sensor System ทำงานต่อกันอย่างไร
Rain Sensor รับการเปลี่ยนแปลงจากโลกจริง, NodeMCU อ่าน Analog Value, Wi-Fi เชื่อม Board เข้ากับ Network และ KiwisIoT นำข้อมูลไปแสดงบน Dashboard
ที่สำคัญ Source ยังแสดงให้เห็นความต่างระหว่าง “มีค่าจาก Sensor” กับ “ตีความว่าฝนตก”
Firmware ต้นฉบับยังไม่ใส่ Threshold จึงเป็นจุดที่ดีสำหรับ Beginner ที่จะเริ่มจาก Raw Data แล้วค่อยออกแบบ Logic เพิ่มในขั้นต่อไป โดยอิงจากการ Calibration กับ Hardware จริง
References / แหล่งข้อมูลต้นฉบับ
อยากลองทำ ESP8266 หรือ IoT Sensor Project?
ถ้ากำลังเริ่มเล่น ESP8266, ESP32, Rain Sensor, Environmental Sensor หรือ IoT Dashboard สามารถสอบถามทีม GlobalByte เรื่อง Development Board, Sensor และ Maker Accessories ที่เหมาะกับ Project ได้
ก่อนเลือก Sensor แนะนำดูให้ชัดว่า Project ต้องการ “ตรวจว่ามีน้ำ” หรือ “วัดปริมาณฝน” เพราะเป็นโจทย์คนละแบบ และอาจต้องใช้ Sensor ต่างกัน
Source ระบุ Wiring ของ Project เป็น VCC → 3.3V, GND → GND และ AO → A0 บทความนี้ไม่ได้เพิ่ม Digital Output, Pinout หรือ Wiring อื่นที่ Source ไม่ได้ใช้
Code ต้นฉบับส่ง Raw Analog Value ไปยัง KiwisIoT Channel 1 และไม่ได้กำหนด Threshold สำหรับ Dry, Rain, Light Rain หรือ Heavy Rain จึงไม่มีการสร้างค่าดังกล่าวขึ้นเอง
Topic ID, Wi-Fi SSID และ Password ที่ปรากฏใน Code เป็นข้อมูลตัวอย่างของ Project ผู้ใช้ควรเปลี่ยนเป็น Credential และ Dashboard Topic ของตัวเอง และไม่ควรเผยแพร่ Password จริงใน Code สาธารณะ
Prototype ที่ Source แสดง ไม่ได้มี Weatherproof Enclosure สำหรับ NodeMCU, Jumper Wire และ Connection ทั้งชุด จึงไม่ควรถือว่าระบบปัจจุบันพร้อมติดตั้งกลางแจ้งถาวร โดยไม่มีการออกแบบ Protection เพิ่มเติม
แนวทางต่อยอดอย่าง Smart Window, Automatic Roof หรือ Motor Control เป็น Application Idea จาก Source ไม่ใช่ Hardware/Wiring ที่สร้างเสร็จใน Project นี้ บทความจึงไม่ได้เพิ่ม Motor, Relay, Driver หรือ Power Wiring ขึ้นเอง