µEC3 Board Guide: ESP32-C3 Pinout, Power and First Upload

Cover image for the µEC3 ESP32-C3 development board guide from eARgle Innovation Labs.

The µEC3 is a 27 × 24 mm ESP32-C3 development board from µEDesign (Mu-ETronics, made in India) — a single-core 32-bit RISC-V running at 160 MHz with 4 MB flash, Wi-Fi 802.11 b/g/n, Bluetooth 5.0 LE, and a USB-C port wired directly to the chip’s own USB peripheral. No CP2102, no CH340, no USB-UART bridge in the signal path.

This is the complete working reference we use in the lab: the full specification table, an interactive pin explorer that shows every pad exactly where it sits on the board, power rules that will save you a dead LDO, the first upload in Arduino IDE, four sketches that compile as-is, and the seven mistakes that cost people an evening. Everything below has been checked against the board in hand and against Espressif’s own ESP32-C3 datasheet.

  • SoC ESP32-C3-WROOM-02 (N4)
  • Core RISC-V @ 160 MHz
  • Flash 4 MB
  • GPIO 14 usable
  • USB Native USB-C
  • Size 27 × 24 mm
Who this is for

Anyone soldering an ESP32-C3 board into a real project — a wearable, a battery sensor node, a BLE peripheral. If you are coming from an ESP8266 or an Arduino Uno, read the power and gotchas sections before you wire anything: the µEC3 is a 3.3 V board with a strapping pin on GPIO9, and 5 V on a GPIO will end the board.

µEDesign · Mu-ETronics Design · Made in India

A coin-sized ESP32-C3-WROOM-02 development board — 32-bit RISC-V at 160 MHz, 4 MB flash, Wi-Fi and Bluetooth LE, and native USB-C programming with no USB-UART bridge in the way. Built for low-power IoT sensing and wearables.

ESP32-C3-WROOM-02 27 × 24 mm RISC-V single core Wi-Fi 802.11 b/g/n Bluetooth 5.0 LE Native USB-C
Front
µEC3 board, front side: green PCB with RST and BOOT buttons, USB-C connector and gold-plated header pads labelled 0 through 21.
160MHz
RISC-V core
4MB
Flash
400KB
SRAM
14
GPIO exposed
5
12-bit ADC inputs
800mA
3V3 LDO
01 — Specifications

What is on the board

The µEC3 carries an ESP32-C3-WROOM-02 module (N4 variant, 4 MB flash) with a PCB trace antenna, an 800 mA LDO, RESET and BOOT buttons, a power LED, a user LED on GPIO6, and a USB-C port wired straight to the SoC’s own USB peripheral.

ParameterValue
ModuleESP32-C3-WROOM-02 (N4)
Board dimensions27 × 24 mm (2.7 × 2.4 cm)
Processor32-bit single-core RISC-V, max 160 MHz
ROM / SRAM384 KB ROM / 400 KB SRAM on-chip
Flash memory4 MB
Wireless2.4 GHz Wi-Fi (802.11 b/g/n), Bluetooth 5.0 Low Energy
AntennaOn-board PCB trace antenna
I/O pins14 GPIO with flexible function mapping, plus 5V input pin, 3V3 LDO output pin and 2 × GND
InterfacesI²C, I²S, SPI, UART, PWM, TWAI (CAN), 12-bit ADC — 2 units / 5 inputs
On-board LEDsUser/status LED on GPIO6 · separate power indicator LED
RegulatorLDO, 800 mA capability, output exposed on the 3V3 pin
ProgrammingUSB-C, native USB Serial/JTAG — no USB-UART bridge chip
SwitchesOn-board BOOT and RESET buttons
ToolchainsESP-IDF, Arduino IDE, MicroPython / CircuitPython
Why the missing GPIO numbers?
GPIO11–GPIO17 are tied up inside the module driving the SPI flash die, so they never reach the header. GPIO6 is on the board but wired to the user LED rather than to a pad. That leaves 14 usable GPIO on the two 9-pad rows.
02 — Pinout

Interactive pin explorer

Pads are laid out exactly as they sit on the board — nine on each side, silkscreen labels included. Pick a pad for its GPIO number, alternate functions, and the catches worth knowing before you solder something to it.

27 × 24 mm · top view
Official µEC3 pinout diagram: left column GPIO0-3, GPIO19 (USB D+), GPIO18 (USB D-), GPIO10, GPIO20 (RX), GPIO21 (TX); right column 3V3, GND, GPIO4, GPIO5, GPIO7, 5V, GND, GPIO9, GPIO8.
The vendor pinout drawing from the µEDesign repository, for cross-checking.
Not on the header

GPIO6 — user LED

Drives the on-board SMD LED. Use it for status blinks; it is also the default FSPICLK / MTCK pin if you remap SPI or JTAG.

Not on the header

GPIO11 – GPIO17

Reserved inside the module for the SPI flash interface. Never drive them.

Any pin, any job

GPIO matrix

I²C, I²S, SPI, UART, PWM and TWAI can be routed to almost any exposed GPIO. The “default” pins below are conventions, not hard wiring.

03 — Power

Powering the board

There are three ways in, and one of them can quietly destroy the module.

USB-C · 5 V

The normal path. VBUS feeds the LDO and reaches the 5V pad through a Schottky diode, so back-EMF from your circuit cannot push into the host port.

5V pad · 5 V in

Feed a regulated 5 V supply here when running off a battery pack or a carrier board. The on-board LDO drops it to 3.3 V for the module.

3V3 pad · output

The LDO output, rated 800 mA total. Use it to power sensors and peripherals — the module’s own draw comes out of that same budget.

Do not put 5 V on the 3V3 pad.
3V3 is the regulator’s output, not a second input. Driving it from a 5 V rail back-feeds the LDO and puts 5 V across a 3.3 V module. Every GPIO on this board is 3.3 V logic — level-shift anything that talks at 5 V.
Budgeting

Wi-Fi transmit bursts pull a few hundred milliamps for a few milliseconds. If the board browns out or resets when the radio comes up, add a bulk capacitor (100 µF or more) across 3V3 and GND close to the module, and check that your 5 V source can supply the peak.

Low power

GPIO0–GPIO5 sit in the RTC domain, so they can wake the chip from deep sleep. That is the pin group to design your wake-on-event sensor around — the rest of the GPIO are powered down while sleeping.

04 — Quick start

First upload, Arduino IDE

Because programming goes through the SoC’s native USB Serial/JTAG peripheral, there is no CP2102 or CH340 driver to install. Plug it in and the port appears.

  1. Install the Arduino IDE.

    Any recent 2.x release.

  2. Add the ESP32 board package URL.

    File → Preferences → Additional boards manager URLs:

    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json

  3. Install the esp32 core.

    Tools → Board → Boards Manager, search esp32, install the latest version.

  4. Select the board.

    Tools → Board → esp32 → ESP32C3 Dev Module.

  5. Turn on USB CDC On Boot.

    Tools → USB CDC On Boot: Enabled. Without this the Serial Monitor stays silent — the vendor calls this out explicitly.

  6. Pick the port and upload.

    Select the port that appears when the board is plugged in, then hit Upload.

USB CDC On Boot must be Enabled.
On this board Serial is the USB CDC device, not a UART. If that setting is left disabled, your sketch still runs but nothing reaches the Serial Monitor. This is the single most common “my board is dead” report — it usually isn’t.

Recommended board settings

SettingValueWhy
BoardESP32C3 Dev ModuleMatches the WROOM-02 module
USB CDC On BootEnabledRoutes Serial to native USB
Flash Size4MB (32Mb)N4 module
CPU Frequency160 MHzDrop to 80 MHz or 40 MHz to save power
Partition SchemeDefault 4MB with spiffsSwitch to “Huge APP” if the sketch overflows
Upload Speed921600Drop to 115200 if uploads fail

Manual download mode

The IDE normally resets the board into the bootloader on its own. When it cannot — a sketch that crashes immediately, or a deep-sleep loop that never enumerates USB — do it by hand with the two buttons:

  1. Hold BOOT.

    This pulls GPIO9 low.

  2. Tap RESET while still holding BOOT.

    The chip samples GPIO9 at reset and enters the ROM serial bootloader.

  3. Release BOOT, then upload.

    Press RESET once more afterwards to run your new sketch.

05 — Examples

Working sketches

These are the four examples shipped in the µEDesign repository, verbatim, with their original comments. Each compiles against the esp32 Arduino core with the settings above.

Blink.ino

The Wi-Fi manager sketch is long because it embeds two full HTML pages. Connect to the access point ESP32C3-WiFiManager (password 12345678) and open 192.168.4.1 to scan and join a network from the browser.

06 — Peripherals

Interfaces and where they land

The ESP32-C3’s GPIO matrix routes most peripherals to any pin you name in software. The pins listed here are the defaults the silicon and the Arduino core assume when you do not say otherwise.

ADC — 12-bit

Two converter units, five inputs on the header. analogRead() returns 0–4095. ADC2 shares hardware with the Wi-Fi radio, so its reading is unavailable while Wi-Fi is running.

ADC1: GPIO0 · 1 · 2 · 3 · 4  (A0–A4)
ADC2: GPIO5

UART

UART0 is the classic serial console. On this board Serial is USB CDC instead — use Serial0 or Serial1 for a hardware port.

U0TXD: GPIO21 · U0RXD: GPIO20
UART1: any free GPIO

I²C

One I²C controller, fully remappable. Call Wire.begin(sda, scl) with the pins you actually wired. Add 4.7 kΩ pull-ups to 3V3 if your breakout has none.

No fixed pins — pick any two GPIO

SPI (FSPI / SPI2)

The user-accessible SPI controller. Defaults below; override them in SPI.begin(sck, miso, mosi, ss).

CLK: GPIO6 · MISO: GPIO2
MOSI: GPIO7 · CS0: GPIO10

PWM (LEDC)

Six independent channels, any GPIO, up to 14-bit resolution. Use ledcAttach(pin, freq, bits) on core 3.x.

6 channels · any exposed GPIO

I²S & TWAI (CAN)

One I²S bus for audio codecs and MEMS microphones, and one TWAI controller for CAN — TWAI still needs an external transceiver.

Both fully remappable

USB Serial/JTAG

GPIO18 and GPIO19 are hard-wired to the USB-C port. They carry flashing, the Serial Monitor and hardware debugging all at once.

D−: GPIO18 · D+: GPIO19

RTC / deep sleep

Only the low-numbered pins stay alive in deep sleep and can wake the chip on an external edge or level.

GPIO0 – GPIO5
07 — Field notes

Things that trip people up

Serial Monitor prints nothing
Set Tools → USB CDC On Boot → Enabled and re-upload. Also add a short wait at the top of setup() — USB CDC takes a moment to enumerate, so the first few Serial.println() calls can vanish:

while (!Serial && millis() < 3000) delay(10);
The port disappears after upload
Your sketch owns the USB peripheral. A crash loop, a tight while(1), or deep sleep stops the CDC device from enumerating and the port vanishes. Hold BOOT, tap RESET, release BOOT to force the ROM bootloader, then upload a known-good sketch.
The board will not boot after I wired up my circuit
Check GPIO2, GPIO8 and GPIO9 — the three strapping pins. Their level is latched at reset. A strong external pull-down on any of them changes boot mode. GPIO9 already has a 10 kΩ pull-up and the BOOT button on-board; keep GPIO2 and GPIO8 free of pull-downs, or use them only as outputs that are safe to float at reset.
analogRead() on GPIO5 returns garbage when Wi-Fi is on
GPIO5 is on ADC2, which the Wi-Fi radio also uses. Move the measurement to an ADC1 pin — GPIO0 through GPIO4 — for anything sampled while the radio is active.
Can I use GPIO18 and GPIO19 as normal I/O?
Electrically yes, practically no. They are the USB data lines. Reconfigure them and you lose flashing and the Serial Monitor, and the only way back is manual download mode. Treat them as reserved unless you have a very good reason.
Where is the built-in LED?
GPIO6, active high, not brought out to a pad. The second LED near the USB-C connector is the power indicator and is not software-controllable.

#define LED_PIN 6
Sketch too large
4 MB of flash sounds like plenty until BLE and Wi-Fi are both linked in. Switch Tools → Partition Scheme to Huge APP (3MB No OTA/1MB SPIFFS) — you give up over-the-air updates for roughly triple the app space.
Antenna placement
The PCB trace antenna is the black-and-silver end of the module that overhangs the board edge. Keep metal, batteries and ground pour away from it, and do not mount the board flat against a metal enclosure wall — range collapses.
08 — Applications

What it is built for

µEDesign targets the µEC3 at low-power sensing where physical size matters more than raw compute.

  • Smart homes
  • Industrial automation
  • Health care devices
  • Consumer electronics
  • Smart agriculture
  • Low-power IoT sensor hubs
  • Low-power data loggers
  • Wearables
09 — References

Primary sources

Everything on this page traces back to these. When something here disagrees with a datasheet, the datasheet wins.

µEDesign documentation repository
Board README, pinout image, overview and brief PDFs, and the four example sketches
github.com/muedesign ↗
ESP32-C3-WROOM-02 module datasheet
Module pinout, RF characteristics, absolute maximum ratings
documentation.espressif.com ↗
ESP32-C3 SoC datasheet
Peripheral list, GPIO matrix, strapping pins, ADC channel mapping
espressif.com ↗
Boot mode selection — esptool
GPIO9 / GPIO8 strapping behaviour and download-mode entry
docs.espressif.com ↗
ESP-IDF GPIO & RTC GPIO reference
Which pins survive deep sleep, and ADC1 vs ADC2 constraints
docs.espressif.com ↗
Native USB driver notes
USB Serial/JTAG behaviour on hosts that need a driver hint
docs.espressif.com ↗
µEC3 · ESP32-C3-WROOM-02 · µEDesign (Mu-ETronics Design) Compiled from the vendor repository and Espressif documentation

Frequently asked questions

Is the µEC3 the same as an ESP32 board?

No — and the difference matters. The classic ESP32 is a dual-core Xtensa LX6 at 240 MHz with Bluetooth Classic. The µEC3 carries an ESP32-C3: a single-core 32-bit RISC-V at 160 MHz, Bluetooth 5.0 LE only (no Bluetooth Classic, so no A2DP audio or classic serial profiles), and no built-in DAC or touch peripheral. In exchange you get lower power draw, native USB, and a much smaller board. For sensor nodes, wearables and BLE peripherals the C3 is usually the better choice; for audio, camera work or anything needing PSRAM and vector maths, use an ESP32-S3 instead.

Why can't I find GPIO11 to GPIO17 on the header?

They are physically inside the module, wired to the SPI flash die, and never reach a pad. GPIO6 exists on the board but drives the user LED. That leaves 14 GPIO on the two 9-pad rows. Trying to reassign the flash pins in software will hang the chip on the next boot.

Do I need to press BOOT to upload?

Normally no. Because the USB-C port is wired to the ESP32-C3's native USB Serial/JTAG peripheral, the chip resets itself into download mode when the toolchain asks it to. You only need the manual BOOT + RESET sequence when a sketch has crashed the USB stack, when deep sleep runs immediately on boot, or when you have reassigned GPIO18/GPIO19. The manual download mode steps are in the first upload section.

Can I power the µEC3 from a LiPo battery?

There is no charger or protection circuit on the board, so you cannot wire a single cell straight to a charge-and-run setup. A 3.7 V LiPo can feed the 3V3 pin only through a proper regulator or when the cell is within the module's 3.0–3.6 V window — feeding a fully charged 4.2 V cell into 3V3 exceeds the module's absolute maximum. The clean approach is a TP4056 charge board plus a 3.3 V buck/LDO into the 3V3 pin, with the on-board LDO left unused.

Which toolchains work with this board?

ESP-IDF (Espressif's native framework), the Arduino ESP32 core, and MicroPython or CircuitPython builds for the ESP32-C3. In Arduino IDE, select a generic ESP32C3 Dev Module and enable USB CDC On Boot so Serial maps to the native USB port — that one setting is the most common reason a beginner sees an empty Serial Monitor.

How much current can the 3V3 pin supply to my sensors?

The on-board LDO is rated at 800 mA, but that is the regulator's capability, not a budget you can spend freely. The module itself pulls up to ~350 mA in Wi-Fi transmit peaks, and the LDO's thermal limit on a 27 × 24 mm board with no heatsink arrives well before 800 mA. Budget roughly 200–300 mA for peripherals, and give anything with a motor, heater or radio its own supply with a common ground.

Build this on real hardware

eARgle Innovation Labs kits ship with the sensors, boards and wiring used in these guides — plus the course that walks you through them, project by project.

Browse the kits See the courses
AR
Arun Roshan

Founder of eARgle Innovation Labs and eARgle Technologies, and a PhD scholar at VIT Vellore working on IoT–AI assistive technology. He designs and tests embedded hardware — ESP32, ESP8266 and RISC-V boards — for assistive devices and teaching kits, and writes these guides from the bench.

1 Comment.

Comments are closed.