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ăng | GPIO | Ghi chú |
|---|---|---|
| SDA | GPIO1 hoặc GPIO21 | An toàn, ổn định |
| SCL | GPIO2 | Phổ 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ụ
| UART | TX | RX | Ứng dụng |
|---|---|---|---|
| UART1 | GPIO15 | GPIO16 | GPS, LoRa, GSM |
| UART2 | GPIO17 | GPIO18 | Sensor 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ị
| SPI | GPIO | Ghi chú |
|---|---|---|
| SCK | GPIO6 | PWM/SPI dùng tốt |
| MOSI | GPIO7 | Ổn định |
| MISO | GPIO4 | Không xung đột |
| CS | GPIO5 | Tự 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
- Bài 7.1: Tống hợp các ví dụ kết nối các loại màn hình thông dụng
- Bài 08, chúng ta sẽ đi vào microSD pinout & thực hành đọc/ghi ổn định trên ESP32-S3-DevKitC N16R8 CAM.


