IoTLabs

Nghiên cứu, Sáng tạo và Thử nghiệm

ESP32-S3-DevKitC N16R8 CAM: Bài 07 – UART / I2C / SPI gợi ý mapping “an toàn” cho dự án

Giới thiệu

Sau khi đã nắm vững pinout theo nhóm chức năng (Bài 05) và tránh được các lỗi boot/strapping (Bài 06), bước tiếp theo để bắt đầu làm dự án thực tế là: chọn đúng GPIO cho các giao tiếp phổ biến như UART, I2C và SPI.

Trên ESP32-S3-DevKitC N16R8 CAM, nếu mapping GPIO không hợp lý, bạn rất dễ gặp các vấn đề:

  • Camera hoặc microSD bị xung đột
  • Board boot được nhưng ngoại vi không hoạt động
  • Reset ngẫu nhiên khi chạy lâu

Bài 07 cung cấp mapping GPIO an toàn – đã kiểm chứng thực tế, kèm ví dụ nối module cụ thể, để bạn dùng ngay cho dự án.

1. Nguyên tắc chung khi mapping UART / I2C / SPI

Trước khi đi vào từng giao tiếp, hãy ghi nhớ các nguyên tắc sau:

  • ❌ Tránh camera pins, microSD pins, USB native pins
  • ❌ Tránh GPIO0 (BOOT) và các strapping pins
  • ✅ Ưu tiên GPIO an toàn đã xác định ở Bài 05
  • ✅ Dùng pull-up/pull-down ngoài nếu cần, không phụ thuộc mặc định

? ESP32-S3 cho phép remap linh hoạt, nhưng không phải chân nào cũng nên dùng.

2. Mapping I2C an toàn (OLED, sensor)

GPIO khuyến nghị cho I2C

Chức năngGPIOGhi chú
SDAGPIO1 hoặc GPIO21An toàn, ổn định
SCLGPIO2Phổ biến, dễ dùng

? Đây là mapping an toàn nhất cho các module I2C nhỏ.

Ví dụ module I2C thường dùng

  • OLED 0.96″ SSD1306
  • BME280 / BMP280
  • MPU6050

Ví dụ code khởi tạo I2C

Wire.begin(1, 2); // SDA, SCL

⚠️ Lưu ý:

  • Luôn dùng nguồn 3V3 ổn định
  • Tránh dây quá dài (>20cm)

3. Mapping UART phụ an toàn (GPS, module serial)

ESP32-S3 có nhiều UART, nhưng UART0 thường dùng cho debug/nạp. Vì vậy nên dùng UART1 hoặc UART2 cho module ngoài.

GPIO khuyến nghị cho UART phụ

UARTTXRXỨng dụng
UART1GPIO15GPIO16GPS, LoRa, GSM
UART2GPIO17GPIO18Sensor serial

Ví dụ module UART

  • GPS NEO-6M / NEO-M10
  • LoRa E32
  • Serial sensor

Ví dụ code UART

Serial1.begin(9600, SERIAL_8N1, 16, 15);

⚠️ Lưu ý:

  • Không dùng GPIO0 cho RX/TX
  • Kiểm tra mức logic (3V3)

4. Mapping SPI an toàn (module ngoài)

Trên board CAM, SPI chính đã bị chiếm bởi microSD, vì vậy nếu cần SPI cho module khác, nên dùng SPI phụ (HSPI).

GPIO SPI phụ khuyến nghị

SPIGPIOGhi chú
SCKGPIO6PWM/SPI dùng tốt
MOSIGPIO7Ổn định
MISOGPIO4Không xung đột
CSGPIO5Tự do chọn

Ví dụ module SPI

  • RFID RC522
  • Module Flash SPI ngoài
  • Một số LCD SPI nhỏ

Ví dụ code SPI

SPI.begin(6, 4, 7, 5);

⚠️ Lưu ý:

  • Không dùng chung bus với microSD
  • Tránh dây SPI dài

5. Ví dụ thực tế: nối màn hình OLED 0.96″

Kết nối chân

  • VCC → 3V3
  • GND → GND
  • SDA → GPIO1
  • SCL → GPIO2

Ứng dụng

  • Hiển thị trạng thái WiFi
  • Trạng thái camera / SD

? Đây là combo rất phổ biến & an toàn cho ESP32-S3 CAM.

6. Những lỗi mapping thường gặp & cách tránh

Lỗi 1: OLED không hiển thị

  • Sai GPIO I2C
  • Quên pull-up

Lỗi 2: UART không nhận dữ liệu

  • Dùng chung với UART0
  • Đảo TX/RX

Lỗi 3: SPI chạy không ổn định

  • Dùng chung chân microSD
  • Nguồn yếu

7. Checklist mapping an toàn trước khi gắn ngoại vi

  • ✅ Không dùng GPIO0
  • ✅ Không đụng camera / SD / USB pins
  • ✅ Ưu tiên GPIO an toàn
  • ✅ Test từng module độc lập

Chuẩn bị cho bài tiếp theo