Sơ đồ kết nối
Sơ đồ chân ESP32
Pinout ESP32, chân ADC-only, chân boot cần tránh, kênh PWM/LEDC.

Thông số board
- Board phổ biến: ESP32-WROOM-32
- Điện áp logic: 3.3V — hầu hết GPIO KHÔNG chịu được 5V, cần chia áp/level shifter khi nối cảm biến 5V
- Cấp nguồn: 5V qua cổng USB (qua bộ ổn áp onboard xuống 3.3V)
Chân chỉ nhận tín hiệu vào (input-only)
- GPIO34, 35, 36 (VP), 39 (VN): không dùng được digitalWrite/output, chỉ đọc (digital hoặc ADC)
ADC
- ADC1 (GPIO32–39): dùng bình thường kể cả khi WiFi đang bật
- ADC2 (GPIO0, 2, 4, 12–15, 25–27): xung đột với WiFi — tránh analogRead trên các chân này khi WiFi đang hoạt động
Chân cần tránh dùng làm I/O thường ở thời điểm khởi động (boot-strapping pins)
- GPIO0: phải ở mức HIGH để boot bình thường (LOW = vào chế độ nạp flash)
- GPIO2: phải ở mức LOW hoặc thả nổi lúc boot, nhiều board nối sẵn với LED onboard
- GPIO12 (MTDI): phải ở mức LOW lúc boot, nếu không có thể gây lỗi điện áp flash
- GPIO15: cần ở mức gần HIGH lúc boot để log console hoạt động bình thường
PWM (LEDC — không dùng analogWrite như Arduino)
- API cũ (Arduino-ESP32 core ≤2.x): ledcSetup(channel, freq, resolution) + ledcAttachPin(pin, channel) + ledcWrite(channel, duty)
- API mới (core 3.x): ledcAttach(pin, freq, resolution) + ledcWrite(pin, duty)
- Có 16 kênh LEDC độc lập
Giao tiếp mặc định
- I2C: SDA = GPIO21, SCL = GPIO22 (có thể remap bằng phần mềm)
- UART0 (USB/Serial): GPIO1 (TX0)/GPIO3 (RX0) — tránh dùng khi đang nạp code/debug qua Serial