ARTICLE

GPIO คืออะไร? Digital Input/Output ของ ESP32 และ Microcontroller ทำงานอย่างไร.

อธิบาย GPIO แบบใช้งานจริง ตั้งแต่ Digital Input/Output, HIGH/LOW, floating input, pull-up/pull-down, boot pin และข้อจำกัดเรื่องแรงดัน/กระแส ก่อนนำ ESP32 ไปต่อ Sensor หรือ Relay

IoTElectricalMakerโดย Thospaakเผยแพร่ 10 ต.ค. 2569อัปเดต 10 ต.ค. 2569

GPIO (General-Purpose Input/Output) คือขาที่ Microcontroller ใช้อ่านสถานะจากโลกภายนอกหรือส่งสถานะออกไปควบคุมวงจรอื่น

มันคือจุดที่ Software เริ่มเชื่อมกับ Hardware จริง

ตัวอย่างงาน:

  • อ่านปุ่มกด;
  • อ่าน dry contact;
  • อ่าน reed switch;
  • รับสัญญาณ alarm;
  • เปิด LED;
  • สั่ง driver;
  • enable/disable module;
  • รับ interrupt จาก Sensor

แต่ GPIO ไม่ใช่ “ขาไฟอเนกประสงค์” ที่ต่อโหลดอะไรก็ได้

Digital Input คืออะไร

เมื่อใช้ GPIO เป็น input MCU จะตีความแรงดันที่ขานั้นเป็น logic state เช่น:

LOW
HIGH

ช่วงแรงดันจริงที่ถือเป็น LOW/HIGH ขึ้นกับ MCU และ datasheet

อย่าใช้กฎตายตัวว่า “ต่ำกว่า 1 V = LOW, เกิน 2 V = HIGH” กับทุก platform

Digital Output คืออะไร

เมื่อ GPIO เป็น output MCU สามารถขับ logic LOW/HIGH เพื่อส่ง control signal ไปวงจรอื่น

ตัวอย่าง:

GPIO HIGH
  ↓
MOSFET gate driver / relay module input
  ↓
Load circuit

ไม่ควรตีความว่า GPIO เป็นแหล่งจ่ายไฟสำหรับ Load

GPIO จ่ายกระแสได้เท่าไร

ขึ้นกับ chip/series และเงื่อนไขใน datasheet

ข้อผิดพลาดทั่วไปคืออ่านค่า maximum rating แล้วใช้เป็น design current ปกติ

ควรดู:

  • recommended operating condition;
  • per-pin drive capability;
  • total I/O current limitation;
  • voltage drop ที่ output;
  • simultaneous switching

สำหรับ Thospaak จะไม่ hard-code กระแส GPIO ค่าเดียวให้ ESP32 ทุก series เพราะ variant ต่างกัน

ทำไม Input ถึงลอยได้

ถ้า input ไม่ถูกผูกกับ HIGH หรือ LOW อย่างชัดเจน มันอาจรับ noise แล้วสลับสถานะเอง

เรียกว่า floating input

ตัวอย่าง:

GPIO input
   |
   +-- ไม่มี pull-up/pull-down
   |
   +-- สายยาว
   |
   +-- noise

ผลคือ firmware อาจเห็น ON/OFF โดยไม่มีเหตุการณ์จริง

วิธีแก้พื้นฐานคือใช้ pull-up/pull-down ที่เหมาะสม

อ่านต่อ: Pull-up และ Pull-down Resistor คืออะไร

Internal Pull-up ใช้ได้เสมอไหม

ไม่เสมอ

MCU บางขารองรับ internal pull resistor บางขาอาจไม่รองรับหรือมี behavior พิเศษ

และ internal pull resistance มักมี tolerance กว้างกว่าตัว resistor ภายนอก

งานที่มีสายยาว, noise, safety state หรือ interface เฉพาะอาจควรใช้ external resistor ที่ออกแบบชัดเจนกว่า

GPIO ของ ESP32 ทุกขาเหมือนกันไหม

ไม่เหมือนกัน

ขึ้นกับ series/board/module อาจมี:

  • input-only pin;
  • strapping/boot pin;
  • pin ที่ผูกกับ flash/PSRAM;
  • ADC-capable pin;
  • touch-capable pin;
  • peripheral function ต่างกัน

ดังนั้นอย่า copy pinout จากภาพ Google โดยไม่ตรวจ exact board/module revision

อ่านต่อ: ESP32 คืออะไร

Boot / Strapping Pin คืออะไร

MCU บางขาจะถูกอ่านตอน power-up/reset เพื่อกำหนด boot mode หรือ configuration

ถ้าเอา Sensor/Relay ไปดึงขานั้นผิดสถานะ อาจทำให้:

  • boot ไม่ขึ้น;
  • เข้า download mode;
  • start behavior ผิด;
  • output pulse ตอนเปิดเครื่อง

ระบบจริงต้องคิดถึง startup state ไม่ใช่ดูแค่ตอน firmware ทำงานแล้ว

GPIO Active HIGH กับ Active LOW

อุปกรณ์บางตัวทำงานเมื่อ signal เป็น LOW

เช่น relay module บางแบบ:

GPIO LOW -> Relay ON
GPIO HIGH -> Relay OFF

เรียกว่า active-low

ถ้า firmware assume active-high อาจเกิดสถานะกลับด้าน โดยเฉพาะช่วง boot

Dry Contact อ่านยังไง

Dry contact ไม่มีแรงดันของตัวเอง เป็นเพียง contact เปิด/ปิด

แนวคิดทั่วไป:

Vlogic
  |
 pull-up
  |
 GPIO ---- switch/contact ---- GND

แต่ระบบภาคสนามต้องดู cable length, surge/noise, ground reference และ isolation เพิ่ม

Open-Drain / Open-Collector เกี่ยวอะไรกับ GPIO

Output บางชนิดไม่ได้ขับ HIGH เอง แต่ทำหน้าที่ดึง line ลง LOW และใช้ pull-up ภายนอก

พบใน:

  • I2C;
  • alarm output บางชนิด;
  • industrial sensor interface บางแบบ

ดังนั้นก่อนต่อ output จาก Sensor เข้า GPIO ต้องรู้ electrical output type ไม่ใช่ดูเพียงว่าเขียนว่า “digital output”

GPIO ต่อ 5V ได้ไหม

อย่าสรุปว่าได้

Board อาจรับ 5 V ที่ USB/VIN แต่ GPIO logic อาจอยู่ 3.3 V

อ่านต่อ: 3.3V กับ 5V Logic Level ต่างกันอย่างไร

GPIO ขับ Relay ได้ไหม

GPIO ควรขับ interface/driver ไม่ใช่ coil/load โดยตรง

เช่น:

GPIO
 ↓
Transistor/MOSFET/driver
 ↓
Relay coil

หรือใช้ relay module ที่ออกแบบ input stage มาแล้ว แต่ยังต้องตรวจ logic level, current, isolation และ power supply

อ่านต่อ: MOSFET vs Relay สำหรับ Microcontroller

GPIO กับ Interrupt

Input บางเหตุการณ์ไม่ควรใช้ loop polling อย่างเดียว

GPIO interrupt ช่วยให้ MCU ตอบสนองเมื่อ edge/state เปลี่ยน เช่น:

  • pulse counter;
  • flow sensor;
  • encoder;
  • alarm input

แต่ interrupt handler ควรสั้นและออกแบบ debounce/noise handling

อ่านต่อ: Interrupt และ Timer คืออะไร

Safety Boundary

GPIO เป็น logic control เท่านั้น

ถ้าสัญญาณมาจาก:

  • mains;
  • long outdoor cable;
  • motor/pump system;
  • industrial panel;
  • unknown ground potential

ต้องออกแบบ isolation/protection/interface อย่างเหมาะสม ไม่ควรต่อเข้าขา MCU โดยตรงเพียงเพราะแรงดัน nominal ดูใกล้กัน

สรุป

GPIO คือขา logic สำหรับอ่าน input และควบคุม output interface ไม่ใช่ power output

ถ้าเข้าใจ logic level, floating input, pull resistor, startup state และ driver boundary จะลดปัญหาที่คนเริ่ม ESP32 เจอบ่อยได้มากกว่าการจำคำสั่ง digitalRead() หรือ digitalWrite() เพียงอย่างเดียว