ESP32 Relay Active LOW คืออะไร? ทำไมสั่ง LOW แล้วรีเลย์ถึงทำงาน

หลายคนเริ่มต่อรีเลย์กับ ESP32 แล้วงงทันที: ทำไมสั่ง LOW แล้วรีเลย์ดันติด? ทั้งที่ในความรู้สึกของมือใหม่ เรามักคิดว่า HIGH น่าจะหมายถึง “เปิด” มากกว่า

ถ้าคุณกำลังเจออาการรีเลย์ทำงานกลับด้าน รีเลย์ติดเองตอนเปิดเครื่อง หรือเขียนโค้ดแล้ว ON/OFF ไม่ตรงที่คิด บทความนี้จะอธิบายให้เข้าใจแบบภาษาคนทำของ พร้อมตัวอย่างวงจร ตัวอย่างโค้ด และวิธีแก้ปัญหาแบบใช้ได้จริงกับงาน ESP32, Smart Farm, ระบบเปิด-ปิดปั๊มน้ำ, พัดลม และ Automation

  • “ถ้าคุณยังใหม่กับบอร์ดตัวนี้ แนะนำให้อ่าน ESP32 คืออะไร ก่อน จะเห็นภาพเร็วขึ้นว่า ESP32 เอาไปคุมรีเลย์ ปั๊มน้ำ หรือระบบ IoT ได้ยังไง”
  • “ถ้าคุณอยากไล่จากพื้นฐานไปจนถึงงานใช้งานจริง ลองดูหมวด Tutorials ของ Deva DIY ได้เลย”

รีเลย์ Active LOW คืออะไร

รูปโมดูลรีเลย์แบบ Active LOW แบบต่างๆ

ความหมายของ Active LOW แบบ Maker

คำว่า Active LOW หมายถึง อุปกรณ์ตัวนั้นจะเริ่มทำงานเมื่อขาควบคุมถูกดึงลงเป็นลอจิกต่ำ หรือก็คือ LOW

ในกรณีของโมดูลรีเลย์ ถ้าบอร์ดเป็นแบบ Active LOW:

  • สั่ง LOW = รีเลย์ทำงาน
  • สั่ง HIGH = รีเลย์หยุดทำงาน

ดังนั้นถ้าคุณเพิ่งเริ่มใช้ ESP32 แล้วลองเขียนแบบนี้:

digitalWrite(relayPin, LOW);

แล้วรีเลย์ “ติด” ขึ้นมา นี่ไม่ใช่บั๊ก แต่เป็นพฤติกรรมปกติของรีเลย์แบบ Active LOW

ทำไม LOW ถึงกลายเป็นสั่งให้รีเลย์ทำงาน

เพราะขา IN ของโมดูลรีเลย์ไม่ได้ไปขับคอยล์โดยตรงเสมอไป แต่ผ่านวงจรช่วยขับ เช่น ทรานซิสเตอร์หรือออปโตคัปเปลอร์ ทำให้บางรุ่นออกแบบให้ “ดึงลงกราวด์” แล้ววงจรเริ่มนำกระแสทันที

Active LOW ต่างจาก Active HIGH ยังไง

ประเภทสั่งให้ทำงานสั่งให้หยุดทำงาน
Active LOWLOWHIGH
Active HIGHHIGHLOW

จำง่าย ๆ: คำว่า “Active” หมายถึง “สถานะที่ทำให้มันเริ่มทำงาน” ไม่ได้แปลว่าค่า HIGH เสมอไป

ทำไมโมดูลรีเลย์หลายรุ่นถึงเป็น Active LOW

วงจรทรานซิสเตอร์และออปโตคัปเปลอร์เกี่ยวอะไร

โมดูลรีเลย์หลายรุ่นมีวงจรขับในตัว เช่น ทรานซิสเตอร์และออปโตคัปเปลอร์ เพื่อให้ไมโครคอนโทรลเลอร์อย่าง ESP32 ไม่ต้องขับโหลดโดยตรง วงจรลักษณะนี้มักออกแบบให้ขา IN ตอบสนองเมื่อถูกดึงลง LOW

ทำไมผู้ผลิตชอบออกแบบแบบนี้

เพราะออกแบบง่าย ใช้ร่วมกับบอร์ดยอดนิยมได้กว้าง และทำให้วงจร trigger ทำงานผ่านการดึงสัญญาณลงกราวด์ได้สะดวก โดยเฉพาะโมดูลรีเลย์ที่มีวงจรแยกอินพุตกับภาคขับ

รีเลย์ 5V ที่ใช้กับ ESP32 มักเจอลอจิกแบบไหน

ในงานจริง โมดูลรีเลย์ 5V จำนวนมากที่ขายทั่วไปมักเป็นแบบ low level trigger หรือ Active LOW ดังนั้นก่อนเขียนโปรเจกต์จริง ควรเช็กเสมอว่าบอร์ดของคุณสั่งงานด้วย LOW หรือ HIGH

Tip จากหน้างาน:
อย่าเดาจากชื่อสินค้าอย่างเดียว บางร้านเขียนแค่ “Relay Module 5V” แต่ไม่ได้บอกว่าลอจิกเป็น Active LOW หรือ Active HIGH ให้ทดสอบจริงสั้น ๆ ก่อนเสมอ

ESP32 สั่งรีเลย์ Active LOW ทำงานอย่างไร

ตารางเปรียบเทียบรีเลย์ Active LOW และ Active HIGH สำหรับ ESP32

HIGH = ปิด, LOW = เปิด

สำหรับรีเลย์ Active LOW เราคิดแบบนี้ได้เลย:

  • digitalWrite(pin, LOW) = เปิดรีเลย์
  • digitalWrite(pin, HIGH) = ปิดรีเลย์

ตารางลอจิกที่ควรเข้าใจ

ค่า GPIO จาก ESP32สถานะรีเลย์ความหมาย
LOWONรีเลย์ทำงาน / หน้าสัมผัสเปลี่ยนสถานะ
HIGHOFFรีเลย์ไม่ทำงาน

จุดที่มือใหม่พลาดบ่อยไม่ใช่แค่เรื่อง Active LOW แต่คือการเลือกขา GPIO ให้เหมาะกับงานด้วย เพราะ ESP32 บางขามีพฤติกรรมพิเศษตอนบูต ถ้าคุณยังไม่แน่ใจเรื่องนี้ แนะนำให้อ่าน ESP32 GPIO / Pinout DevKit V1 ควบคู่ไปด้วย

ตัวอย่างการคิดแบบไม่งงเวลาเขียนโค้ด

มือใหม่มักเขียนแบบนี้แล้วงง:

digitalWrite(relayPin, HIGH); // คิดว่าเปิด
digitalWrite(relayPin, LOW);  // คิดว่าปิด

แต่ถ้าโมดูลคุณเป็น Active LOW มันจะกลับกันทั้งหมด ทางที่ดีกว่าคือกำหนดค่าคงที่ไว้ตั้งแต่ต้น:

const int RELAY_ON  = LOW;
const int RELAY_OFF = HIGH;

พอทำแบบนี้ โค้ดจะอ่านง่ายและไม่งงตอนกลับมาแก้ทีหลัง

การต่อวงจร ESP32 กับ Relay Active LOW

ขา VCC, GND, IN ต่ออย่างไร

ตัวอย่างการต่อเบื้องต้นสำหรับรีเลย์ 1 ช่อง:

  • VCC ของรีเลย์ → 5V
  • GND ของรีเลย์ → GND ร่วมกับ ESP32
  • IN ของรีเลย์ → GPIO ของ ESP32 เช่น GPIO23

รีเลย์ 5V ใช้กับ ESP32 3.3V ได้ไหม

หลายโมดูลใช้ได้ แต่ไม่ใช่ทุกโมดูลจะตอบสนองเหมือนกัน บางรุ่น trigger ได้ด้วย 3.3V จาก ESP32 แต่บางรุ่นอาจทำงานไม่เสถียร ต้องทดสอบจริง หรือเลือกโมดูลที่ระบุชัดว่าใช้กับ 3.3V logic ได้

ข้อควรระวังเรื่องไฟเลี้ยง

  • อย่าดึงไฟจากขา 3.3V ของ ESP32 ไปเลี้ยงรีเลย์ 5V โดยตรง
  • ถ้าใช้หลายช่องหรือมีโหลดจริง ควรใช้แหล่งจ่าย 5V ที่กระแสพอ
  • GND ของ ESP32 กับรีเลย์ควรอ้างอิงร่วมกัน ถ้าโมดูลนั้นต้องใช้กราวด์ร่วม
ข้อควรระวัง:
ถ้าคุณเอารีเลย์ไปคุมปั๊มน้ำ มอเตอร์ หรือโหลด AC จริง ควรแยกเรื่อง “ภาคควบคุม” กับ “ภาคกำลัง” ให้ชัด และตรวจสอบพิกัดรีเลย์เสมอ
  • ถ้าคุณอยากเห็นภาพการใช้งานรีเลย์กับ ESP32 แบบต่อยอดจากบทความนี้ ลองดูตัวอย่างในบทความ ESP32 Web Server Control Relay Module ซึ่งจะเห็นทั้งแนวคิดการควบคุมอุปกรณ์และการต่อใช้งานจริงมากขึ้น

ตัวอย่างโค้ด ESP32 ควบคุมรีเลย์ Active LOW

โค้ดเปิด-ปิดพื้นฐาน

const int relayPin = 23;

// สำหรับรีเลย์แบบ Active LOW
const int RELAY_ON  = LOW;
const int RELAY_OFF = HIGH;

void setup() {
  pinMode(relayPin, OUTPUT);

  // ปิดรีเลย์ไว้ก่อนทันทีหลังเริ่มต้น
  digitalWrite(relayPin, RELAY_OFF);

  Serial.begin(115200);
  Serial.println("Start relay test");
}

void loop() {
  Serial.println("Relay ON");
  digitalWrite(relayPin, RELAY_ON);
  delay(2000);

  Serial.println("Relay OFF");
  digitalWrite(relayPin, RELAY_OFF);
  delay(2000);
}
รูปโมดูลรีเลย์แบบ Active LOW และ Code การสั่งงานรีเลย์

ทำไมต้องใช้ RELAY_ON และ RELAY_OFF

เพราะเวลาคุณเปลี่ยนไปใช้รีเลย์อีกยี่ห้อหนึ่งที่เป็น Active HIGH คุณแก้แค่ 2 บรรทัดนี้พอ:

const int RELAY_ON  = HIGH;
const int RELAY_OFF = LOW;

ตรรกะส่วนอื่นของโปรแกรมยังใช้เหมือนเดิมได้หมด

ตั้งค่าเริ่มต้นยังไงไม่ให้รีเลย์ติดเอง

หลักคิดคือกำหนดขาเป็น OUTPUT แล้วสั่งสถานะ OFF ให้เร็วที่สุดใน setup() แต่ต้องเข้าใจด้วยว่าในช่วงบูตของ ESP32 บางขาอาจมีพฤติกรรมพิเศษอยู่แล้ว ดังนั้นการเลือก GPIO ที่เหมาะสมก็สำคัญมาก

ปัญหายอดฮิตที่มือใหม่เจอเมื่อใช้รีเลย์ Active LOW

1) รีเลย์ติดเองตอนเปิดเครื่อง

ปัญหานี้เจอบ่อยมาก โดยเฉพาะถ้าไปใช้ขา GPIO ที่มีผลต่อการบูตของ ESP32 หรือขาที่มีสถานะเปลี่ยนช่วง startup

แนวทางแก้:

  • หลีกเลี่ยงการใช้ขา strapping pins กับรีเลย์ ถ้าไม่จำเป็น
  • ตั้งค่า OUTPUT และสั่ง OFF ให้เร็วใน setup()
  • เลือกขาที่ปลอดภัยกว่า เช่น GPIO23, GPIO25, GPIO26, GPIO27, GPIO32, GPIO33 ตามลักษณะโปรเจกต์

ถ้าคุณเจออาการรีเลย์ติดเองตอนเปิดเครื่องหรือรีเซตบอร์ด ปัญหามักไม่ได้อยู่ที่รีเลย์อย่างเดียว แต่อยู่ที่ขา GPIO ที่เลือกใช้ด้วย ลองเช็กขาที่เกี่ยวกับการบูตจากบทความ ESP32 Pinout แล้วเทียบกับขาที่คุณใช้อยู่

2) สั่ง ON/OFF แล้วกลับด้าน

อันนี้ง่ายสุด: คุณใช้รีเลย์ Active LOW แต่ไปเขียนโค้ดแบบ Active HIGH

วิธีแก้คือเปลี่ยนแนวคิดใหม่:

const int RELAY_ON  = LOW;
const int RELAY_OFF = HIGH;

3) รีเลย์กระพริบหรือเด้งตอนบูต

ถ้ารีเลย์มีการเปลี่ยนสถานะตอนเปิดไฟหรือรีสตาร์ต แม้โปรแกรมจะยังไม่เริ่มจริง ให้สงสัยเรื่อง GPIO ตอน startup ก่อนเลย

4) ใช้ GPIO บางขาแล้วบอร์ดบูตไม่ขึ้น

นี่เป็นอีกจุดที่มือใหม่พลาดบ่อย เพราะ ESP32 มีบางขาที่เกี่ยวกับการกำหนดโหมดบูต เช่น GPIO0, GPIO2, GPIO5, GPIO12 และ GPIO15 ถ้าเอารีเลย์ไปดึงสถานะผิดตอนเปิดเครื่อง อาจทำให้บอร์ดบูตผิดโหมดหรือมีอาการแปลกได้

คำแนะนำจากงานจริง:
ถ้าคุณเพิ่งเริ่มทำโปรเจกต์คุมรีเลย์ด้วย ESP32 และไม่อยากปวดหัวเรื่องบูต ให้เริ่มจาก GPIO23 หรือ GPIO26 ก่อน เป็นจุดเริ่มต้นที่ปลอดภัยและเข้าใจง่ายกว่า

จะรู้ได้อย่างไรว่ารีเลย์ของคุณเป็น Active LOW

รูปโมดูลรีเลย์แบบ Active LOW มีข้อความ Low level Trigger บนบอร์ด

ดูจากสกรีนบนโมดูล

บางบอร์ดพิมพ์ไว้เลยว่า LOW Level Trigger หรือ High/Low Trigger

ดูจากหน้าสินค้า/คู่มือ

ถ้าสินค้าระบุว่า “low level trigger relay module” ก็แปลว่าใช้ Active LOW

ทดสอบด้วยโค้ดสั้น ๆ

const int relayPin = 23;

void setup() {
  Serial.begin(115200);
  pinMode(relayPin, OUTPUT);

  digitalWrite(relayPin, HIGH);
  delay(2000);

  digitalWrite(relayPin, LOW);
  delay(2000);
}

void loop() {
}

ถ้าช่วงที่สั่ง LOW แล้วรีเลย์ดัง “ติ๊ก” หรือ LED บนโมดูลติด แปลว่ารีเลย์คุณเป็น Active LOW

Active LOW เหมาะกับงานแบบไหน

งานคุมปั๊มน้ำ

เช่น ระบบรดน้ำต้นไม้อัตโนมัติ เมื่อความชื้นดินต่ำกว่า setpoint ก็สั่ง RELAY_ON เพื่อเปิดปั๊มน้ำ

งานคุมพัดลมหรือไฟ

เช่น ระบบคุมอุณหภูมิในกล่องเพาะ ระบบฟาร์ม หรือระบบระบายอากาศในตู้ควบคุม

งานสมาร์ทฟาร์มและ Automation

งานจริงในสาย Maker มักไม่ได้มีแค่ “เปิด-ปิด” แต่มี logic ต่อเนื่อง เช่น อ่านเซนเซอร์ → ตัดสินใจ → สั่งรีเลย์ → แจ้งเตือน ซึ่งถ้าคุณเข้าใจ Active LOW ถูกตั้งแต่ต้น โค้ดทั้งระบบจะนิ่งขึ้นเยอะ

ถ้าคุณอยากต่อยอดเรื่องขา GPIO เพิ่ม อ่านต่อได้ที่ ESP32 Pinout และถ้าต้องการดูตัวอย่างการคุมรีเลย์ผ่านเว็บ ลองอ่าน ESP32 Web Server Control Relay Module

สรุปให้เข้าใจใน 1 นาที

ESP32 Relay Active LOW คือรีเลย์ที่ “สั่งให้ทำงานด้วย LOW” ไม่ใช่ HIGH

  • LOW = รีเลย์ทำงาน
  • HIGH = รีเลย์หยุดทำงาน
  • มือใหม่มักงงเพราะคิดว่า HIGH ต้องแปลว่าเปิดเสมอ
  • วิธีแก้ง่ายที่สุดคือใช้ RELAY_ON และ RELAY_OFF
  • อย่ามองแค่โค้ด ต้องดู GPIO ตอนบูตและวงจรรีเลย์ด้วย

ถ้าคุณเข้าใจจุดนี้ คุณจะต่อยอดไปงานเปิด-ปิดปั๊มน้ำ, พัดลม, ไฟ, สมาร์ทฟาร์ม หรือระบบ Automation ได้ง่ายขึ้นมาก และลดปัญหารีเลย์กลับด้านได้ตั้งแต่ต้น

ถ้าคุณเริ่มเข้าใจแล้วว่า Active LOW ทำงานยังไง และอยากต่อยอดไปเรื่องการคุมรีเลย์ผ่านเว็บ, การอ่านเซนเซอร์, การเลือก GPIO หรือการทำโปรเจกต์จริง ดูบทความต่อได้ที่หน้า Tutorials ของ Deva DIY ซึ่งรวมบทความสาย ESP32 และงาน Maker เอาไว้ให้แล้ว

FAQ: คำถามที่พบบ่อยเกี่ยวกับ ESP32 Relay Active LOW

รีเลย์ Active LOW คืออะไร

คือรีเลย์ที่สั่งให้ทำงานเมื่อขาควบคุมได้รับลอจิก LOW

เพราะโมดูลรีเลย์รุ่นนั้นออกแบบวงจร trigger ให้ตอบสนองเมื่ออินพุตถูกดึงลง LOW

Active LOW สั่งทำงานด้วย LOW ส่วน Active HIGH สั่งทำงานด้วย HIGH

ได้ ใช้กันเยอะมากในงานจริง แต่ต้องเข้าใจตรรกะและเลือก GPIO ให้เหมาะ

มักเกิดจากการใช้ GPIO ที่มีสถานะพิเศษตอนบูต หรือวงจรรีเลย์ตอบสนองไวมากตอน ESP32 เริ่มทำงาน

หลายโมดูลทำได้ แต่ไม่ใช่ทุกตัว ควรดูสเปกและทดสอบจริง

เริ่มจากขาที่ใช้งานทั่วไปและไม่ไปยุ่งกับการบูต เช่น GPIO23, GPIO25, GPIO26, GPIO27, GPIO32, GPIO33

ดูคำว่า low level trigger บนบอร์ดหรือทดสอบจริงด้วยโค้ดสั้น ๆ

กำหนดค่าคงที่ RELAY_ON และ RELAY_OFF ให้ตรงกับโมดูลที่ใช้

เหมาะกับงานคุมปั๊มน้ำ พัดลม หลอดไฟ โซลินอยด์ และระบบสมาร์ทฟาร์มทั่วไป

Shopping Cart
Scroll to Top