UART, I2C และ SPI ต่างกันอย่างไร? เลือก Bus ให้ ESP32 และ Sensor แบบไหนดี.
เปรียบเทียบ UART, I2C และ SPI สำหรับ ESP32/Arduino ทั้ง Topology, Clock, Addressing, จำนวนสาย, ระยะสายและข้อจำกัดสัญญาณ เพื่อเลือก interface ให้ Sensor, Display และ Module ได้เหมาะสม

UART, I2C และ SPI เป็น interface ที่เจอบ่อยมากในงาน Microcontroller แต่ไม่ได้แทนกันได้ทุกกรณี เพราะ topology, wiring และ electrical behavior ต่างกัน
UART vs I2C vs SPI ต่างกันตรงไหน
| Interface | Timing | Topology | Multi-device | Signal หลัก | ใช้บ่อยกับ |
|---|---|---|---|---|---|
| UART | Asynchronous | จุดต่อจุดเป็นหลัก | ไม่ใช่ shared bus โดยธรรมชาติ | TX, RX และ reference | GPS, Meter, Module, Debug |
| I2C | Synchronous | Shared bus + address | ได้บน bus เดียว | SDA, SCL + pull-up | Sensor, RTC, IO expander |
| SPI | Synchronous | Shared clock/data + per-device CS | ได้โดยแยก CS ของแต่ละ device | Clock, data และ CS | Display, Flash, ADC, RF module |
UART คืออะไร
UART เป็น serial communication ที่มักใช้เส้นหลัก:
TX -> RX
RX <- TX
GND -- GND
แต่ละฝั่งต้องตั้งค่าที่ตรงกัน เช่น baud rate และ frame format
ข้อดี
- เข้าใจง่าย;
- debug ง่าย;
- ไม่ต้องมี shared clock line;
- module จำนวนมากรองรับ
ข้อจำกัด
- โดยธรรมชาติเป็น point-to-point มากกว่า bus หลาย node;
- logic-level UART ไม่เหมาะกับสายยาว/industrial field โดยตรง;
- ต้องระวัง TX/RX voltage compatibility
ถ้าต้องเดินสายไกลหรือหลาย node มักต้องมี physical layer อื่น เช่น RS485
I2C คืออะไร
I2C ใช้เส้นหลักสองเส้น:
SDA Data
SCL Clock
อุปกรณ์บน bus ใช้ address เพื่อแยกกัน
ข้อสำคัญคือ line แบบ I2C ทั่วไปอาศัย pull-up resistor และ output ลักษณะ open-drain/open-collector
อ่านต่อ: Pull-up และ Pull-down Resistor คืออะไร
ข้อดี
- ใช้สายสัญญาณน้อย;
- ต่อ Sensor หลายตัวบน bus เดียวได้;
- ecosystem ใหญ่
ข้อจำกัด
- address ชนกันได้;
- capacitance ของสาย/bus มีผล;
- ไม่ได้ออกแบบเป็น field bus ระยะไกล;
- pull-up value และ voltage ต้องเหมาะสม
SPI คืออะไร
SPI ใช้ clock และ data line แยก พร้อม chip-select สำหรับอุปกรณ์แต่ละตัวโดยทั่วไป
โครงภาพรวม:
Host / Controller
├─ SCLK
├─ Data out
├─ Data in
├─ CS device A
└─ CS device B
ชื่อ signal ต่างกันได้ตาม vendor/documentation เช่น MOSI/MISO, COPI/CIPO หรือชื่อ Data In/Data Out ที่อิงมุมมองของ Host/Device ดังนั้นควรยึด datasheet ของอุปกรณ์จริงเป็นหลัก มากกว่าจำชื่อขาเพียงชุดเดียว
ข้อดี
- throughput สูง;
- protocol overhead ต่ำ;
- เหมาะกับ display, flash, high-rate ADC/RF บางแบบ
ข้อจำกัด
- ใช้สายมากกว่า I2C;
- ต้องมี chip-select เพิ่มเมื่อมีหลาย device;
- signal integrity สำคัญขึ้นเมื่อ speed สูง
เลือกอะไรให้ Sensor
ถ้า Sensor มี interface เดียว ก็เลือกตาม datasheet
ถ้ามีหลาย interface ให้ถาม:
- ต้องต่อกี่ตัว?
- ระยะสายเท่าไร?
- throughput เท่าไร?
- noise/environment เป็นอย่างไร?
- ต้องแชร์ bus กับ device อื่นหรือไม่?
- library/driver รองรับ interface ไหนดีที่สุด?
ระยะสายเท่าไรถึงจะใช้ได้
ไม่มีเลขเดียวที่ใช้ได้กับทุกระบบ
ความยาวขึ้นกับ:
- speed;
- cable capacitance;
- impedance/layout;
- pull-up;
- noise;
- ground reference;
- connector
UART TTL, I2C และ SPI ไม่ควรถูกถือว่าเป็น industrial long-distance field bus
ถ้าจะออกจาก PCB/enclosure ไปหลายเมตร ควรพิจารณา interface ที่ออกแบบมาสำหรับระยะ/EMI เช่น RS485, CAN หรือ Ethernet ตาม requirement
UART กับ RS485 ต่างกันยังไง
UART เป็น logic/serial peripheral ส่วน RS485 เป็น electrical/physical layer สำหรับ differential signaling
ตัวอย่างระบบ Modbus RTU:
MCU UART
↓
RS485 Transceiver
↓
A/B differential bus
↓
Modbus RTU devices
ดังนั้นพูดว่า “Modbus ใช้ UART” หรือ “Modbus ใช้ RS485” ต้องแยก protocol กับ physical interface ให้ชัด
อ่านต่อ: Modbus Protocol คืออะไร
I2C Address ชนกันแก้ยังไง
ทางเลือกขึ้นกับ device เช่น:
- เปลี่ยน address ผ่าน pin/register;
- ใช้ multiplexer;
- แยก bus;
- เลือก Sensor รุ่นอื่น
อย่าคิดว่าต่อ parallel แล้ว library จะจัดการเอง
Logic Level ต้องตรงกันไหม
ต้องตรวจ
Sensor 5 V และ MCU 3.3 V อาจต้อง level shifting ขึ้นกับ interface/output structure
I2C level shifting ยังมีรายละเอียดเรื่อง open-drain/pull-up ที่ต่างจาก push-pull signal
อ่านต่อ: 3.3V vs 5V Logic Level
Ground ต้องต่อร่วมกันไหม
สำหรับ single-ended logic interfaces โดยทั่วไปต้องมี reference ที่เข้าใจร่วมกัน แต่ระบบที่มี ground potential ต่างกัน, long cable หรือ environment เสี่ยงอาจต้อง isolation/physical layer ที่เหมาะกว่า
ไม่ควรลาก GND แบบไม่คิดระหว่างตู้/อาคารเพียงเพื่อให้ UART/I2C ทำงาน
ตัวอย่างเลือก Interface
Temperature Sensor บน PCB เดียว
I2C อาจเหมาะและ wiring ง่าย
Display throughput สูง
SPI มักเหมาะกว่า
GPS module
UART เป็นตัวเลือกทั่วไป
Energy Meter อยู่ไกลในตู้ไฟ
RS485/Modbus มักเหมาะกว่า TTL UART
เอกสารอ้างอิงสำหรับ ESP32
ถ้าใช้ ESP32 จริง ควรตรวจ driver และข้อจำกัดของ chip/variant ที่ใช้อยู่จากเอกสารทางการ เพราะจำนวน controller, pin routing และข้อจำกัดด้าน speed อาจต่างกันตามรุ่น:
สรุป
UART, I2C และ SPI เป็น bus/interface ระดับ Embedded ที่เหมาะกับ topology ต่างกัน
การเลือกที่ดีต้องดู ระยะ, จำนวนอุปกรณ์, speed, electrical environment และ maintenance ไม่ใช่เลือกจากจำนวนสายอย่างเดียว

