/ ESP32-C3 Super Mini Guide
← All Guides
🌐 Translate:
⏱ 30 min 🔷 RISC-V Architecture 📶 Wi-Fi + BLE 5.0 ⚠ 3.3V logic · BLE only ⚠ Enable USB CDC in IDE

ESP32-C3 Super Mini
Setup Guide

The ESP32-C3 Super Mini is a compact Wi-Fi + BLE 5.0 board built on a RISC-V processor — completely different architecture from the standard ESP32. It is smaller, uses USB Type-C, and trades Classic Bluetooth and dual cores for a tiny footprint and lower power draw.

📺

Video walkthrough

Prefer to watch? These cover the same steps.

ESP32-C3 Super Mini — Getting Started
YouTube
▶ YouTube
ESP32-C3 Super Mini — Arduino IDE Setup
YouTube
▶ YouTube

Community videos. Tishvi is not affiliated with creators.

1

About the ESP32-C3 Super Mini

Key specs and what makes this chip different.

The ESP32-C3 uses a RISC-V 32-bit architecture — not the Xtensa LX6 used in the standard ESP32. It is a single-core chip running at up to 160 MHz, optimised for low-power IoT applications. Despite the architectural difference, it is fully supported by the same Espressif Arduino board package and MicroPython — no special toolchain needed.

🧠
SoC
ESP32-C3 (ESP32-C3FN4 / C3FH4)
⚙️
Architecture
RISC-V 32-bit (single core)
🕐
Clock Speed
Up to 160 MHz
📶
Wi-Fi
802.11 b/g/n 2.4 GHz
🔵
Bluetooth
BLE 5.0 ONLY
No Classic Bluetooth
💾
Flash / SRAM
4 MB Flash · 400 KB SRAM
📍
GPIO Pins
13 exposed on header
📊
ADC
6 channels (12-bit)
No DAC output
🔌
USB
USB Type-C
(native USB or bridge chip)
Logic Voltage
3.3V (NOT 5V tolerant)
📏
Board Size
~22.52 × 18 mm (Super Mini)
💡
Built-in LED
GPIO 8 (active-LOW on most boards)
⚠️
No Classic Bluetooth — BLE 5.0 only. The ESP32-C3 cannot communicate with devices that require Classic Bluetooth (like most wireless speakers or older Bluetooth devices). It only supports Bluetooth Low Energy (BLE). If your project needs Classic BT, use the standard ESP32 (38-pin or 30-pin) instead.
⚠️
No DAC output. Unlike the standard ESP32 (which has 2 DAC channels on GPIO25/26), the ESP32-C3 has no digital-to-analog converter. You cannot produce true analog voltage output. Use PWM as an alternative for motor speed control or LED dimming.
2

ESP32-C3 vs ESP32 (38-pin / 30-pin)

Which board should you choose?

Both boards are supported by the same Arduino package and use the same Wi-Fi stack. The decision depends on your project requirements.

FeatureESP32-C3 Super Mini (this board)ESP32 38-pin / 30-pin
CPU ArchitectureRISC-V 32-bit (single core)Xtensa LX6 (dual core)
Max Clock160 MHz240 MHz
BluetoothBLE 5.0 onlyClassic BT + BLE
DAC outputNone2 channels (GPIO25/26)
ADC channels6 (all input-only safe)Up to 18 channels
GPIO on header13 pins26–30 usable pins
Board size~22 × 18 mm (tiny)~55 × 28 mm
USB connectorType-C (reversible)Micro-USB or Type-C
SRAM400 KB520 KB
Flash4 MB4 MB
Wi-Fi2.4 GHz b/g/n2.4 GHz b/g/n
Arduino IDE✅ Same board package✅ Same board package
MicroPython✅ ESP32_GENERIC_C3 firmware✅ ESP32_GENERIC firmware
Choose this if…Space-constrained builds, BLE-only projects, low-power IoT, smaller PCBMaximum GPIO, Classic BT, dual-core tasks, DAC output needed
3

Pin Layout — Super Mini

18 pins total (9 per side). Colour-coded by function.

ESP32-C3 Super Mini ESP32-C3 RISC-V RST BOOT USB-C 5V GND 3V3 GPIO4 (ADC) GPIO5 (ADC) GPIO6 (SDA) GPIO7 (SCL) GPIO8 ★ LED GPIO9 ② BOOT GND GPIO0 (ADC) GPIO1 (ADC) GPIO2 (ADC) GPIO3 (ADC) GPIO10 GPIO20 (RX0) GPIO21 (TX0) RST ★ Active-LOW LED on most boards ② BOOT strapping pin
Power (5V / 3V3)
GND
GPIO (digital / PWM)
GPIO + ADC input
I2C default (SDA/SCL)
UART0
Built-in LED (★)
Strapping / control
⚠️
GPIO 8 LED is active-LOW on most Super Mini boards. This means digitalWrite(8, LOW) turns the LED ON and HIGH turns it OFF — the opposite of the standard ESP32. The sample sketch handles this automatically.
💡
I2C default pins: GPIO6 (SDA) and GPIO7 (SCL) are the default I2C pins on the C3. These are different from the Arduino UNO R3 (A4/A5) and the standard ESP32 (GPIO21/22). Update your I2C begin call: Wire.begin(6, 7);
ℹ️
GPIO9 is the BOOT button. It has an internal pull-up and reads HIGH normally. It can be used as a GPIO input, but pulling it LOW at boot will enter download mode. Avoid using it as an output.
4

Arduino IDE Setup

Configure Arduino IDE for the ESP32-C3. One critical extra step vs the standard ESP32.

⚠️
Critical difference from the standard ESP32: You must also set Tools → USB CDC On Boot → Enabled. Without this, Serial.println() will produce no output in the Serial Monitor when connected via USB-C.
1

Install/update Arduino IDE 2.x

Download from arduino.cc/en/software if not already installed.

2

Add ESP32 board manager URL

If you already have the ESP32 board package (from the standard ESP32 guide), skip to step 4. Otherwise go to File → Preferences and add:

Board Manager URL
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
3

Install ESP32 board package

Tools → Boards Manager → search esp32 → install "esp32 by Espressif Systems". The C3 is included in this same package — no separate download needed.

4

Select the correct board

Tools → Board → esp32 → "ESP32C3 Dev Module". Do not select "ESP32 Dev Module" — that is for the standard ESP32 and will not configure the C3 correctly.

!

Enable USB CDC On Boot — critical step

Go to Tools → USB CDC On Boot → Enabled. This routes Serial through the USB-C port. Without this, the Serial Monitor will show nothing after upload.

5

USB driver (if needed)

Connect the board via USB-C. Open Device Manager. Depending on your board variant, you may see either "CP210x USB to UART Bridge" (needs Silicon Labs driver) or "USB-SERIAL CH340" (needs CH340 driver). Search your browser for the relevant driver name + "download" if the device shows a warning icon.

6

Select port and upload speed

Tools → Port → COM x. Upload Speed: 921600.

To confirm the setup: upload the sample sketch from Step 6, open Serial Monitor at 115200 baud. You should see chip info and WiFi scan results printed.
1

Arduino IDE 2.x + board package

If you already have the ESP32 package installed (from the standard ESP32 guide), skip to step 2. Otherwise follow steps 1–3 from the Windows tab above, then return here.

2

Select board

Tools → Board → esp32 → "ESP32C3 Dev Module".

!

Enable USB CDC On Boot

Tools → USB CDC On Boot → Enabled. Critical for Serial output to appear in the monitor.

3

Find the port

After connecting USB-C, open Terminal and run:

Terminal
ls /dev/cu.*

Look for /dev/cu.usbserial-xxxx, /dev/cu.SLAB_USBtoUART, or /dev/cu.wchusbserial-xxxx (CH340 variant). Select it in Tools → Port.

4

Upload speed

Tools → Upload Speed → 921600.

1

Board package + dialout group

If not already done from the standard ESP32 guide:

bash
sudo usermod -a -G dialout $USER

Log out and back in. Then add the board manager URL and install "esp32 by Espressif Systems" (same as the standard ESP32 setup).

2

Select board and enable USB CDC

Tools → Board → ESP32C3 Dev Module. Then Tools → USB CDC On Boot → Enabled.

3

Find the port

bash
ls /dev/ttyUSB* /dev/ttyACM*

CP210x bridge: appears as /dev/ttyUSB0. CH340 bridge: may appear as /dev/ttyUSB0. Native USB: may appear as /dev/ttyACM0.

5

MicroPython Setup

Flash MicroPython on the ESP32-C3 — uses a different firmware file than the standard ESP32.

The MicroPython firmware for the ESP32-C3 is a different file from the standard ESP32 firmware. The esptool commands are almost identical but the chip type and firmware filename differ.

1

Install Python 3 and esptool

cmd
pip install esptool
2

Download ESP32-C3 firmware

Go to micropython.org/download/ESP32_GENERIC_C3/. Download the latest stable .bin file. Save it locally. Do not use the regular ESP32_GENERIC firmware — it will not run on the C3.

3

Erase flash

cmd
python -m esptool --chip esp32c3 --port COM3 erase_flash

Replace COM3 with your actual port. Note: chip type is esp32c3, not esp32.

4

Flash firmware

cmd
python -m esptool --chip esp32c3 --port COM3 \
  --baud 460800 write_flash -z 0x0 ESP32_GENERIC_C3-firmware.bin

Note: flash address is 0x0 for the C3 (not 0x1000 as used for the standard ESP32).

5

Connect with Thonny

Open Thonny (thonny.org) → Tools → Options → Interpreter → MicroPython (ESP32) → select COM port. Press Enter in the shell — you should see the MicroPython REPL prompt >>>.

⚠️
Two key differences from standard ESP32 MicroPython flashing: (1) chip type is esp32c3 not esp32, and (2) flash address is 0x0 not 0x1000. Using the wrong values will produce a non-booting board that needs re-flashing.
1

Install esptool

Terminal / bash
pip3 install esptool
2

Download ESP32_GENERIC_C3 firmware

From micropython.org/download/ESP32_GENERIC_C3/. Latest stable .bin file.

3

Find port, erase, flash

bash
# Find port (macOS)
ls /dev/cu.*
# Find port (Linux)
ls /dev/ttyUSB* /dev/ttyACM*

# Erase (replace /dev/cu.usbserial-xxxx with your port)
esptool.py --chip esp32c3 --port /dev/cu.usbserial-xxxx erase_flash

# Flash — note: address is 0x0 for C3
esptool.py --chip esp32c3 --port /dev/cu.usbserial-xxxx \
  --baud 460800 write_flash -z 0x0 ESP32_GENERIC_C3-firmware.bin
4

Thonny IDE

Download from thonny.org or pip3 install thonny. Set interpreter to MicroPython (ESP32) and your port.

6

First Sketch

Chip info + WiFi scan + LED blink — confirms IDE, WiFi, and GPIO all work.

⚠️
Open Serial Monitor at 115200 baud. Also confirm Tools → USB CDC On Boot = Enabled is set — otherwise Serial output will be silent.
esp32c3_first_sketch.ino
#include <WiFi.h>

const int LED_PIN = 8;              // GPIO 8 = built-in LED
const bool LED_ACTIVE_HIGH = false; // Most boards: active-LOW

void ledOn()  { digitalWrite(LED_PIN, LED_ACTIVE_HIGH ? HIGH : LOW); }
void ledOff() { digitalWrite(LED_PIN, LED_ACTIVE_HIGH ? LOW  : HIGH); }

void setup() {
  Serial.begin(115200);
  delay(1000);   // Allow USB CDC to enumerate
  pinMode(LED_PIN, OUTPUT);
  ledOff();

  Serial.println("\n=== Tishvi ESP32-C3 Super Mini ===");
  Serial.printf("Chip : %s (RISC-V, %d core)\n",
    ESP.getChipModel(), ESP.getChipCores());
  Serial.printf("CPU  : %d MHz\n", ESP.getCpuFreqMHz());
  Serial.printf("Flash: %d MB\n", ESP.getFlashChipSize() / 1048576);
  Serial.printf("MAC  : %s\n\n", WiFi.macAddress().c_str());

  WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100);
  Serial.println("Scanning WiFi (2.4 GHz)...");
  int n = WiFi.scanNetworks();
  Serial.printf("%d network(s) found\n", n);
  for (int i = 0; i < n; i++)
    Serial.printf("  %2d. %-28s %4d dBm\n",
      i+1, WiFi.SSID(i).c_str(), WiFi.RSSI(i));
  Serial.println("\nBlink: GPIO 8 (active-LOW)");
}

void loop() {
  ledOn();  delay(500);
  ledOff(); delay(500);
}

Quick MicroPython test (paste in Thonny REPL):

MicroPython REPL
from machine import Pin
import time, network

led = Pin(8, Pin.OUT, value=1)  # value=1 = OFF (active-LOW)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
print(wlan.scan())

while True:
    led.value(0); time.sleep(0.5)  # LED ON
    led.value(1); time.sleep(0.5)  # LED OFF
7

Do's & Don'ts

Rules and safety notes specific to the ESP32-C3.

✅ Do's

  • Set USB CDC On Boot → Enabled in Arduino IDE before every sketch upload
  • Use 3.3V logic signals on all GPIO pins
  • Add delay(1000) at the start of setup() — lets USB CDC enumerate before Serial output starts
  • Use GPIO8 for the built-in LED, remembering it is active-LOW on most boards
  • Call Wire.begin(6, 7) explicitly for I2C — default is GPIO6/GPIO7
  • Use firmware ESP32_GENERIC_C3 for MicroPython (not the standard ESP32 firmware)
  • Use flash address 0x0 (not 0x1000) when flashing MicroPython
  • Hold BOOT + tap RST if upload gets stuck in "Connecting..."
  • Open Serial Monitor at 115200 baud
  • Keep GPIO9 unconnected or as input only — it's the BOOT strapping pin

🚫 Don'ts

  • Connect 5V signals to GPIO pins — max 3.3V
  • Expect Classic Bluetooth to work — this chip has BLE only
  • Try to use DAC output — the C3 has no DAC; use PWM instead
  • Use the standard ESP32_GENERIC MicroPython firmware — it will not boot on the C3
  • Use flash address 0x1000 for MicroPython — C3 uses 0x0
  • Forget to enable USB CDC On Boot — Serial will be silent
  • Select "ESP32 Dev Module" in Arduino IDE — must use "ESP32C3 Dev Module"
  • Draw more than 40 mA total from all GPIO pins combined
  • Drive GPIO9 LOW at power-on — it forces boot mode
  • Block the PCB antenna area on the module during WiFi testing
8

Troubleshooting

Common problems — most relate to the USB CDC Serial setup.

?

Serial Monitor shows nothing after upload

The most common C3 issue. Go to Tools → USB CDC On Boot → Enabled, re-upload the sketch, then open Serial Monitor at 115200 baud. Also make sure your sketch includes delay(1000) after Serial.begin() to allow the USB CDC connection to settle before the first print.

?

No COM port appears when board is connected

The board may need a USB bridge driver. Depending on the chip used, you need either the Silicon Labs CP210x driver (search "CP210x USB driver") or the CH340 driver (search "CH340 driver download"). Look at Device Manager — the listed chip name tells you which driver to install.

?

Upload stuck at "Connecting........"

Manually enter download mode: hold the BOOT button, tap the RST button once, then release BOOT. The upload should proceed. This is commonly needed on first upload. Subsequent uploads may work automatically once the sketch is running.

?

Built-in LED does not blink / stays on permanently

The LED on most Super Mini boards is active-LOW. If the LED is always ON, your sketch is sending HIGH when it should send LOW for ON. In the sample sketch, change LED_ACTIVE_HIGH to true if the LED behaviour is inverted.

?

WiFi scan returns 0 networks

Ensure WiFi.mode(WIFI_STA) is called before scanning. The C3 only supports 2.4 GHz — if your router is 5 GHz-only, no networks will appear. Also verify the PCB antenna (the serpentine copper trace on the module) is not obstructed.

?

"Board 'esp32c3' not found" compile error

The ESP32 board package may not be installed or is outdated. Go to Tools → Boards Manager, search esp32, and install or update "esp32 by Espressif Systems". ESP32-C3 support requires version 2.0.0 or later of the package.

?

MicroPython: board does not boot after flashing

Check that you used --chip esp32c3 and flash address 0x0 (not 0x1000). Also confirm you downloaded the ESP32_GENERIC_C3 firmware file and not the regular ESP32 file. Re-erase and reflash if the board does not show the REPL prompt in Thonny.

?

I2C device not found / wrong address

The C3's default I2C pins are GPIO6 (SDA) and GPIO7 (SCL) — not A4/A5 (Arduino UNO) or GPIO21/22 (standard ESP32). Explicitly call Wire.begin(6, 7) in your sketch. Run an I2C scanner to confirm your device's address.

?

Board reboots continuously (boot loop)

Open Serial Monitor at 115200 baud — the crash reason is printed just before the reset. Common causes: a GPIO connected to 5V, accessing a peripheral before initialising it, or using too much stack in a recursive function. Also check that nothing is pulling GPIO9 (BOOT) LOW at power-on.

Download Sample Sketch

Ready-to-upload .ino for the ESP32-C3 Super Mini.

The full sketch includes chip info printout, WiFi scan, and LED blink with active-LOW handling. Requires ESP32 board package v2.0.0+ and USB CDC On Boot → Enabled in Arduino IDE settings.

📄
esp32c3_sample.ino
Chip info · WiFi scan · LED blink (active-LOW aware) · BLE-only note
⬇ Download .ino
⚠️
Before opening the sketch, confirm in Arduino IDE: Board = ESP32C3 Dev Module and USB CDC On Boot = Enabled. The sketch will compile on the wrong board but Serial will be silent without CDC enabled.