3.9 KiB
Programming Header: 4-Pin vs 6-Pin Comparison
Quick Answer
You can use a 4-pin header if you're okay with manually pressing buttons during flashing. However, 6-pin header is recommended because it enables automatic reset (no buttons needed).
4-Pin Header (Minimal)
Pinout:
Pin 1: +3V3 (optional)
Pin 2: GND
Pin 3: UART_TX (ESP32 GPIO1)
Pin 4: UART_RX (ESP32 GPIO3)
Pros:
- ✅ Simpler (fewer pins)
- ✅ Lower cost (smaller header)
- ✅ Works for basic flashing
Cons:
- ❌ Must manually press buttons every time you flash
- ❌ More error-prone (easy to miss timing)
- ❌ Slower workflow
Flashing Process (4-Pin):
- Connect USB-to-Serial adapter (VCC, GND, TX, RX only)
- Power board (via J1 or J2 Pin 1)
- Hold SW2 (Boot button) - pulls GPIO0 LOW
- Press and release SW1 (Reset button) - resets ESP32
- Release SW2 after 1-2 seconds
- ESP32 enters download mode
- Run
esptoolor ESPHome to flash - Press SW1 (Reset) again to restart
You must do steps 3-5 every time you flash!
6-Pin Header (Recommended)
Pinout:
Pin 1: +3V3 (optional)
Pin 2: GND
Pin 3: UART_TX (ESP32 GPIO1)
Pin 4: UART_RX (ESP32 GPIO3)
Pin 5: DTR (ESP32 GPIO0)
Pin 6: RTS (ESP32 EN)
Pros:
- ✅ Automatic reset - no buttons needed
- ✅ Faster and easier flashing
- ✅ Less error-prone
- ✅ Standard for ESP32 development
- ✅ Works with all flashing tools automatically
Cons:
- ❌ 2 extra pins (minimal cost difference)
- ❌ Slightly larger header
Flashing Process (6-Pin):
- Connect USB-to-Serial adapter (all 6 pins)
- Power board (via J1 or J2 Pin 1)
- Just run
esptoolor ESPHome - that's it! - DTR/RTS automatically handle reset and boot mode
- No buttons needed!
Much easier!
Recommendation
Use 4-Pin If:
- You only flash firmware occasionally
- You don't mind pressing buttons
- You want absolute minimal component count
- Cost is critical (though difference is minimal)
Use 6-Pin If (Recommended):
- You flash firmware regularly
- You want convenience
- You want standard ESP32 development workflow
- You want automatic reset (most common setup)
Cost Comparison
| Header Type | Cost (typical) | Difference |
|---|---|---|
| 4-pin header | ~$0.05 | - |
| 6-pin header | ~$0.07 | +$0.02 |
Difference is negligible (~$0.02 per board)
Component Count
| Option | Header Pins | Resistors | Total Components |
|---|---|---|---|
| 4-pin | 4 | 0 | 1 component |
| 6-pin | 6 | 2 (optional) | 1-3 components |
6-pin with optional pull-ups: Adds 2 resistors (R5, R6) - but these are optional
My Recommendation
Use 6-pin header because:
- Only $0.02 more expensive (negligible)
- Much more convenient - no button pressing
- Standard practice for ESP32 development
- Pull-up resistors are optional - you can skip R5 and R6 if you want
- Saves time - especially if you flash multiple times during development
If you really want minimal: Use 4-pin, but you'll need to press buttons every time you flash.
Updated Component List for 4-Pin Option
If you choose 4-pin header:
| Ref | Component | Library | Symbol | Value | Notes |
|---|---|---|---|---|---|
| J2 | Header | Connector_PinHeader_2.54mm |
PinHeader_1x04_P2.54mm_Vertical |
- | 4-pin programming header |
Connections:
- J2 Pin 1 → +3V3 (optional)
- J2 Pin 2 → GND
- J2 Pin 3 → Net Label
UART_TX→ U2.GPIO1 - J2 Pin 4 → Net Label
UART_RX→ U2.GPIO3
No R5, R6 resistors needed (they're only for DTR/RTS pull-ups)
Summary
4-Pin: Works, but requires manual button pressing every flash 6-Pin: Recommended - automatic reset, standard practice, only $0.02 more
My vote: Go with 6-pin for the convenience, especially since the cost difference is minimal.