โปรเจกต์ Rain Detection นี้ใช้ NodeMCU ESP8266 อ่านค่า Analog จาก Rain Drop Sensor ผ่านขา A0 แล้วส่งค่าขึ้น KiwisIoT Dashboard ผ่าน Wi-Fi เพื่อดูการเปลี่ยนแปลงของ Sensor จากระยะไกล จุดน่าสนใจคือ Code ยังไม่ได้กำหนด Threshold ว่าเท่าไรคือ “ฝนตก” แต่ส่ง Raw Sensor Value ไปยัง Channel 1 โดยตรง จึงเหมาะกับ Beginner ที่อยากเข้าใจ Flow ตั้งแต่ Sensor → ESP8266 → Wi-Fi → IoT Dashboard

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 เพื่อให้ผู้ใช้สังเกตการเปลี่ยนแปลงระหว่างพื้นผิวแห้งและเปียก

โปรเจกต์ตรวจหยดน้ำด้วย NodeMCU ESP8266 และ Rain Sensor
โปรเจกต์ Rain Detection ใช้ NodeMCU ESP8266 อ่าน Rain Drop Sensor แล้วส่งค่าไปยัง KiwisIoT Dashboard
Key Takeaways
  • 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 แล้วนำค่าดังกล่าวไปแสดงและส่งต่อ

Source ไม่ได้บอกทิศทางค่าตายตัว: บทความต้นฉบับบอกเพียงว่าค่าจะเปลี่ยนเมื่อ Plate เปียก จึงไม่ควรสร้างกฎเองว่า “ค่ายิ่งสูง = ฝนมาก” หรือ “ค่ายิ่งต่ำ = ฝนมาก” หากยังไม่ได้ Calibration กับ Sensor ตัวจริง

Architecture ของระบบ: จากหยดน้ำไปถึง Dashboard

Rain / Water Droplets
↓ Rain Drop Sensor
↓ Analog Output
NodeMCU ESP8266
↓ Wi-Fi
KiwisIoT
↓ Gauge / Graph Dashboard

Flow นี้เป็นพื้นฐานของ IoT Sensor Project หลายประเภท:

  1. Sensor รับข้อมูลจากโลกจริง
  2. Microcontroller อ่านค่า Sensor
  3. Board เชื่อม Network
  4. ข้อมูลถูกส่งไปยัง IoT Platform
  5. Dashboard แสดงค่าให้ผู้ใช้ดู

Official KiwisIoT Repository อธิบาย Library ว่าเป็น MQTT-based IoT SDK สำหรับ ESP8266 และ ESP32 พร้อมฟังก์ชันช่วยเชื่อม Wi-Fi, Publish/Subscribe และสื่อสารกับ KiwisIoT Platform

Hardware และ Software ที่ใช้

อุปกรณ์ที่ใช้ในโปรเจกต์ NodeMCU ESP8266 Rain Detection
Project ใช้อุปกรณ์พื้นฐานไม่กี่ชิ้น เหมาะสำหรับการเรียนรู้ Sensor และ IoT Dashboard
รายการ หน้าที่
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 Detection
ภาพประกอบอุปกรณ์จาก Project ต้นฉบับ
อุปกรณ์สำหรับต่อ NodeMCU ESP8266 และ Rain Sensor
ภาพอุปกรณ์ที่ใช้ประกอบระบบตาม Source
ชุดอุปกรณ์ในโปรเจกต์ IoT Rain Detection
ชุด Hardware ของ Project ในขั้นเตรียมอุปกรณ์

ต่อ Rain Sensor กับ NodeMCU ESP8266 อย่างไร?

การต่อ Rain Sensor เข้ากับ NodeMCU ESP8266
Wiring ตาม Project ใช้ Analog Output ของ Rain Sensor ต่อเข้าขา A0 ของ NodeMCU ESP8266
Rain Sensor NodeMCU ESP8266
VCC 3.3V
GND GND
AO A0

Source ใช้เฉพาะ Analog Output หรือ AO สำหรับโปรเจกต์นี้

ไม่เพิ่ม Digital Output เอง: Rain Sensor Module บางรุ่นอาจมี DO แต่ Source ของ Project นี้ไม่ได้ใช้ DO ดังนั้น Wiring และ Code ในบทความจะยึด AO → A0 เท่านั้น

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

หน้าตั้งค่า KiwisIoT Dashboard สำหรับ Rain Sensor
ผู้สร้างสร้าง Dashboard บน KiwisIoT แล้วใช้ Channel 1 สำหรับแสดง Rain Sensor Value

ใน Project ผู้สร้างสร้าง Dashboard แล้วกำหนด:

Channel 1 – Rain Sensor Value

จากนั้นสามารถเพิ่ม Gauge หรือ Graph เพื่อดูค่าที่เปลี่ยนไปจาก Sensor

หลังสร้าง Dashboard ผู้สร้างนำ Topic ID ไปใส่ใน Arduino Program เพื่อให้ Device ส่งข้อมูลมายัง Dashboard ที่ถูกต้อง

ใช้ Topic ID ของตัวเอง: ค่า Topic ใน Code ต้นฉบับเป็นค่า Example ของผู้สร้าง เมื่อนำ Project ไปทดลอง ควรใช้ Topic ID จาก Dashboard ของผู้ใช้เอง เช่นเดียวกับ SSID และ Wi-Fi Password

Arduino Code: อ่าน A0 แล้วส่งไป KiwisIoT Channel 1

Code ต้นฉบับมี Flow ค่อนข้างตรง: เชื่อม KiwisIoT, อ่าน Rain Sensor, Print ค่าลง Serial และส่งค่าไป Channel 1

NodeMCU ESP8266 + Rain Sensor + KiwisIoT
#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);
}
แก้ Credential ก่อน Upload: ค่า ssid, pass และ topic ในตัวอย่างต้องเปลี่ยนเป็นข้อมูลของผู้ใช้เอง และไม่ควรเผยแพร่ Wi-Fi Password จริงใน Source Code สาธารณะ

Testing: เทียบค่าตอน Sensor แห้งกับตอนมีหยดน้ำ

ผู้สร้างเริ่มจากเปิด Serial Monitor แล้วทดสอบ Plate ในสภาพแห้ง เพื่อดูค่าที่ Sensor อ่านได้

จากนั้นค่อย ๆ เติมหยดน้ำ ลงบน Sensing Plate

Source รายงานว่า Sensor Reading เริ่มเปลี่ยน เมื่อมีน้ำสัมผัสกับ Plate

ในเวลาเดียวกัน ข้อมูลบน KiwisIoT Dashboard ก็เปลี่ยนตามค่าที่ NodeMCU ส่งขึ้นไป

วิธีคิดที่ดีสำหรับ Beginner: ก่อนกำหนดคำว่า “ฝนตก” ควรเริ่มจากดู Raw Data ของ Sensor จริง และเข้าใจก่อนว่าค่าของ Sensor เปลี่ยนอย่างไรระหว่างสภาพแห้งกับเปียก

ดู Sensor Value ผ่าน KiwisIoT Dashboard

KiwisIoT Dashboard แสดงค่าจาก Rain Sensor
Sensor Reading ไม่ได้อยู่แค่ใน Serial Monitor แต่ถูกส่งผ่าน Wi-Fi ไปแสดงบน KiwisIoT Dashboard

ส่วนที่เปลี่ยน Project ธรรมดาให้เป็น IoT คือข้อมูลไม่ได้หยุดอยู่ที่ ESP8266

Code ใช้: kiwisiot.send("1", rainValue); เพื่อส่ง Sensor Value ไปยัง Channel 1

ทำให้ผู้ใช้สามารถดูการเปลี่ยนแปลง ผ่าน Dashboard แทนที่จะต้องต่อคอมพิวเตอร์และเปิด Serial Monitor ตลอดเวลา

อีกหน้าจอของ KiwisIoT Dashboard สำหรับ Rain Sensor
ภาพ Dashboard เพิ่มเติมจาก Project ต้นฉบับ

ทำไม Project นี้ยังไม่ได้บอกว่า “ค่าเท่าไรคือฝนตก”?

Code ต้นฉบับไม่มี Threshold Logic สำหรับแบ่งค่าของ Sensor เป็นสถานะ

ไม่มีเงื่อนไขประเภท:

if (rainValue < threshold)

และไม่มี Output เป็นคำว่า:

  • Dry
  • Rain
  • Light Rain
  • Heavy Rain

นั่นทำให้ Project นี้เหมาะกับการเรียนรู้ขั้นแรก: อ่าน Raw Value และดูว่าค่าเปลี่ยนตามสภาพจริงอย่างไร

อย่าสร้าง Threshold กลางใช้กับทุก Sensor: Source ไม่ได้ให้ค่ามาตรฐาน และ Sensor Module / สภาพพื้นผิว / น้ำ อาจทำให้ Reading แตกต่างกัน บทความนี้จึงไม่กำหนด Threshold เพิ่มเอง

ข้อจำกัดของ 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 เพื่อปิดหน้าต่างอัตโนมัติเมื่อพบฝนได้

แต่ Motor Control ยังไม่ใช่ Build ปัจจุบัน: Source ไม่ได้ให้ Motor, Motor Driver, Relay Wiring, Voltage, Current หรือ Automatic Window Code ดังนั้นบทความนี้จะไม่แต่งส่วนเหล่านั้นเพิ่ม

Beginner เรียนรู้อะไรจาก Project นี้ได้?

โปรเจกต์นี้เล็ก แต่มีองค์ประกอบ IoT ครบหลายขั้น จึงเหมาะกับการเรียนรู้พื้นฐานมาก

  1. อ่าน Analog Sensor ผ่านขา A0
  2. ดู Raw Value ผ่าน Serial Monitor
  3. เชื่อม ESP8266 กับ Wi-Fi
  4. ใช้ Library เชื่อม IoT Platform
  5. Mapping Sensor Value เข้ากับ Dashboard Channel
  6. ทดสอบ Sensor กับสภาพจริง
  7. แยกสิ่งที่วัดจริง ออกจากสิ่งที่ต้องเพิ่ม 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 ต่างกัน

Disclaimer: บทความนี้เป็นการสรุปและเรียบเรียงจากแหล่งข้อมูลภาษาอังกฤษ อาจมีความคลาดเคลื่อน กรุณาตรวจสอบ Source ต้นฉบับก่อนลงมือทำ

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 ขึ้นเอง

แท็ก


Blog posts