ESP32

The ESP32 boards we actually use

C3 and C6 Super Mini, S3 N16R8 and the Cheap Yellow Display: which board for which job, and the pins to leave alone.

Some hardware links on this page are affiliate links. As an Amazon Associate I earn from qualifying purchases. We may earn a commission if you buy through them, at no extra cost to you. See the affiliate disclosure.

Almost every ESPHome build on this site runs on one of four boards. They are all cheap, and they all look alike in a parts bin, but they are not interchangeable. Pick by the job, then check the pin notes below before you solder anything.

Which board for which job

Job Board Why
Battery door/window sensor, button, anything that sleeps ESP32-C3 Super Mini Small, cheap, good deep sleep. Wakes from GPIO0–GPIO5
Mains-powered sensor (climate, presence, relay) ESP32-C6 Super Mini Wi-Fi 6 and an 802.15.4 radio, so it can also be a Thread router later
Voice satellite, camera, audio, anything that needs RAM ESP32-S3 N16R8 8 MB PSRAM holds wake-word models and audio buffers
Touch control panel on a desk or wall Cheap Yellow Display Screen, touch and a classic ESP32 on one board, powered by USB

If you are unsure, buy the C6. It covers most sensor builds and gives you Thread for free.

ESP32-C3 Super Mini

The board for things that run on a battery. In ESPHome use board: esp32-c3-devkitm-1.

  • Deep-sleep wake pins. Only GPIO0–GPIO5 can wake the C3 from deep sleep. Put a reed switch or button on one of those. Our battery reed sensor uses GPIO4.
  • Leave alone. GPIO2, GPIO8 and GPIO9 are boot straps. GPIO8 also drives the onboard LED on most Super Minis. GPIO18 and GPIO19 are USB.
  • Weak Wi-Fi. Some Super Mini batches drop off Wi-Fi under load. If a C3 keeps reconnecting, add output_power: 8.5dB under wifi: before you blame the router.
  • Battery voltage. The ADC tops out near 3.3 V. Read a LiPo through a 2:1 divider (two equal resistors) and multiply by 2 in a filter.

ESP32-C6 Super Mini

Our default sensor board. In ESPHome use board: esp32-c6-devkitc-1 and build with ESP-IDF.

  • Leave alone. GPIO8 (LED and strap), GPIO9 (BOOT button and strap), GPIO12 and GPIO13 (USB D− and D+), and GPIO15 (strap).
  • I²C. GPIO0 and GPIO1 are free on the Super Mini, which makes a four-wire sensor tidy. That is what the ESP32-C6 climate sensor uses.
  • Thread. The 802.15.4 radio lets the same board join your Thread network as a router (ESPHome 2025.6.1 or newer). See the Thread router workflow.
  • Power. USB-C, or 5 V on the 5V pin, never both at once. Sensors take 3.3 V from the 3V3 pin.

ESP32-S3 N16R8

The big board. N16R8 means 16 MB flash and 8 MB PSRAM. In ESPHome use board: esp32-s3-devkitc-1 and add a psram: block.

  • Why PSRAM. Wake-word models, I²S audio buffers and camera frames do not fit in internal RAM. A board without PSRAM will build and then fail at runtime. Check that the listing says R8 (N16R8 or N8R8).
  • Leave alone. On R8 modules, GPIO35–GPIO37 are wired to the octal PSRAM. GPIO0, GPIO3, GPIO45 and GPIO46 are straps. GPIO19 and GPIO20 are USB.
  • Two USB ports or one. Some S3 boards have a UART port and a native USB port. Either can flash it. If one shows no logs, try the other.
  • Used in: the ESP32-S3 voice satellite and the AirPlay receiver.

Cheap Yellow Display (ESP32-2432S028R)

A classic ESP32 with a 2.8″ ILI9341 screen and XPT2046 resistive touch already wired. In ESPHome use board: esp32dev.

  • The pins are fixed. The screen, touch, SD slot and RGB LED already use most of the GPIO. Use the pin map from the pack or your board’s listing, and do not move them.
  • Classic ESP32 rules. GPIO6–GPIO11 are flash. GPIO34–GPIO39 are input-only. ADC2 pins do not work while Wi-Fi is on.
  • Variants. The “R” suffix means resistive touch. A “C” variant uses capacitive touch on different pins, so the YAML will not carry over.
  • Used in: the CYD touch control panel.

Pins that ruin a weekend

Most “ESPHome won’t boot” problems are a sensor on a strapping pin. A strap pin is read once at reset to pick the boot mode. If an I²C pull-up or a button holds it high or low at that moment, the board boots into download mode, or does nothing at all. The fix is always the same: move the wire to a plain GPIO.

Before you wire anything:

  1. Look up the straps for your exact chip (above).
  2. Keep the USB pins free if you want to flash and read logs over USB.
  3. Put pins in substitutions: at the top of the YAML so moving one is a one-line change.

Flashing the first time

  1. Plug the board in with a USB cable that carries data. Many cheap cables are power-only.
  2. Open the ESPHome Device Builder in Home Assistant, create a device, and pick the board name above.
  3. Flash over USB from the browser (Chrome or Edge). After that, updates go over Wi-Fi.
  4. If the browser cannot connect, hold BOOT, tap RESET, release BOOT, and try again.

Keep Wi-Fi credentials and API keys in secrets.yaml, never in a YAML file you share.