ESP32 + CLS-24BP ตรวจน้ำผ่านผนัง แล้วส่งสถานะด้วย ESP-NOW

ไม่ต้องเจาะถัง SemLab CLS-24BP ตรวจน้ำผ่านผนัง แล้วส่งสถานะด้วย ESP-NOW

ถ้าอยากรู้ว่าน้ำขึ้นมาถึงระดับที่กำหนดหรือยัง ปกติเราอาจนึกถึง Float Switch หรือ Sensor ที่ต้องสัมผัสน้ำโดยตรง แต่โปรเจกต์นี้เลือกอีกทาง: ติด Sensor ไว้ด้านนอกถัง แล้วตรวจของเหลวผ่านผนังโดยไม่ต้องเจาะถังเลย

ระบบใช้ SemLab CLS-24BP เป็น Contactless Capacitive Sensor และใช้ ESP32 สองตัวส่งสถานะระหว่างกันผ่าน ESP-NOW โดยไม่ต้องมี Wi-Fi Router เป็นตัวกลาง สำหรับการสื่อสารหลักของระบบ

Contactless water level monitoring ด้วย ESP32 และ ESP-NOW
โปรเจกต์ตรวจของเหลวแบบไม่สัมผัส แล้วส่งสถานะจาก ESP32 ฝั่งถัง ไปยัง ESP32 Receiver ผ่าน ESP-NOW
Key Takeaways
  • CLS-24BP ตรวจ Liquid Presence ผ่านผนังโดยไม่สัมผัสน้ำ
  • Source ระบุรองรับ Glass, Plastic และ Ceramic ได้ถึงประมาณ 20 mm
  • Supply 5–24V และใช้ Open-collector Output
  • NPN = LOW เมื่อตรวจพบของเหลว
  • PNP = HIGH เมื่อตรวจพบของเหลว
  • ESP32 Transmitter ส่งสถานะทุกประมาณ 1 วินาที
  • ESP-NOW ใช้ Broadcast ใน Code ตัวอย่าง
  • Sensor 1 ตัวตรวจได้เพียง 1 ระดับ ไม่ใช่ Continuous Level
Sensor CLS-24BP
Controller ESP32 ×2
Wireless ESP-NOW
TX Interval ~1 second

Project นี้ทำอะไร?

ระบบมี ESP32 สองฝั่ง: ฝั่ง Transmitter อยู่กับถังน้ำ และฝั่ง Receiver อยู่ที่จุดแสดงผล

Data Flow

น้ำในถัง
→
CLS-24BP
→
ESP32 TX
→
ESP-NOW
→
ESP32 RX

Receiver ใน Demo ต่อกับ Laptop และแสดงผลผ่าน Serial Monitor

SemLab CLS-24BP คืออะไร?

SemLab CLS-24BP contactless liquid level sensor
SemLab CLS-24BP เป็น Sensor แบบ Capacitive สำหรับตรวจของเหลวจากด้านนอกภาชนะ

Sensor ใช้หลัก Capacitive / Charge-transfer Sensing เพื่อตรวจการเปลี่ยนแปลงทางไฟฟ้า เมื่อมีของเหลวอยู่หลังผนังภาชนะ

Official Repository ระบุ Specification หลัก:

Parameter ข้อมูล
Operating Voltage 5–24V DC
Output Open-collector NPN / PNP
Response Time ≤800 ms
Wall Thickness ≤20 mm ตาม Source
Sensitivity ปรับด้วย Trimpot
Protection Bare PCB = IP00

Sensor 1 ตัวไม่ได้วัดน้ำเป็นเปอร์เซ็นต์

จุดนี้ต้องเข้าใจก่อน: CLS-24BP ในระบบนี้ทำหน้าที่เป็น Point-level Detector

หมายความว่า Sensor ตอบคำถามว่า:

มีของเหลวอยู่ตรงความสูงที่ติด Sensor หรือไม่?

Sensor ตัวเดียวจึงไม่ได้ให้ค่า:

  • 35%
  • 62%
  • ระดับน้ำเป็น cm
  • จำนวนลิตร

ถ้าต้องการ Full / Half / Low ต้องใช้ Sensor หลายตัว ติดไว้คนละระดับ

Pinout และ NPN / PNP

Pin Function
VIN Power 5–24V
MODE Floating = NPN / GND = PNP
OUT Digital transistor output
GND System Ground
Mode Liquid Detected No Liquid
NPN LOW HIGH / pulled toward VIN
PNP HIGH LOW
Project README มีข้อความบางส่วนสลับ NPN / PNP
บทความนี้ใช้ Main Article และ Official SemLab Hardware Repository เป็นหลัก: NPN = Active-Low, PNP = Active-High

อุปกรณ์ที่ใช้

Component Quantity
SemLab CLS-24BP 1
ESP32 Development Board 2
3.7V LiPo 1
5V Boost Converter 1
Slide Switch 1
Jumper Wires ตามต้องการ

Architecture ของระบบ Wireless Water Monitoring

Transmitter → Receiver

CLS-24BP
Digital State
→
GPIO13
ESP32 TX
→
ESP-NOW
→
ESP32 RX
Serial Monitor

Circuit / Wiring ของ Project

Main Source ระบุว่า:

  • CLS-24BP OUT → GPIO13
  • MODE → Floating เพื่อใช้ NPN
  • LiPo 3.7V → 5V Boost Converter
  • 5V ใช้จ่าย ESP32 และ CLS-24BP
  • Receiver เป็น ESP32 ที่ต่อกับ Laptop
ดู Circuit Diagram ฉบับเต็มจาก Source
เพื่อรักษารายละเอียด Wiring ตามต้นฉบับ ผมไม่วาด Pin Connection เพิ่มเอง

จุดสำคัญ: 5V Sensor Output กับ ESP32 GPIO

Main Project ต่อ OUT ของ CLS-24BP เข้ากับ GPIO13 โดยตรง

แต่ Official Sensor Repository ระบุว่าใน NPN Mode เมื่อ Output ไม่ Active OUT สามารถอยู่ที่ระดับ HIGH ไปทาง VIN

ถ้า Sensor ใช้ VIN = 5V ต้องตรวจ Logic Level ก่อนต่อ ESP32 โดยตรง

บทความนี้จะไม่สร้าง Voltage Divider หรือ Level Shifter เพิ่มขึ้นเอง เพราะ Main Project ไม่ได้ให้วงจรดังกล่าว

ก่อนประกอบจริง ให้ตรวจ Schematic ของ Sensor และ Electrical Specification ของ ESP32 Board รุ่นที่ใช้อยู่

ESP-NOW ทำงานอย่างไร?

ESP-NOW ทำให้ ESP32 สื่อสารกับ ESP32 อีกตัว โดยไม่ต้องใช้ Wi-Fi Router เป็นตัวกลางใน Data Path นี้

Transmitter ทำงานตาม Flow:

  1. ตั้ง WIFI_STA
  2. Initialize ESP-NOW
  3. Register Peer
  4. อ่าน GPIO13
  5. สร้าง Boolean liquidDetected
  6. ส่ง Packet
  7. รอประมาณ 1 วินาทีแล้วส่งใหม่

Code ใช้:

FF:FF:FF:FF:FF:FF

ซึ่งเป็น Broadcast Address ไม่ใช่ MAC Address เฉพาะของ Receiver

Project ไม่ได้วัด Latency เป็นมิลลิวินาที
ผู้สร้างบอกเพียงว่า ในการ Demo ไม่เห็น Delay ชัดเจน จึงไม่ควรเรียกว่า Zero Latency แบบข้อเท็จจริง

Transmitter Code

ESP32 TX
const int SensePin = 13;

uint8_t broadcastAddress[] = {
  0xFF, 0xFF, 0xFF,
  0xFF, 0xFF, 0xFF
};

typedef struct struct_message {
  bool liquidDetected;
} struct_message;

struct_message myData;

void loop() {
  bool currentState = !digitalRead(SensePin);

  myData.liquidDetected = currentState;

  esp_now_send(
    broadcastAddress,
    (uint8_t *) &myData,
    sizeof(myData)
  );

  delay(1000);
}

การใช้ ! เกิดจาก Project ใช้ NPN Mode ซึ่ง Sensor เป็น LOW เมื่อพบของเหลว

Receiver Code

ESP32 RX
void OnDataRecv(
  const esp_now_recv_info *info,
  const uint8_t *data,
  int len
) {
  memcpy(
    &incomingData,
    data,
    sizeof(incomingData)
  );

  if (incomingData.liquidDetected) {
    Serial.println("Received: Liquid Detected");
  } else {
    Serial.println("Received: No Liquid Available");
  }
}

Testing: Sensor ตรวจน้ำผ่านผนังภาชนะจริง

SemLab CLS-24BP ตรวจน้ำผ่านผนังขวดจากด้านนอก
GIF จาก Project Repository: Sensor ถูกติดอยู่นอกภาชนะ และตอบสนองเมื่อระดับน้ำผ่านตำแหน่ง Sensor

ใน NPN Mode:

  • น้ำยังไม่ถึง Sensor → OUT เป็น HIGH
  • น้ำขึ้นถึง Sensor → OUT ลง LOW

ESP32 ฝั่ง TX กลับ Logic ด้วย !digitalRead() ก่อนส่งไปยัง Receiver

ถ้าต้องการ Full / Half / Empty ต้องใช้หลาย Sensor

Source ระบุชัดว่า ต้องใช้ Sensor หนึ่งตัวต่อหนึ่งระดับ

Sensor Position ตัวอย่างสถานะ
ด้านบน Full
ตรงกลาง Half
ด้านล่าง Low / Empty Threshold
หลาย Sensor ก็ยังเป็น Multiple Point Detection
ไม่ใช่ Continuous Level Measurement แบบ 0–100%

Troubleshooting จาก Source

อาการ สาเหตุที่ควรตรวจ
LED ไม่ติด Power, Polarity, Supply ต่ำกว่า 5V, Sensitivity
Output Flicker Air Gap, Supply Noise, Turbulence
Reading กลับด้าน MODE และ Code Logic ไม่ตรงกัน
Receiver ไม่ได้ข้อมูล ESP-NOW Init, WIFI_STA หรือระยะระหว่าง Board

Open-source Hardware: CAD / Gerber / Firmware

Official SemLab Repository เปิดไฟล์ของ CLS-24BP ไว้หลายส่วน:

  • Firmware
  • Schematic
  • PCB Design
  • BOM
  • Gerber
  • Pick & Place
  • STEP / OBJ / MTL Enclosure CAD
มี CAD Enclosure แต่ไม่มีเครื่องพิมพ์ 3D?
สามารถส่งไฟล์ CAD ให้ทีม GlobalByte ช่วยประเมินบริการพิมพ์ 3D ได้ โดย Source ไม่ได้ให้ Print Settings จึงต้องประเมินตามไฟล์และเครื่องจริง

ดู Contactless Water Sensor ทำงานจริง

Source / Code / Documentation

FAQ

1. Sensor ต้องโดนน้ำไหม?

ไม่ ตัว Sensor ถูกติดอยู่นอกภาชนะ และตรวจของเหลวผ่านผนัง

2. ผนังหนาได้เท่าไร?

Source ระบุสูงสุดประมาณ 20 mm สำหรับวัสดุที่เหมาะสม

3. ตรวจผ่านถังโลหะได้ไหม?

Source ไม่ได้แนะนำถังโลหะ และระบุ Use Case หลักเป็นวัสดุ non-metal

4. Sensor 1 ตัวรู้ระดับน้ำเป็นเปอร์เซ็นต์ไหม?

ไม่ Sensor หนึ่งตัวเป็น Point-level Detector

5. NPN Mode คืออะไร?

MODE Floating และ OUT เป็น LOW เมื่อ Sensor ตรวจพบของเหลว

6. PNP Mode คืออะไร?

MODE ต่อ GND และ OUT เป็น HIGH เมื่อตรวจพบของเหลว

7. ทำไม Code ใช้ !digitalRead()?

เพราะ Project ใช้ NPN Mode ซึ่ง Active-Low

8. ESP-NOW ต้องมี Router ไหม?

Direct ESP-NOW Communication ใน Project นี้ไม่ต้องใช้ Router เป็นตัวกลาง

9. Project ส่งข้อมูลบ่อยแค่ไหน?

Code ใช้ delay(1000) จึงส่งประมาณทุก 1 วินาที

10. FF:FF:FF:FF:FF:FF คืออะไร?

เป็น Broadcast Address ไม่ใช่ MAC เฉพาะของ Receiver

11. ESP-NOW เปิด Encryption ไหม?

Code ตัวอย่างตั้ง peerInfo.encrypt = false

12. ESP-NOW ส่งได้ไกลเท่าไร?

Source ไม่ได้ให้ Range Benchmark ของ Build นี้

13. Battery ใช้ได้นานเท่าไร?

Source ไม่ได้ระบุ LiPo Capacity หรือ Runtime

14. Sensor กันน้ำไหม?

Bare PCB ถูกระบุเป็น IP00 และต้องพึ่ง Enclosure หากใช้ในสภาพแวดล้อมที่มีน้ำหรือความชื้น

15. ต่อ Pump ได้เลยไหม?

Source พูดถึงการขยายไป Relay แต่ไม่ได้ให้ Pump Wiring หรือ Load Specification

16. มีไฟล์ CAD ไหม?

มี CAD Enclosure ใน Official SemLab Repository

ไม่สัมผัสน้ำ ไม่ต้องเดินสายสัญญาณยาว และขยายหลายระดับได้

จุดเด่นของ Project นี้ คือการแยก Sensor ออกจากของเหลว และแยก Transmitter ออกจาก Receiver ด้วย ESP-NOW

สำหรับงานที่ต้องรู้เพียงว่า น้ำขึ้นมาถึงจุดหนึ่งแล้วหรือยัง CLS-24BP เป็นแนวคิดที่ตรงกับโจทย์มาก เพราะสามารถติดภายนอกผนัง และปรับ Sensitivity ได้

แต่ต้องเข้าใจข้อจำกัด: Sensor หนึ่งตัวไม่ได้ให้ Continuous Level และ Wiring ระหว่าง Sensor 5V กับ ESP32 GPIO ควรตรวจ Logic Level อย่างละเอียดก่อนประกอบจริง

References / แหล่งข้อมูลต้นฉบับ

กำลังทำ ESP32, ESP-NOW หรือ Sensor Monitoring Project?

หากกำลังเลือก ESP32, Development Board, Sensor หรือ Module สำหรับ Wireless Monitoring Project สามารถสอบถามทีม GlobalByte เรื่อง Hardware ที่เหมาะกับ Requirement ได้

Disclaimer: บทความนี้เป็นการสรุปและเรียบเรียงจากแหล่งข้อมูลภาษาอังกฤษ อาจมีความคลาดเคลื่อน กรุณาตรวจสอบ Source ต้นฉบับก่อนลงมือทำ CLS-24BP เป็น Point-level Contactless Liquid Sensor ไม่ใช่ Continuous Level Sensor และ Sensor หนึ่งตัวตรวจเฉพาะระดับที่ติดตั้ง Official Hardware Source ระบุ Supply 5–24V และ NPN Output สามารถอยู่ที่ระดับ High ไปทาง VIN เมื่อไม่ Active ขณะที่ Project ต่อ OUT เข้ากับ ESP32 GPIO13 โดยตรง จึงควรตรวจ Logic-level Compatibility กับ ESP32 Board ที่ใช้จริงก่อนประกอบ บทความนี้ไม่ได้สร้าง Level Shifter, Voltage Divider, Relay/Pump Wiring หรือ Battery Protection Circuit เพิ่มเอง เนื่องจาก Source ไม่ได้ให้รายละเอียดดังกล่าว

 

แท็ก


Blog posts