IoTLabs

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

ESP32-C3 SuperMini: Pinout Chi Tiết, Mapping Chân Và Những Lưu Ý Quan Trọng

ESP32-C3 SuperMini là board ESP32 nhỏ gọn nhất hiện nay, giá dưới 30k nhưng tích hợp đủ Wi-Fi + Bluetooth 5.0. Vấn đề: pinout dày đặc, tên chân trên silk screen ngắn gọn, và board này do nhiều nhà sản xuất third-party sản xuất — pinout có thể khác nhau tùy phiên bản. Bài này dùng bản chuẩn thông dụng nhất hiện nay — bản phổ biến nhất trên thị trường Việt Nam.

Lưu ý quan trọng: ESP32-C3 SuperMini là board third-party, không phải sản phẩm chính thức của Espressif. Nhiều nhà sản xuất khác nhau có thể có bố cục chân không giống nhau. Sơ đồ trong bài này là bản phổ biến nhất, nhưng luôn đối chiếu với sơ đồ thực tế của board bạn đang cầm trên tay trước khi kết nối.

Tổng Quan Board

Thông SốGiá Trị
ChipESP32-C3FH4 (RISC-V 32-bit, 160MHz)
Flash4MB built-in
RAM400KB SRAM
Wi-Fi802.11 b/g/n 2.4GHz
BluetoothBLE 5.0
GPIO13 chân (GPIO0–GPIO10, GPIO20, GPIO21)
ADC6 kênh (12-bit, GPIO0–GPIO5)
USBNative USB CDC (không cần chip CH340/CP2102)
Kích thước~22 × 18mm
Điện áp logic3.3V — không chịu 5V trên GPIO

Điểm khác biệt so với ESP32 thường: chip RISC-V (không phải Xtensa), chỉ 1 core, GPIO ít hơn nhiều (13 chân). Không có DAC, không có hall sensor.

Sơ Đồ Chân Đầy Đủ — Bản Chuẩn Thông Dụng Nhất

Sơ đồ chân ESP32-C3 Super Mini — bản chuẩn thông dụng nhất

Chân Nguồn

Nhãn Trên BoardTênChức Năng
5V5VNguồn 5V — vào từ USB hoặc nguồn ngoài
GGNDMass / 0V — nối chung GND với tất cả module ngoài
3.33V3Nguồn 3.3V ra — cấp cho cảm biến và module nhỏ

Chân Bên Trái Board (ADC / GPIO)

NhãnGPIOChức Năng PhụMô Tả
4GPIO4A4 / SCKADC kênh 4 hoặc chân SCK của SPI
3GPIO3A3ADC kênh 3, GPIO thông thường
2GPIO2A2ADC kênh 2, GPIO thông thường
1GPIO1A1ADC kênh 1, GPIO thông thường
0GPIO0A0ADC kênh 0, GPIO thông thường

Chân Bên Phải Board (Digital / SPI / I2C / UART)

NhãnGPIOChức Năng PhụMô Tả
5GPIO5A5 / MISOADC kênh 5 hoặc MISO của SPI
6GPIO6MOSIMOSI của SPI
7GPIO7SSChip Select của SPI
8GPIO8SDAData line của I2C
9GPIO9SCLClock của I2C — kiêm nút BOOT
10GPIO10GPIO thông thường
20GPIO20RXNhận dữ liệu UART
21GPIO21TXTruyền dữ liệu UART

Mapping Chi Tiết Theo Nhóm Chức Năng

ADC — 6 Kênh, Chỉ Có ADC1

ADC KênhGPIONhãn Board
CH0GPIO00
CH1GPIO11
CH2GPIO22
CH3GPIO33
CH4GPIO44 (dùng chung SCK)
CH5GPIO55 (dùng chung MISO)

ESP32-C3 không có ADC2. Tất cả 6 kênh đều thuộc ADC1.

Hạn chế quan trọng: ADC không cho kết quả chính xác khi Wi-Fi đang bật. Đây là giới hạn phần cứng, không phải lỗi code. Nếu cần đọc analog trong khi kết nối mạng, dùng module ADC ngoài như ADS1115 qua I2C.

SPI

Vai TròGPIONhãn Board
SCK (Clock)GPIO44
MISO (Master In Slave Out)GPIO55
MOSI (Master Out Slave In)GPIO66
SS (Chip Select)GPIO77
#include <SPI.h>
// SCK=GPIO4, MISO=GPIO5, MOSI=GPIO6, SS=GPIO7
SPI.begin(4, 5, 6, 7);

I2C (Wire)

Vai TròGPIONhãn Board
SDAGPIO88
SCLGPIO99
#include <Wire.h>
Wire.begin(8, 9);  // SDA=GPIO8, SCL=GPIO9

GPIO9 là nút BOOT trên board (giữ LOW khi cắm điện = vào boot mode). Hoàn toàn dùng được làm SCL khi chạy bình thường — chỉ cần chú ý khi muốn vào boot mode thủ công: phải disconnect thiết bị I2C khỏi GPIO9 trước.

UART

UARTTXRX
UART0 (mặc định)GPIO21GPIO20
UART1 (tùy chọn)Bất kỳ GPIOBất kỳ GPIO

UART0 dùng chung với USB CDC. Không nối thiết bị UART vào GPIO20/GPIO21 khi USB đang kết nối:

// Dùng UART1 cho thiết bị ngoại vi
Serial1.begin(9600, SERIAL_8N1, 3, 10);  // RX=GPIO3, TX=GPIO10

PWM

Tất cả GPIO của ESP32-C3 đều hỗ trợ PWM qua LEDC — không như Arduino Uno chỉ có vài chân ~. 8 kênh độc lập, tần số và duty cycle tùy chỉnh:

ledcSetup(0, 5000, 8);      // channel 0, 5kHz, 8-bit resolution
ledcAttachPin(GPIO_NUM_7, 0);
ledcWrite(0, 128);           // duty 50%

Chọn Board Trong Arduino IDE

Cài Board Package

  1. Mở Arduino IDE → PreferencesAdditional boards manager URLs, thêm:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  1. Tools → Board → Boards Manager → tìm “esp32” → cài esp32 by Espressif Systems (v2.0.x trở lên)

Chọn Board Đúng

Tools → Board → ESP32 Arduino → ESP32C3 Dev Module

ESP32-C3 SuperMini không có tên riêng trong board manager. ESP32C3 Dev Module là lựa chọn đúng — không dùng “ESP32 Dev Module” (đó là ESP32 Xtensa, khác chip).

Cấu Hình Upload

SettingGiá Trị
BoardESP32C3 Dev Module
USB CDC On BootEnabled ← bắt buộc
CPU Frequency160MHz
Flash Size4MB (32Mb)
Flash ModeDIO
Upload Speed921600

USB CDC On Boot: Enabled là cài đặt bắt buộc nhất. Nếu để Disabled, Serial.print() không ra gì — board dùng USB native, không có chip USB-UART phụ như CH340.

Upload Không Vào — Cách Fix

Nếu Arduino IDE báo lỗi khi upload:

  1. Giữ nút BOOT (GPIO9)
  2. Nhấn rồi thả RST (vẫn giữ BOOT)
  3. Bấm Upload trong Arduino IDE
  4. Thả BOOT khi thấy “Connecting…”
  5. Sau khi flash xong, nhấn RST để chạy firmware mới

Những Lưu Ý Quan Trọng

1. Logic 3.3V — Không Chịu 5V Trên GPIO

ESP32-C3 dùng logic 3.3V. Cắm tín hiệu 5V từ Arduino Uno hoặc cảm biến 5V thẳng vào GPIO → hỏng chip, không có mạch bảo vệ bên trong.

Khi kết nối thiết bị 5V: dùng level shifter hai chiều, hoặc voltage divider (2 điện trở) cho tín hiệu một chiều.

2. GPIO20 / GPIO21 — Dùng Chung Với USB

GPIO20 (RX) và GPIO21 (TX) dùng chung với USB CDC. Không cắm thiết bị UART vào hai chân này khi USB đang kết nối — xung đột tín hiệu, có thể làm mất kết nối hoặc gây nhiễu.

3. Nối Chung GND Là Bắt Buộc

Khi kết nối bất kỳ cảm biến hoặc module nào, luôn nối chung GND (chân G trên board) với GND của module đó. Thiếu GND chung → tín hiệu không ổn định, đọc sai giá trị, hoặc không hoạt động.

4. ADC Và Wi-Fi Không Dùng Cùng Lúc

analogRead() trả về kết quả không chính xác khi Wi-Fi đang hoạt động. Giải pháp:

  • Đọc ADC trước khi kết nối mạng
  • Hoặc dùng module ADS1115 (I2C ADC 16-bit, không bị ảnh hưởng bởi Wi-Fi)

5. Dòng Điện GPIO: Tối Đa 40mA Mỗi Chân

Luôn dùng điện trở giới hạn dòng cho LED (220Ω – 1kΩ). Tổng dòng tất cả GPIO cộng lại không vượt 120mA — nếu cần điều khiển nhiều tải, dùng transistor hoặc MOSFET.

Sơ Đồ Kết Nối Nhanh

LED Đơn

GPIO10 → R 220Ω → LED (+) → LED (-) → G (GND)

DHT11 / DHT22

VCC  → 3.3
GND  → G
DATA → GPIO3 (thêm R 10kΩ pull-up lên 3.3V)
#include <DHT.h>
#define DHTPIN 3
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

I2C — OLED SSD1306, BME280, …

VCC → 3.3
GND → G
SDA → GPIO8 (nhãn: 8)
SCL → GPIO9 (nhãn: 9)
#include <Wire.h>
Wire.begin(8, 9);

SPI — SD Card, Màn Hình TFT, …

SCK  → GPIO4 (nhãn: 4)
MISO → GPIO5 (nhãn: 5)
MOSI → GPIO6 (nhãn: 6)
CS   → GPIO7 (nhãn: 7)
VCC  → 3.3
GND  → G
#include <SPI.h>
SPI.begin(4, 5, 6, 7);

Cảm Biến Analog — LDR, Potentiometer, …

VCC → 3.3
GND → G
OUT → GPIO1 (nhãn: 1, ADC kênh 1)
int val = analogRead(1);  // đọc GPIO1 = ADC CH1

So Sánh Với Các Board Phổ Biến

ESP32-C3 SuperMiniESP32 DevKit V1ESP8266 D1 Mini
Kích thước~22×18mm ⭐~50×28mm~34×25mm
CPURISC-V 160MHzXtensa 240MHz (dual core)Xtensa 80MHz
GPIO133411
ADC6 kênh*18 kênh1 kênh
BLE5.0 ✓4.2 ✓
USB Native✓ (không cần CH340)✗ (cần CH340)✗ (cần CH340)
Giá tham khảo~25–35k~45–60k~30–40k

*ADC chỉ cho kết quả chính xác khi Wi-Fi tắt

Chọn ESP32-C3 SuperMini khi: cần board siêu nhỏ, BLE + Wi-Fi, 13 GPIO là đủ cho dự án.

Không chọn khi: cần nhiều GPIO, cần ADC và Wi-Fi đồng thời, cần xử lý mạnh (dual core).

Checklist Trước Khi Kết Nối

  • Đã đối chiếu pinout với sơ đồ thực tế của board đang dùng
  • Tất cả tín hiệu đầu vào ≤ 3.3V (không nối 5V thẳng vào GPIO)
  • Đã nối chung GND (chân G) giữa board và tất cả module ngoài
  • Nguồn cấp đủ dòng (USB 5V, tối thiểu 500mA cho board + thiết bị)
  • Arduino IDE: Board = ESP32C3 Dev Module, USB CDC On Boot = Enabled
  • Điện trở giới hạn dòng cho LED (220Ω – 1kΩ)
  • Không cắm thiết bị vào GPIO20/GPIO21 khi đang kết nối USB