Sơ đồ chân ESP32 - hướng dẫn dùng GPIO đúng cách, chân nào nên tránh

Giải thích sơ đồ chân ESP32 DevKit 30 chân - chân nào dùng tự do, chân nào chỉ đọc, chân strapping cần tránh và bảng phân công chân cho robot. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết và ứng dụng thực tế trong robot.
Vì sao phải hiểu sơ đồ chân ESP32?
Không như Arduino Uno nơi hầu hết chân dùng như nhau, các chân GPIO của ESP32 có vai trò rất khác nhau: có chân dùng tự do, có chân chỉ đọc được, có chân ảnh hưởng đến quá trình khởi động và có chân tuyệt đối không được đụng vào. Cắm nhầm chân là nguyên nhân của hàng loạt lỗi khó hiểu: bo không khởi động, nạp code thất bại, cảm biến đọc sai khi bật WiFi.
Bài này phân loại toàn bộ chân của bo ESP32 DevKit V1 30 chân — bản phổ biến nhất tại Việt Nam — thành các nhóm dễ nhớ.
Nhóm chân dùng tự do (khuyên dùng)
Các chân sau input/output thoải mái, hỗ trợ PWM (LEDC), không ảnh hưởng khởi động:
| GPIO | Ghi chú thêm |
|---|---|
| 4, 5 | GPIO 5 đôi khi là chân CS của SPI |
| 13, 14 | Sẵn sàng cho PWM động cơ |
| 16, 17 | Là RX2/TX2 nếu cần UART thứ hai |
| 18, 19, 23 | Là SCK/MISO/MOSI nếu dùng SPI |
| 21, 22 | Là SDA/SCL mặc định của I2C |
| 25, 26, 27 | Có DAC (25, 26) xuất điện áp analog thật |
| 32, 33 | Thuộc ADC1 — đọc analog được cả khi bật WiFi |
Nguyên tắc chọn chân cho dự án robot: ưu tiên 4, 5, 13, 14, 16, 17, 25, 26, 27, 32, 33; để dành 21, 22 cho I2C và 18, 19, 23 cho SPI.
Nhóm chân chỉ đọc (input only)
GPIO 34, 35, 36 (VP), 39 (VN) chỉ làm đầu vào: không có mạch xuất tín hiệu, không có điện trở kéo nội. Dùng chúng để đọc cảm biến analog (cả 4 đều thuộc ADC1) hoặc tín hiệu digital từ ngoài. Cắm LED hay điều khiển driver bằng các chân này sẽ không hoạt động — lỗi phổ biến của người mới.
Nhóm chân strapping - cẩn thận khi dùng
Chân strapping quyết định chế độ khởi động của ESP32 tại thời điểm cấp nguồn. Dùng được nhưng phải hiểu ràng buộc:
| GPIO | Vai trò khởi động | Ràng buộc |
|---|---|---|
| 0 | Chọn chế độ nạp code | Phải ở mức CAO khi khởi động; kéo XUỐNG là vào chế độ nạp (nút BOOT nối chân này) |
| 2 | Kết hợp với GPIO 0 | Phải THẤP hoặc thả nổi khi khởi động; LED bo gắn sẵn ở đây |
| 12 | Chọn điện áp flash | Phải THẤP khi khởi động — kéo CAO là bo không boot; tránh gắn module có pull-up |
| 15 | Log khởi động | Kéo THẤP sẽ tắt log boot; ít nghiêm trọng |
| 5 | Trạng thái SDIO | Ít ảnh hưởng trên DevKit thường |
Triệu chứng kinh điển: robot chạy bình thường khi cắm USB nhưng không khởi động khi chạy pin — kiểm tra ngay có module nào kéo GPIO 12 lên cao hoặc GPIO 0 xuống thấp lúc cấp nguồn không.
Nhóm chân cấm dùng
GPIO 6, 7, 8, 9, 10, 11 nối trực tiếp với chip flash SPI chứa chương trình. Cắm bất cứ thứ gì vào các chân này làm bo treo hoặc hỏng dữ liệu flash. Trên đa số bo DevKit 30 chân, các chân này không được đưa ra header — nhưng bo 38 chân thì có, cần chú ý.
GPIO 1 (TX0) và 3 (RX0) là UART nạp code và Serial Monitor. Về kỹ thuật dùng được sau khi khởi động, nhưng chiếm chúng đồng nghĩa mất khả năng debug — chỉ dùng khi thực sự hết chân.
ADC, DAC và cảm ứng chạm
ADC - đọc analog
ESP32 có 2 khối ADC độ phân giải 12-bit (0-4095):
- ADC1: GPIO 32, 33, 34, 35, 36, 39 — luôn hoạt động
- ADC2: GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27 — ngừng hoạt động khi WiFi bật
Quy tắc vàng: dự án có WiFi thì mọi cảm biến analog phải nối vào ADC1 (GPIO 32-39).
DAC - xuất analog thật
GPIO 25 và 26 xuất điện áp analog 0-3.3V thật (8-bit) bằng dacWrite — dùng phát âm thanh đơn giản hoặc tạo tín hiệu tham chiếu.
Touch - cảm ứng chạm
10 chân (GPIO 0, 2, 4, 12, 13, 14, 15, 27, 32, 33) đọc được điện dung chạm tay qua touchRead — làm nút bấm không cần linh kiện, rất hợp các dự án sáng tạo của học sinh.
Bảng phân công chân mẫu cho xe robot ESP32
Phân công chuẩn dùng trong kit ESP32 Robot Car, tránh toàn bộ chân rủi ro:
| Chức năng | GPIO | Lý do chọn |
|---|---|---|
| Động cơ trái IN1, IN2 | 26, 27 | Chân tự do, có PWM |
| Động cơ phải IN3, IN4 | 14, 12* | GPIO 12 dùng làm INPUT của driver là an toàn vì driver không kéo áp lúc boot |
| PWM ENA, ENB | 25, 13 | LEDC bất kỳ chân nào |
| HC-SR04 TRIG, ECHO | 5, 18 | ECHO qua chia áp 5V xuống 3.3V |
| Dò line trái, giữa, phải | 34, 35, 32 | Input-only và ADC1, đọc được khi bật WiFi |
| Servo | 4 | LEDC 50 Hz |
| I2C (MPU6050, OLED) | 21, 22 | SDA/SCL mặc định |
| Còi buzzer | 33 | Chân tự do |
*Nếu gặp lỗi không boot khi chạy pin, chuyển IN4 từ GPIO 12 sang GPIO 17.
Giới hạn dòng điện của chân GPIO
Mỗi chân GPIO cấp tối đa khoảng 40 mA, khuyến nghị dưới 20 mA; tổng tất cả các chân không quá 200 mA. Điều này đủ cho LED (qua điện trở 220Ω-1kΩ) và tín hiệu điều khiển, nhưng tuyệt đối không đủ cho động cơ (cần 200 mA - vài A) hay dải LED. Luôn dùng driver hoặc MOSFET làm tầng công suất — xem bài MOSFET và Relay ở mục Kiến thức.
Chân 3V3 trên bo lấy từ ổn áp nội, cấp tổng cộng khoảng 500 mA cho cả ESP32 lẫn thiết bị ngoài — cảm biến nhỏ dùng được, module dòng cao (servo, còi lớn) phải lấy nguồn riêng.
Câu hỏi thường gặp
Chân nào của ESP32 an toàn tuyệt đối cho người mới?
Bộ sáu chân 4, 16, 17, 25, 26, 27 cho output và 32, 33, 34, 35 cho input. Nhớ thêm cặp I2C 21, 22. Dự án nhỏ gần như không bao giờ phải rời khỏi nhóm này.
Vì sao cảm biến analog đọc sai khi bật WiFi?
Cảm biến đang nối vào chân ADC2 (ví dụ GPIO 25, 26, 27) — khối ADC2 bị driver WiFi chiếm dụng. Chuyển sang chân ADC1: GPIO 32, 33, 34, 35, 36, 39.
ESP32 có chân 5V không?
Chân VIN (hoặc 5V) nối với nguồn USB, dùng cấp cho module cần 5V như HC-SR04. Nhưng logic của ESP32 vẫn là 3.3V — tín hiệu 5V từ module trả về phải qua chia áp trước khi vào GPIO.
Bo 30 chân và 38 chân khác gì nhau?
Bản 38 chân đưa thêm các GPIO 6-11 (cấm dùng) và vài chân phụ ra header. Tính năng cốt lõi giống hệt. Người mới chọn bản 30 chân cho gọn và đỡ cắm nhầm vào chân flash.
Tài nguyên tải về
Tải bản PDF của bài viết để in giáo án hoặc gửi trước cho học viên.


