Learn/esp32esp32-s3esp32-c6esp32-p4xiaopsramhardware

Choosing an ESP32 Board: C6, S3, P4, XIAO Sense and ESP32-CAM

Which ESP32 board fits the job? Flash size, PSRAM and chip family decide what a home device can run, from a camera page to an iroh mesh node. Here is how to pick.

Signed by M·
Shelf of brick-built ESP boards in different colors with a glowing orb hovering over the one picked for the job
Which ESP32 board should I choose for a home device?

For a camera, microphone or mesh camera, choose the Seeed XIAO ESP32-S3 Sense: 8 MB flash, 8 MB octal PSRAM, camera and microphone, and the most verified runs. Choose an ESP32-C6 with 8 MB flash for a small LAN mesh node, and the ESP32-CAM for the cheapest camera page.

Choosing an ESP32 board comes down to three facts: how much flash it has, whether it has PSRAM, and which chip family sits on it. For a home camera or microphone, pick the Seeed XIAO ESP32-S3 Sense (8 MB flash, 8 MB octal PSRAM, camera and microphone on board). For a small mesh node without a camera, an ESP32-C6 with 8 MB flash. For the cheapest camera page, the AI-Thinker ESP32-CAM. Every fact below comes from espino's board records, which cite a vendor source for each pin and memory size.

The three numbers that decide an ESP32 board

Flash: 8 MB is the floor for a mesh node

On any ESP32 board, flash holds the firmware, the filesystem and the settings. A camera page is small: the generated ESP32-CAM camera firmware is about 1.1 MB. A peer-to-peer node is not. The Janus mesh firmware carries QUIC and pure-Rust TLS, and its C6 app image is 4,575,232 bytes in a 6 MiB partition. The iroh team's own ESP32 examples land at 3.6 to 3.9 MB on 4 MB parts, which leaves no room for anything else.

So the rule in the rusty_esp_iroh plan is blunt: 8 MB of flash is the practical floor for an iroh node, and a 4 MB board never gets an iroh build. It reaches the mesh through a bridge instead. espino enforces the flash side for you: an app that does not fit its partition is a build error, with the overage named, not a bricked board.

PSRAM decides the tier, not just the camera

The second number on an ESP32 board is PSRAM. It is extra memory beside the chip's roughly half a megabyte of internal RAM. A camera needs it for frame buffers. The mesh uses it too, and the iroh plan names two tiers:

  • PSRAM tier (XIAO ESP32-S3 Sense, S3 DevKitC-1 N8R8, WROVER, P4): relay and discovery on, so a short ticket can reach the device from another network. That relay path is written, and measuring it on a board is still open.
  • No-PSRAM tier (ESP32-C6, S3 without PSRAM, a bare ESP32): LAN-direct, relay off, QUIC buffers tuned down. A long ticket carries the address.

Internal RAM still matters on both. One media subscription costs 19,088 bytes of internal memory, which is why it fails on a configuration leaving under 22,000 free.

The boards espino knows today

XIAO ESP32-S3 Sense and ESP32-S3 DevKitC-1

The Seeed XIAO ESP32-S3 Sense is the family's first-party board: an ESP32-S3R8 with 8 MB flash, 8 MB octal PSRAM, native USB, a camera connector and a PDM microphone. It is where the camera page, the camera plus microphone device, the mesh camera and a first no-radio project have all run their kill tests. Seeed ships it with an OV2640 or an OV3660 depending on the batch; the pins and the JPEG path are the same, and the driver probes which one is there. The optional Wio-SX1262 LoRa kit uses the microphone's pins, and its DIO1 collides with the camera's SCL on GPIO39, so a LoRa camera on one XIAO does not exist.

The ESP32-S3-DevKitC-1 in its N8R8 variant has the same memory without the camera. Note its RGB LED is on GPIO38 on v1.1 boards and GPIO48 on v1.0. Both S3 boards report the same USB identity, so espino asks the chip rather than guessing.

ESP32-C6, ESP32-C3, classic ESP32 and the ESP32-CAM

The ESP32-C6-DevKitC-1 is RISC-V with 8 MB flash and no PSRAM. It builds on stable Rust with no extra toolchain for bare-metal firmware, and its LAN-tier mesh firmware compiles. Its record also carries the HLK-LD2410 radar kit wiring (GPIO6 and GPIO7, with 5 V on the module's own supply pin). The C6 radar node builds and passes host tests; nothing has run on a board yet.

The ESP32-C3-DevKitM-1 has 4 MB flash and no PSRAM: fine for small bare-metal jobs, never a mesh node. The classic ESP32-DevKitC (WROOM-32E) is the same size, has no user LED despite the "blink on GPIO2" habit, and may need the BOOT button held for a first flash.

The AI-Thinker ESP32-CAM is the cheap camera: plain ESP32, 4 MB flash, 4 MB quad PSRAM, OV2640, microSD, and no USB. It was the first board a Janus firmware booted on, and both its camera page and its Bluetooth-provisioned variant are verified. Flash it with IO0 jumpered to GND and a press of RST, and power it from 5 V, not a programmer's 3V3 pin.

Matching the job to the chip

Which capability needs which chip and track

Janus firmwares run on one of two tracks. Track A is std Rust on Espressif's ESP-IDF: iroh, TLS, the camera driver and the planned P4 hardware codecs live here. Track B is no_std on esp-hal: smaller and purer, used for radios such as ESP-NOW, LoRa and BLE provisioning on the C6. A peer-to-peer node only runs on Track A; a bare-metal node reaches the mesh through the bridge. The esp-rs book explains both toolchains.

In short, choosing an ESP32 board starts from the job: a camera or microphone wants an S3 with PSRAM (or the ESP32-CAM for a page only). A mesh node wants 8 MB of flash. A radio sensor on a budget wants a C6. The See, Hear and Sense visions describe each capability.

Planned boards: ESP32-P4 and ESP32-C61

The ESP32-P4 is on the list for hardware H.264, a MIPI-CSI camera and relay-tier iroh with its large PSRAM. It has no Wi-Fi of its own and talks to the network through a companion such as a C6. There is no espino record for it yet, and no Janus firmware has run on one. The ESP32-C61 is planned as the test of iroh at the smallest memory that can hold it.

If you are still unsure, let the tool choose: espino make find --want camera-ov2640,mic-pdm returns every board and kit that carries those packages, with a purchase link, or the split into two devices when no single board can. See espino for the rest of the loop, then deploy your board in an afternoon. Espressif's own product pages have the full datasheets when choosing an ESP32 board needs a deeper look.

FAQ

Quick answers for builders evaluating this technology.

How much flash does an ESP32 need to run iroh?

8 MB is the practical floor. The ESP32-C6 mesh firmware's app image is 4,575,232 bytes in a 6 MiB partition. Boards with 4 MB of flash, like the ESP32-CAM, never get an iroh build and reach the mesh through a bridge.

Do I need PSRAM?

For a camera, yes. For iroh, PSRAM decides the tier: with it, a node can use a relay and short tickets; without it, the node is LAN-direct with relay disabled. A C6 with no PSRAM still runs a LAN mesh node.

Is the ESP32-P4 supported?

Not yet. The P4 is planned for hardware H.264, a MIPI-CSI camera and relay-tier iroh, and it needs a companion chip such as a C6 for its radio. It has no espino board record today.

Can one XIAO ESP32-S3 Sense do camera and LoRa at once?

No. The Wio-SX1262 LoRa kit uses GPIO41 and GPIO42, the Sense's microphone pins, and its DIO1 shares GPIO39 with the camera's SCL. espino refuses that combination by name.

Where does this board information come from?

From espino's board records: one JSON file per board, every pin and memory fact cited to a vendor guide, datasheet or schematic, with unknown fields refused so nothing is guessed.