ARTICLE

UART, I2C และ SPI ต่างกันอย่างไร? เลือก Bus ให้ ESP32 และ Sensor แบบไหนดี.

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

IoTProgrammingMakerโดย Thospaakเผยแพร่ 10 ต.ค. 2569อัปเดต 12 ต.ค. 2569
ภาพเปรียบเทียบ UART, I2C และ SPI บนโต๊ะงาน Embedded แสดง topology ของการเชื่อมต่อแต่ละแบบสำหรับ Microcontroller และ Sensor

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
แผนภาพเปรียบเทียบ topology ของ UART แบบจุดต่อจุด, I2C แบบ shared bus ที่มี address และ SPI แบบ shared clock/data พร้อม chip-select แยกแต่ละอุปกรณ์
ทั้งสาม interface เหมาะกับงานคนละ topology และยังเป็น logic-level interface สำหรับงาน Embedded เป็นหลัก หากต้องออกจาก PCB หรือตู้ไปไกลหรืออยู่ในสภาพแวดล้อมมี noise ควรพิจารณา physical layer ที่ออกแบบมาสำหรับโจทย์นั้น เช่น RS485, CAN หรือ Ethernet

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 ให้ถาม:

  1. ต้องต่อกี่ตัว?
  2. ระยะสายเท่าไร?
  3. throughput เท่าไร?
  4. noise/environment เป็นอย่างไร?
  5. ต้องแชร์ bus กับ device อื่นหรือไม่?
  6. 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 ไม่ใช่เลือกจากจำนวนสายอย่างเดียว