ESP32 Family Reference: Boards, Benchmarks, Use Cases, and Pitfalls

Reference date: 2026-10-01
Audience: makers, embedded developers, and teams selecting hardware for connected products.
Coverage: original ESP32, S2, S3, C2/ESP8684, C3, C5, C6, C61, H2, and P4.

The shortest useful answer: choose C3 for straightforward, inexpensive Wi-Fi/BLE projects; S3 with PSRAM for USB devices, graphics, audio processing, and small vision models; C6 for Wi-Fi plus Thread/Zigbee; C61 with PSRAM for memory-hungry Wi-Fi 6/BLE applications that do not need Thread; C5 when 5 GHz Wi-Fi is a requirement; H2 for Thread/Zigbee devices without Wi-Fi; and P4 for substantially more demanding multimedia, usually with a companion wireless chip.

This is a selection reference, not a substitute for a board schematic or the exact chip/module datasheet. Benchmarks below are published results, not measurements performed for this document. Newer families and silicon revisions may have different availability and software support.

Contents

Diagrams are rendered from Mermaid at build time. The adjacent tables and descriptions contain the same selection information.

1. Chip, module, and board are different things

People often say “ESP32 board” when they mean an ESP32 chip family. That ambiguity causes purchasing mistakes.

LayerExampleWhat it determines
SoC / chipESP32-S3, ESP32-C6CPU architecture, radio hardware, peripheral controllers, internal memory
ModuleESP32-S3-WROOM-1-N8R8Chip, flash/PSRAM configuration, antenna implementation, module pinout
Development boardESP32-S3-DevKitC-1-N8R8Power circuit, USB routing, exposed pins, buttons, LEDs, connectors
Application boardA camera board, display kit, or battery sensor boardAttached peripherals, occupied pins, actual sleep current, enclosure constraints
Diagram

Naming rules worth knowing:

  • S3, C6, and C61 are not interchangeable revisions of one pin-compatible chip.
  • WROOM does not universally mean “no PSRAM.” Some S3 and C61 WROOM configurations include PSRAM.
  • WROVER is strongly associated with PSRAM-equipped original ESP32 modules, but do not apply that naming rule to every family.
  • On an ESP32-S3-WROOM-1-N8R8, the module documentation identifies 8 MB flash and 8 MB PSRAM. Suffix conventions are product-specific; read the ordering table.
  • A USB-C connector describes a connector, not a USB peripheral capability.
  • A module with radio certifications can simplify compliance, but it does not automatically certify the complete finished product.

Source: Espressif board-selection guide, Arduino board guide, and S3 DevKit ordering information.

2. Quick selection guide

Start with the requirement that cannot be added in software

Hard requirementFirst candidatesImportant qualification
Low-cost Wi-Fi sensor, switch, or MQTT controllerC3; C2 for tightly cost-optimized productsC2 has less memory and a more involved Arduino setup
General-purpose Wi-Fi/BLE plus native USB HID or custom USB deviceS3Buy a board with native USB wired out
Wi-Fi plus capacitive touch, audio DSP, or a DVP cameraS3 with PSRAMPeripheral compatibility and buffer size still matter
Thread or Zigbee plus Wi-Fi on the same SoCC6, C5Hardware capability does not guarantee all protocol combinations are supported concurrently
Wi-Fi 6 plus PSRAM, without Thread/ZigbeeC61, C5C61 has no 802.15.4 radio
5 GHz Wi-FiC5S3, C6, and C61 are 2.4 GHz-only
Thread/Zigbee sensor without Wi-FiH2Needs the appropriate network infrastructure
Bluetooth Classic SPP or A2DPOriginal ESP32, among the main families covered hereBLE is not a substitute for Bluetooth Classic
Wi-Fi USB device with no Bluetooth requirementS2 or S3S2 is single-core and has no Bluetooth
MIPI display/camera, high-speed USB, or heavier multimediaP4No integrated Wi-Fi/Bluetooth; plan connectivity separately
Precise analog measurementsAny suitable MCU plus an external ADCNominal ADC bit depth alone is not a precision guarantee
Diagram

This diagram gives starting points, not mutually exclusive categories. A project needing several capabilities must satisfy all of them.

S3 vs C6 vs C61 vs C5

QuestionS3C6C61C5
Two main application cores?YesNoNoNo
Wi-Fi generationWi-Fi 4Wi-Fi 6Wi-Fi 6Wi-Fi 6
5 GHz Wi-Fi?NoNoNoYes
Integrated Thread/Zigbee radio?NoYesNoYes
Memory-mapped PSRAM support?YesNoYesYes
Programmable USB OTG?Yes, full-speedNoNoNo
Main selection advantageCompute, DSP, USB, graphicsWi-Fi + mesh, LP coreWi-Fi 6 + expandable RAMDual-band Wi-Fi + mesh + expandable RAM

C61 is not “C6 with more features.” It trades the C6’s 802.15.4 radio and separately programmable LP CPU for a different Wi-Fi/BLE-oriented design with PSRAM support.

3. Hardware comparison

3.1 CPU and memory

Values are silicon capabilities, not the free heap or the memory fitted to every board. “Main SRAM” follows the vendor’s headline memory figure; cache reservations and other dedicated regions can reduce usable application memory.

FamilyMain application CPUMaximum main clockSecondary low-power executionMain internal SRAMMemory-mapped PSRAM
ESP32Usually 2-core Xtensa LX6; single-core variants exist240 MHzULP FSM coprocessor520 KBYes, selected modules/designs
S21-core Xtensa LX7240 MHzULP RISC-V / FSM320 KBYes
S32-core Xtensa LX7240 MHzULP RISC-V / FSM512 KBYes
C2 / ESP86841-core RISC-V120 MHzNo separate programmable LP CPU272 KBNo
C31-core RISC-V160 MHzNo separate programmable LP CPU400 KBNo
C51-core HP RISC-V240 MHzLP RISC-V, up to 48 MHz in datasheet v1.5384 KB, plus 16 KB LP SRAMYes, variant-dependent
C61-core HP RISC-V160 MHzLP RISC-V, up to 20 MHz512 KB, plus 16 KB LP SRAMNo
C611-core RISC-V160 MHzNo separate programmable LP CPU320 KBYes, variant-dependent
H21-core RISC-V96 MHzNo separate programmable LP CPU320 KB, plus 4 KB LP memoryNo
P42-core HP RISC-VUp to 400 MHz; check silicon revisionLP RISC-V, up to 40 MHz768 KB HP L2 memory, plus dedicated LP/SPM regionsYes; package-dependent

Interpretation:

  • An LP/ULP coprocessor is not another interchangeable FreeRTOS application core.
  • C2/C3 memory figures include cache reservations. Do not treat the entire headline number as available heap.
  • PSRAM is larger but has different access latency, cache behavior, and allocation/peripheral restrictions from internal SRAM.
  • C6 can access ordinary SPI peripherals, including suitable RAM devices managed explicitly by software, but that is not equivalent to supported memory-mapped PSRAM.
  • The C5 datasheet v1.5 lists an LP CPU maximum of 48 MHz; Espressif’s overview table lists 40 MHz. For a design, resolve this against the exact silicon revision and SDK clock configuration rather than relying on the overview.

3.2 Radios and native USB

FamilyWi-FiBluetoothIEEE 802.15.4Native USB hardware
ESP322.4 GHz, 802.11b/g/nClassic BR/EDR + BLENoNone
S22.4 GHz, 802.11b/g/nNoneNoFull-speed OTG
S32.4 GHz, 802.11b/g/nBLENoFull-speed OTG + Serial/JTAG
C22.4 GHz, 802.11b/g/nBLENoNone
C32.4 GHz, 802.11b/g/nBLENoFixed-function Serial/JTAG
C52.4 and 5 GHz, Wi-Fi 6 / 802.11ax, with legacy modesBLEYes: Thread/ZigbeeFixed-function Serial/JTAG
C62.4 GHz, Wi-Fi 6 / 802.11ax, with legacy modesBLEYes: Thread/ZigbeeFixed-function Serial/JTAG
C612.4 GHz, Wi-Fi 6 / 802.11ax, with legacy modesBLENoFixed-function Serial/JTAG
H2NoneBLEYes: Thread/ZigbeeFixed-function Serial/JTAG
P4NoneNoneNoHigh-speed OTG, full-speed OTG, and Serial/JTAG

Bluetooth version labels and certifications change as controllers/stacks evolve. Check support for the specific feature you need: coded PHY, advertising extensions, direction finding, LE Audio, or a particular profile. “Bluetooth 5/6” is not a promise that every optional feature is implemented.

USB terms:

  • USB-to-UART bridge: an external chip such as CP210x or CH340; the MCU itself may have no USB controller.
  • USB Serial/JTAG: a fixed-function controller for programming, console, and debugging. It does not turn a C3/C6/C61/H2 into an arbitrary USB keyboard, mass-storage device, or audio device.
  • USB OTG: a programmable USB controller suitable for supported host/device classes, subject to stack and board support.
  • Full-speed: 12 Mbit/s signaling. High-speed: 480 Mbit/s signaling. Neither is guaranteed useful application throughput.
  • S3’s native OTG and Serial/JTAG normally share its internal USB PHY. Simultaneous use requires checking PHY ownership and, where applicable, an external PHY design.

3.3 Peripheral differences that frequently block a design

CapabilityPractical selection rule
Capacitive touchPresent on original ESP32, S2, S3, and P4; not a standard feature of the C/H families covered here
On-chip analog DACOriginal ESP32 and S2 have two 8-bit DACs; S3 and the other covered families do not
Audio output on S3/C-seriesUse an I2S DAC/codec/amplifier, or suitable PWM-based output; an I2S controller is not an analog DAC
Ethernet MACOriginal ESP32 and P4; normally requires an external PHY and board-level wiring
Ethernet on other familiesExternal SPI Ethernet controllers are an option; account for bus and driver limits
CAN / TWAIFamily-specific: C5 includes CAN FD controllers; many others offer Classical CAN/TWAI, while C2/C61 do not offer the same capability
Physical CAN connectionA CAN/TWAI controller still needs an appropriate transceiver; GPIOs cannot be connected directly to CANH/CANL
MIPI CSI/DSIP4 among the main families covered here
Parallel camera / LCDS3 is a strong candidate; S2 and original ESP32 have different interfaces and resource-sharing constraints
GPIO countChip count is not usable board-pin count; subtract flash/PSRAM, straps, native USB, and onboard peripherals

Sources: family datasheets linked in Section 3.1. Peripheral counts, pin mappings, and errata must be checked against the exact part.

4. Family profiles and use cases

4.1 ESP32-S3: compute, DSP, graphics, and programmable USB

Choose it for: USB HID/MIDI or other supported USB classes, LVGL displays, microphone processing, voice interfaces, DVP cameras, and small quantized vision models.

Its two application cores, single-precision FPU, vector instructions, native USB OTG, and PSRAM ecosystem make it a strong default for feature-rich maker projects.

Good starting configuration: an S3 board with a documented 8 MB flash / 8 MB PSRAM variant, such as an N8R8 DevKit configuration. Smaller configurations may be sufficient, but graphics and camera applications benefit from RAM headroom.

Do not choose it assuming: Bluetooth Classic, 5 GHz Wi-Fi, Thread/Zigbee, a built-in DAC, or high-speed USB. It has none of those.

Example: a touchscreen device with microphone input, Wi-Fi provisioning, and USB maintenance. Use queues between acquisition and processing tasks, DMA-capable buffers where required, and PSRAM for larger non-critical buffers.

4.2 ESP32-C6: integrated Wi-Fi and 802.15.4

Choose it for: Matter-over-Thread or Matter-over-Wi-Fi devices, Zigbee experiments, connected controls, and low-power monitoring where the LP CPU can reduce main-core wakeups.

Main advantage: Wi-Fi 6, BLE, and an 802.15.4 radio on one SoC, with more main SRAM than C61 and a separately programmable LP CPU.

Limits: one main application core, no supported memory-mapped PSRAM, no programmable USB OTG, and 2.4 GHz-only Wi-Fi.

Example: a connected environmental sensor whose product variant runs either a Thread stack or a Wi-Fi stack. Validate wake sources, protocol stack memory, and coexistence rather than assuming every radio can be used without contention.

4.3 ESP32-C61: Wi-Fi 6/BLE with expandable RAM

Choose it for: Wi-Fi/BLE connectivity adapters, data loggers, POS-style interfaces, and networked applications that need more buffer space than internal SRAM alone allows.

Main advantage: Wi-Fi 6 plus PSRAM support in a single-main-core device.

Important differences from C6: no 802.15.4 radio, no separately programmable LP CPU, and only 320 KB headline main SRAM. Adding PSRAM does not replace all internal-memory requirements.

The official ESP32-C61-DevKitC-1 documentation describes an ESP32-C61-WROOM-1 configuration with up to 8 MB flash and 2 MB PSRAM. Other C61 silicon configurations exist; PSRAM is not guaranteed merely by the C61 name.

Do not choose it for: a standalone Thread/Zigbee endpoint or an arbitrary USB HID device.

Example: a Wi-Fi sensor hub that batches measurements in PSRAM and exposes a BLE provisioning interface.

4.4 ESP32-C5: dual-band Wi-Fi and a broader connectivity mix

Choose it for: products that must use 5 GHz Wi-Fi, connectivity adapters, gateways, or designs combining Wi-Fi, BLE, and 802.15.4.

Main advantage: 2.4/5 GHz Wi-Fi 6, a 240 MHz main CPU, PSRAM-capable variants, and CAN FD controllers.

Limits: still one main application core, no programmable USB OTG, and more revision-dependent details than older families. Its datasheet explicitly identifies revision restrictions for some peripherals.

Do not assume: simultaneous independent operation on both Wi-Fi bands or router-class Wi-Fi throughput. Dual-band capability is not the same as dual concurrent radios.

Example: a mains-powered control gateway on a 5 GHz network, with an external CAN transceiver and an SDK-supported mesh configuration.

4.5 Other useful families

FamilyGood fitMain reason to look elsewhere
Original ESP32Existing projects, Classic Bluetooth SPP/A2DP, Ethernet-MAC designs, basic camera boardsNo native USB; older peripheral architecture; exact part longevity matters
S2Wi-Fi-enabled USB devices, capacitive-touch interfaces, designs using its DACsNo Bluetooth and one main core; S3 is often more flexible
C3Small Wi-Fi/BLE sensors, lighting, relays, simple web/MQTT applicationsNo PSRAM, Thread/Zigbee, or programmable USB OTG
C2 / ESP8684Cost- and footprint-sensitive connected products with modest firmwareTighter RAM/peripheral budget and less convenient Arduino packaging
H2Thread/Zigbee endpoints, BLE devices, dedicated 802.15.4 radio coprocessorsNo Wi-Fi; not a drop-in replacement for a Wi-Fi board
P4Large HMIs, MIPI camera/display pipelines, video encoding, high-speed USBNo integrated wireless; larger system, firmware, and power budget

Battery-device qualification: H2 or C6 is not automatically the “lowest-power board.” Sleep current, wake frequency, protocol role, sensor power, and board electronics determine the result. A Thread router is normally continuously available; a sleepy end device has different requirements.

5. Benchmarks and performance interpretation

5.1 Published CoreMark results

CoreMark measures a small CPU workload. It does not measure Wi-Fi throughput, display refresh, ADC quality, or full application performance.

These are datasheet-reported figures, with the explicitly separate ESP-IDF example below. They are not a controlled cross-family experiment: most datasheet summaries do not disclose a complete toolchain, memory placement, or runtime configuration.

FamilyBenchmark clockApplication cores participatingPublished CoreMarkPublished CoreMark/MHzSource version
ESP32240 MHz1539.982.25Datasheet v5.3
ESP32240 MHz21,079.964.50Datasheet v5.3
S2240 MHz1542.802.26Datasheet v1.9
S3240 MHz21,329.925.54Datasheet v2.2
C2 / ESP8684120 MHz1369.583.08Datasheet v2.3
C3160 MHz1483.273.02Datasheet v2.4
C5240 MHz1 HP820.193.42Datasheet v1.5; O3 stated
C6160 MHz1 HP496.663.10Datasheet v1.5
C61160 MHz1553.783.46Datasheet v1.1; O3 stated
H296 MHz1303.383.16Datasheet v1.3
P4Not stated in the score summary2 HPAbsolute score not stated6.92Preliminary datasheet v0.7

Do not directly compare a two-core score with a one-core score as though both describe a single task. CoreMark/MHz in a dual-core result is also an aggregate figure, not per-core efficiency.

The P4 value is intentionally not multiplied by its maximum clock to manufacture an absolute benchmark result. Its current linked datasheet is preliminary, and the summary does not provide a complete benchmark configuration.

Why different websites give different C3 numbers

Espressif’s CoreMark component example reports 409.249028 at 160 MHz, using GCC 12.2.0, CoreMark code in IRAM, and -O3 -fjump-tables -ftree-switch-conversion.

That is different from the C3 datasheet’s 483.27. Both are published figures from different measurement contexts. The difference is a warning against silently combining benchmark tables from different versions and setups.

5.2 DSP: the instruction set and optimized library matter

Selected ESP-DSP benchmark results, using the published O2 optimized implementation columns. Values are CPU cycles, so lower is better. They are not timings at a common clock.

OperationESP32 cyclesS3 cyclesP4 cycles
Float dot product, 256 points1,0474321,319
Signed 16-bit dot product, 256 points437307208
Float FIR, 1,024 samples, 256 coefficients1,078,691443,6711,606,563
Float radix-2 FFT, 1,024 complex points113,20597,847126,053
Signed 16-bit radix-2 FFT, 1,024 complex points226,15415,62317,523

What this tells you: S3’s optimized vector paths can make a large difference for particular DSP workloads. P4’s higher clock and newer architecture do not make it the fewest-cycle winner for every function.

What it does not tell you: end-to-end audio latency, total energy, or performance of an unoptimized Arduino library. Memory placement, cache configuration, compiler version, and the actual algorithm still need measurement.

5.3 Neural-network inference: published S3 vs P4 examples

Selected ESP-NN model benchmarks from a pinned README revision. These measure model invoke() time, not image capture, preprocessing, drawing, networking, or total camera-to-result latency.

INT8 modelChip / clockWithout ESP-NNWith ESP-NNWith ESP-NN, dual-core enabled
MobileNetV3 Small, 224 by 224 RGB, 1,000 classesS3 / 240 MHz26,679 ms729 ms690 ms
MobileNetV3 Small, 224 by 224 RGB, 1,000 classesP4 / 400 MHz10,980 ms388 ms253 ms
YOLO11n, 192 by 192 RGB, 80 classesS3 / 240 MHz130,753 ms1,253 ms1,053 ms
YOLO11n, 192 by 192 RGB, 80 classesP4 / 400 MHz52,240 ms620 ms417 ms

Published conditions include a PSRAM tensor arena; P4 uses 200 MHz HEX PSRAM, while S3 uses 80 MHz octal PSRAM and a 64 KB data cache. Dual-core results explicitly enable the library’s dual-core kernel processing.

Practical conclusion: choose the model, tensor format, optimized kernels, and memory configuration together. The application may spend more time moving pixels than running the model.

Diagram

5.4 Wireless benchmarks: distinguish PHY rate from useful throughput

MetricWhat it actually means
Wi-Fi advertised PHY rateRadio signaling rate under a particular modulation/channel mode
TCP/UDP iperf throughputNetwork payload performance under a specified test setup
MQTT publish latencyIncludes scheduling, transport, broker behavior, and possibly TLS/connection setup
BLE PHY rateNot the same as application throughput; connection interval and packet negotiation matter
802.15.4 rateThese radios use a 250 kbit/s PHY in 2.4 GHz; protocol overhead reduces usable payload
Wi-Fi 6Features can improve operation in dense networks and power management; not an automatic speed multiplier

No cross-family TCP throughput ranking is invented here. A useful comparison needs the same AP, wired server, firmware settings, band/channel width, RSSI, power-saving mode, and coexistence workload. Test C5’s 2.4 and 5 GHz operation separately.

5.5 Deep-sleep figures are a baseline, not board benchmarks

Selected headline chip deep-sleep figures from the linked datasheets:

ChipPublished deep-sleep figure
Original ESP3210 microamps
S37 microamps
C2 / ESP86845 microamps
C35 microamps
C67 microamps
C6110 microamps
H27 microamps

These are not a controlled ranking of battery life. Retention settings, temperature, flash/PSRAM configuration, LP execution, and wake circuitry affect the applicable conditions. An LED, USB bridge, regulator, sensor, or voltage-divider path may dominate complete-board sleep current.

5.6 A reproducible benchmark procedure

Use Espressif’s CoreMark example after installing an ESP-IDF release supporting your target:

bash
idf.py create-project-from-example "espressif/coremark:coremark_example"
cd coremark_example
idf.py set-target esp32c6
idf.py menuconfig
idf.py build
idf.py -p /dev/ttyACM0 flash monitor

Replace the target and port with your actual chip and interface. Examples include esp32, esp32s3, esp32c3, esp32c5, esp32c6, esp32c61, esp32h2, and esp32p4.

For a comparison worth keeping:

  1. Record the full board/module SKU, silicon revision, flash, PSRAM, and antenna.
  2. Pin ESP-IDF, the benchmark component, compiler, and project configuration. Keep the dependency lockfile.
  3. Confirm CPU clock, optimization flags, code/data placement, PSRAM mode, and cache configuration.
  4. Match participating application cores. Do not count an LP/ULP CPU as another benchmark worker.
  5. Separate “radios off” CPU measurements from realistic “radios and application active” measurements.
  6. Preserve full output, including validation checks. Repeat runs and report variation, not only the best score.
  7. Measure the actual workload too: latency, peak RAM, sustained throughput, dropped samples, and energy per useful operation.
TestRecommended output
CPU benchmarkValidated score, clock, participating cores, compiler/flags, memory placement
Wi-Fi testTCP and UDP results in both directions; RSSI, band, channel width, AP, packet size, duration
Graphics testResolution, pixel format, bus, buffering, frame time, dropped/partial frames
Audio/vision testSample/frame settings, model/library version, processing latency, overrun count
Power testComplete-device sleep current, active trace, wake-to-result time, energy per cycle
Stability testDuration, reconnect count, minimum heap, largest free block, reset/panic count

6. Development-board buying guide

6.1 Useful starting points

These are reference examples, not claims that every retailer has the same revision or stock.

FamilyBoard/module starting pointWhy it is usefulWhat to verify
Original ESP32ESP32-DevKitC or a documented WROOM/WROVER boardMature examples; Classic BluetoothExact module, PSRAM, USB bridge, board width
S2ESP32-S2-Saola-1 or a documented S2 USB boardWi-Fi plus native USBNative USB routing and flash/PSRAM
S3ESP32-S3-DevKitC-1, preferably a PSRAM SKUBroad prototyping and USB/DSP workN8R8 vs another memory configuration; correct USB connector
C3ESP32-C3-DevKitM-1 or a documented compact C3 boardStraightforward Wi-Fi/BLE developmentAntenna design, regulator, native USB exposure
C6ESP32-C6-DevKitC-1 or DevKitM-1Wi-Fi/Thread/Zigbee explorationChip package, available pins, current-measurement path
C61ESP32-C61-DevKitC-1Official PSRAM-equipped reference configurationExact flash/PSRAM and SDK/toolchain support
C5ESP32-C5-DevKitC-1Dual-band Wi-Fi and mesh capabilitiesBoard/silicon revision, antenna, memory variant
H2ESP32-H2-DevKitM-1Thread/Zigbee or RCP workNetwork infrastructure and absence of Wi-Fi
P4ESP32-P4-Function-EV-BoardDisplay, camera, Ethernet, and multimedia referenceIncluded accessories, P4 revision, companion wireless firmware

The documented P4 Function EV Board includes an ESP32-C6 companion module for Wi-Fi/BLE. That is a board-level feature, not wireless hardware inside P4.

6.2 Do not buy by the thumbnail alone

“DevKit V1,” “SuperMini,” “ESP32 camera,” and similar marketplace names are not reliable hardware specifications. Different sellers can use different modules, regulators, antennas, LEDs, and pin assignments under nearly identical names.

Before buying, obtain:

  • A readable module marking and exact SKU, not just “ESP32.”
  • The schematic and pinout for the actual board revision.
  • Confirmed flash and PSRAM, including the memory bus mode where relevant.
  • An explanation of each USB connector: power only, UART bridge, native Serial/JTAG, or OTG.
  • Sleep-current measurements and regulator information if battery life matters.
  • Antenna type and placement requirements, plus whether an external antenna is included.
  • Battery charging/protection information; a connector does not prove either exists.

Price guidance: compare total system cost, not only the bare board price. A cheaper chip may need an external USB controller, more glue logic, another radio, or additional development work. Prices vary too much by supplier, region, and volume to treat a static dollar table as a dependable reference.

7. Software and portability

7.1 Framework selection

EnvironmentBest useMain caution
ESP-IDFProduction firmware, power management, advanced drivers, newest targetsSelect a release that supports the exact chip and silicon revision
Arduino-ESP32Fast prototypes and Arduino-library reuse”ESP32-compatible” libraries can still assume original ESP32 registers, cores, or pins
Arduino as an ESP-IDF componentArduino APIs alongside IDF configuration and componentsMatch the documented Arduino/IDF version compatibility
ESPHomeHome-automation devices supported by its current platform/componentsHardware capability does not imply every component or transport is supported
MicroPython / CircuitPythonInteractive scripting and rapid sensor experimentsCheck the specific firmware build, board definition, drivers, and memory needs
Thread/Zigbee/Matter SDKsProducts using those protocol stacksCheck target, transport, stack versions, role, and certification requirements

The Arduino-ESP32 support table lists stable support for ESP32, S2, S3, C3, C5, C6, H2, and P4. It explicitly notes that C2 and C61 require Arduino as an ESP-IDF component or rebuilding the static libraries. That distinction matters if you expect a normal Boards Manager workflow.

The C61 ESP-IDF getting-started guide has a stable target guide. This does not mean every older ESP-IDF release supports C61.

7.2 Porting traps

Assumption in existing codeWhy it breaks
”ESP32 means Xtensa”C/H/P families here use RISC-V
”There is always core 1”Most C/H devices have one main application core
”GPIO 25 is always a DAC”That is an original ESP32 mapping, not a family-wide rule
”The board LED is on GPIO 2”Board and revision dependent; it may be an addressable RGB LED
”USB console and UART console are equivalent”Different drivers, enumeration, sleep behavior, and connector routing
”LEDC/RMT/I2S has the same channel counts and API everywhere”Hardware resources and framework APIs vary
”A binary built for ESP32 works on ESP32-S3/C6”Different targets need their own builds
”More PSRAM fixes every allocation failure”Some allocations must remain internal or have specific capabilities

Keep board-specific pin definitions and capabilities separate from application logic. Use documented driver APIs instead of hard-coded peripheral registers when portability matters.

8. Memory, power, and radio architecture

8.1 Flash, internal SRAM, and PSRAM are not interchangeable

Diagram

Example: one 800 by 480 RGB565 framebuffer needs 768,000 bytes, about 750 KiB, before GUI objects, stacks, radio buffers, or other allocations. Double buffering needs about 1.46 MiB just for the pixels.

That is why a seemingly powerful chip can still be the wrong choice for a large GUI without PSRAM or a suitable streaming/buffering strategy.

Memory tips:

  • Put large, less latency-sensitive buffers in PSRAM when the target and driver support it.
  • Preserve internal memory for stacks, hot data, and allocations with specific DMA/driver requirements.
  • Do not assume either that every DMA transfer supports PSRAM or that none do. Capabilities vary by chip, peripheral, and driver.
  • Track minimum free heap and largest free block, not only total free memory.
  • Budget OTA partitions in flash, not RAM. Two firmware slots, rollback metadata, NVS, and assets need a realistic partition table.
  • A 4 MB flash board can work well for a simple app, but may be restrictive for larger firmware plus dual-slot OTA and embedded web assets.

8.2 Battery life: optimize the full cycle

For a periodically reporting Wi-Fi device, the expensive phase is often reconnecting and transmitting, not taking the sensor reading.

Diagram

Practical priorities:

  • Measure at the battery or complete-device supply input, not just the SoC rail.
  • Remove or gate unnecessary LEDs, sensors, USB bridges, and high-leakage paths.
  • Compare energy per completed report, including connection failures and retries.
  • Consider batching, reducing report frequency, or a different network protocol.
  • Use light sleep/modem sleep when maintaining connectivity is more appropriate than repeated cold reconnects.
  • Select wake-capable pins and retention settings for the exact family.
  • Use C6/C5 LP execution or S2/S3 ULP features only after verifying what sensors/peripherals can actually run while the main system sleeps.

8.3 Matter, Thread, Zigbee, and BLE are different layers

TechnologyRole
IEEE 802.15.4Radio/link foundation used by Thread and Zigbee
ThreadIPv6 mesh networking over 802.15.4
ZigbeeA different networking/application ecosystem over 802.15.4
MatterApplication interoperability protocol operating over IP transports, including Wi-Fi, Thread, and Ethernet
BLEOften used for commissioning; also supports its own applications and mesh ecosystem

Consequences:

  • S3/C3/C61 can be candidates for Matter over Wi-Fi without having a Thread radio, subject to SDK/resource support.
  • H2 can be a Matter-over-Thread endpoint despite having no Wi-Fi.
  • Supporting 802.15.4 does not guarantee a firmware can run Zigbee and Thread simultaneously.
  • A Thread border router needs a Thread interface, a backbone interface, and border-router software; it is not merely a Thread-capable chip.
  • Multiple wireless protocols can contend for shared RF resources. Read the target’s supported coexistence combinations.

8.4 A common Thread border-router architecture

Espressif’s Thread Border Router SDK uses a host processor plus a separate radio coprocessor in its documented reference architecture.

Diagram

The official border-router board uses S3 + H2. Supported host/RCP combinations and their exact transport wiring are SDK-specific. A P4-based system still needs an appropriate backbone interface, such as Ethernet or a wireless companion.

9. Bad practices and better alternatives

Bad practiceLikely consequenceBetter approach
Pick a family by its number: “C61 must be better than C6”Missing a required radio/peripheralSelect by hard requirements and exact datasheet
Connect 5 V logic directly to a GPIODevice damage or unreliable operationRespect IO voltage limits; use appropriate level shifting
Drive relays, motors, or speakers directly from GPIOOvercurrent, noise, resets, damageUse suitable drivers, transistors, amplifiers, and protection
Power a Wi-Fi board from a marginal USB cable or tiny regulatorBrownouts during radio burstsDesign for transient current and verify the rail at the module
Disable the brownout detector to “fix” resetsCorruption and harder-to-debug instabilityFix supply, wiring, decoupling, and load transients
Reuse original ESP32 pin assignments on S3/C6Boot failures or peripheral conflictsUse the actual board schematic and target pin documentation
Attach strong pull resistors or loads to strapping pins without analysisWrong boot mode or memory-voltage configurationDesign the reset-time levels deliberately
Use flash/PSRAM pins as general IOCrashes, boot failure, corrupted transfersReserve memory-connected pins
Expect original ESP32 GPIO34-39 to drive outputs or supply pull-upsNon-working inputs/outputsRespect input-only and pull-resistor restrictions
Read classic ESP32 ADC2 while relying on active Wi-FiUnavailable/failed conversionsPrefer ADC1 and handle ADC API errors
Treat a 12-bit ADC as a precision instrumentOffset, nonlinearity, noise, incorrect voltageCalibrate, filter, validate input range, or use an external ADC
Put the antenna behind metal or against a batteryPoor range and inconsistent throughputFollow keepout rules and test the final enclosure
Assume USB-C or Serial/JTAG means programmable USB HIDImpossible peripheral requirementUse S2/S3/P4 with the required OTG interface exposed
Allocate everything in PSRAMLatency or driver/DMA incompatibilityUse capability-aware allocation and intentional placement
Busy-wait or do long work in interruptsWatchdog resets, dropped samples, radio starvationKeep ISRs short; queue work to tasks
Write flash/NVS on every sensor sampleFlash wear and unpredictable stallsBatch, rate-limit, and use appropriate persistence
Ignore API return values and reconnect failuresSuccess-looking logs hiding data lossCheck errors, log actionable context, and use bounded retries
Disable TLS certificate checks in productionConnection to an untrusted endpointMaintain a valid trust strategy and time handling
Hard-code reusable credentials into shared firmwareFleet-wide exposure if extracted/leakedProvision device-specific credentials and protect secrets
Ship OTA without rollback or interruption testingBricked devices after a failed updateValidate images and test power loss, rejection, and rollback
Burn security eFuses while experimenting without a recovery planIrreversible loss of accessRead the exact target security workflow and stage deployment
Use a generic dev board’s chip sleep figure as a battery-life claimMajor runtime shortfallMeasure the complete product across its operating cycle

Original ESP32-specific pin and ADC warnings are not universal pin rules for every ESP32 family. Each target has its own restrictions and errata.

10. Practical tips and troubleshooting

10.1 Hardware bring-up

Espressif’s original ESP32 hardware-design guide recommends a 3.3 V supply capable of at least 500 mA, appropriate local decoupling, and bulk capacitance at the supply entrance. This is a target-specific starting point, not a complete power specification for every ESP32 board or peripheral combination.

Useful habits:

  • Test power during Wi-Fi transmission, not only at idle.
  • Separate noisy/high-current loads from the MCU supply path as appropriate; route returns carefully.
  • Keep a documented BOOT/RESET recovery method and an accessible programming/debug interface.
  • Identify USB data-capable cables before blaming firmware.
  • Do not connect external power and USB in an unsupported combination; inspect the board’s power-path schematic.
  • For antenna validation, test with the real enclosure, cable routing, display, and battery.

10.2 Pin planning before writing drivers

Make a pin-allocation table that reserves:

ReservationExamples of why it matters
Boot/strapping signalsExternal devices may drive them during reset
Flash/PSRAM signalsMay be unavailable or unsuitable for application IO
Native USBFirmware repurposing can remove the USB console/programming path
Onboard RGB LED, display, camera, SD cardBoard peripherals already own those pins
ADC and wake inputsOnly selected pins support the required function
Input-only or special-voltage pinsNot every GPIO has equivalent electrical behavior

On original ESP32 modules, GPIO6-11 are normally tied to flash, GPIO34-39 are input-only, and WROVER configurations can reserve additional pins for PSRAM. Never transfer that list blindly to another family.

10.3 Firmware performance

  • Use the optimized ESP-DSP/ESP-NN path when your workload matches it; confirm it is actually enabled.
  • Measure before pinning tasks to cores. Dual-core hardware does not automatically parallelize a single-threaded algorithm.
  • Avoid blocking a high-priority task on slow I/O; use queues, timeouts, and backpressure.
  • Size buffers from worst-case producer/consumer timing, not only average rates.
  • Profile with logging reduced; serial output can dominate short timing measurements.
  • Monitor stack high-water marks, minimum heap, fragmentation, and reset reasons.
  • For critical interrupt paths, follow the target’s IRAM/cache-safety rules rather than adding IRAM_ATTR indiscriminately.

10.4 Symptom-to-cause reference

SymptomFirst checks
Board disappears from USBCorrect connector; data cable; driver; USB pin reuse; sleep state; wrong USB configuration
Upload cannot startTarget selection; BOOT/RESET sequence; serial port; strap levels; UART/native USB routing
Brownout or reset during Wi-FiCable drop; regulator capability; decoupling; load transients; boot/reset circuit
Analog readings fail with Wi-Fi on original ESP32ADC2 ownership; select ADC1; inspect return codes
Large allocation fails despite free PSRAMRequested memory capabilities; largest block; internal heap; PSRAM initialization
GUI has tearing or low frame rateDisplay bus bandwidth; buffering; transfer completion; rendering cost; memory traffic
Camera frames are corruptedBoard pin mapping; sensor support; buffer location; DMA constraints; supply and signal integrity
BLE works but Classic serial/audio does notDoes the selected SoC support Bluetooth Classic?
Thread firmware cannot find a radio on C61C61 has no 802.15.4 radio; use another target or a supported external RCP
Sleep current remains highLED/bridge/regulator; sensors; pull paths; retained domains; GPIO leakage; USB attachment
Intermittent watchdog resetLong ISR; busy loop; task starvation; blocking driver call; deadlock
OTA leaves device unusablePartition sizing; image validation; rollback setup; power-loss handling

11. Pre-purchase and production checklists

Before buying a board

  • List non-negotiable radio, USB, analog, display/camera, and peripheral requirements.
  • Confirm the exact chip, module SKU, and board revision.
  • Confirm flash/PSRAM capacity and a compatible firmware configuration.
  • Check available GPIOs after memory, USB, straps, and onboard peripherals.
  • Confirm the chosen SDK/framework release supports the target and required components.
  • Check whether Arduino support is standard packaging or a custom component/library build.
  • Obtain the schematic, pinout, and programming recovery procedure.
  • Verify antenna, voltage, battery/power-path, and connector details.
  • Prefer measured complete-board sleep current for a battery project.

Before freezing a production design

  • Check the exact part’s NRND/EOL status, availability, longevity commitment, and errata.
  • Pin toolchains/components and retain reproducible builds.
  • Exercise maximum radio traffic, memory use, peripheral load, and supply transients together.
  • Validate final-enclosure RF performance and applicable regulatory requirements.
  • Measure minimum/maximum operating conditions relevant to the product.
  • Test loss of AP/broker/Thread infrastructure, failed provisioning, and recovery.
  • Verify secure provisioning, trust anchors, secret handling, and a deliberate eFuse policy.
  • Test OTA interruption, invalid images, rollback, and factory recovery.
  • Record application-level benchmark results and full-device energy consumption.
  • Keep manufacturing programming, hardware revision, and calibration records.

12. Sources and maintenance

Primary references

AreaReference
Family selectionEspressif board-selection guide and product selector
Original ESP32ESP32 datasheet v5.3
S2 / S3S2 datasheet v1.9; S3 datasheet v2.2
C2 / C3ESP8684/C2 datasheet v2.3; C3 datasheet v2.4
C5 / C6 / C61C5 datasheet v1.5; C6 datasheet v1.5; C61 datasheet v1.1
H2 / P4H2 datasheet v1.3; P4 preliminary datasheet v0.7
CPU benchmark exampleEspressif CoreMark component README, pinned to f93327d
DSP benchmarksESP-DSP benchmark table, pinned to 28bf4c8
NN benchmarksESP-NN README, pinned to 581c8f0
Arduino supportArduino-ESP32 supported-chip table, pinned to 2b15254
Arduino board distinctionsArduino-ESP32 board guide
Hardware power guidanceESP32 schematic checklist
ADC restrictionsESP32 ADC oneshot documentation
Thread architectureEspressif Thread Border Router SDK
C61 developmentESP-IDF C61 getting-started guide

Scope note: Espressif’s current portfolio also includes newer/additional names such as S31, H4, H21, and E22. They are not folded into the main tables as if they were established, interchangeable maker-board choices. Check their individual documentation, intended role, SDK support, and actual board availability. In particular, the original ESP32’s Classic Bluetooth distinction here is within the covered mainstream families, not a claim that no other Espressif product can support Classic Bluetooth.

Maintenance rule: when updating this guide, recheck datasheet revisions, silicon errata, board SKUs, framework packaging, and benchmark provenance. Keep published measurements separate from estimates and locally measured results.