Documentation

ShillehTek ESP32-C3 4MB Dev Board Presoldered WiFi | ShillehTek Product Manual
Documentation / ShillehTek ESP32-C3 4MB Dev Board Presoldered WiFi | ShillehTek Product Manual

ShillehTek ESP32-C3 4MB Dev Board Presoldered WiFi | ShillehTek Product Manual

manualshillehtek

Overview

The ESP32-C3 is a single-core 32-bit RISC-V microcontroller with built-in Wi-Fi (2.4 GHz) and Bluetooth 5.0 LE. This pre-soldered "Super Mini" dev board breaks out the most useful pins on a thumb-sized PCB with USB Type-C, making it one of the smallest and cheapest ways to add wireless connectivity to a project.

Despite its size, the C3 has 4 MB of Flash, hardware support for SPI, I2C, UART, and 6 ADC channels. It is supported in the Arduino IDE through the Espressif ESP32 core and runs MicroPython and CircuitPython without modification. The native USB-C interface handles flashing and serial monitoring directly — no external USB-to-Serial chip is involved.

This board is a great fit for IoT sensor nodes, BLE buttons and beacons, smart-home projects, ESP-NOW mesh experiments, and any application where size and power consumption matter more than raw CPU performance.

At a Glance

MCU
ESP32-C3 RISC-V
Clock Speed
160 MHz
Wireless
Wi-Fi + BLE 5.0
Flash
4 MB
GPIO Pins
13 broken-out
USB Connector
USB Type-C

Specifications

Parameter Value
Microcontroller ESP32-C3 (32-bit single-core RISC-V)
Clock Frequency Up to 160 MHz
Flash Memory 4 MB SPI Flash
SRAM 400 KB on-chip
Wireless Wi-Fi 802.11 b/g/n (2.4 GHz), Bluetooth 5.0 LE + Mesh
Operating Voltage 3.3V
Input Voltage 5V via USB-C, or 5V via 5V pin
GPIO Logic Level 3.3V (NOT 5V tolerant)
Digital I/O Pins 13 broken-out GPIO
Analog Input (ADC) Channels 6 (A0-A5, 12-bit)
Communication Interfaces I2C, SPI, UART, USB Serial/JTAG
USB Connector USB Type-C (native USB Serial/JTAG)
Form Factor Super Mini (~22 x 18 mm)
Headers Pre-soldered male pins

Pinout Diagram

ESP32-C3 Super Mini dev board pinout diagram showing GPIO0/A0, GPIO1/A1, GPIO2/A2, GPIO3/A3, GPIO4/A4/SCK, GPIO5/A5/MISO, GPIO6/MOSI, GPIO7/SS, GPIO8/SDA, GPIO9/SCL, GPIO10, GPIO20/RX, GPIO21/TX, 5V, 3V3, and GND pins

Wiring Guide

LED + Push Button Wiring

A great first project for any new dev board: blink an LED and read a button. Use a 220-330 ohm current-limiting resistor in series with the LED.

Component ESP32-C3 Pin Details
LED Anode (long leg) GPIO2 Through 220 ohm resistor
LED Cathode (short leg) GND
Button Terminal 1 GPIO3 Use INPUT_PULLUP in firmware
Button Terminal 2 GND
Info: The board also has an on-board user LED (typically tied to GPIO8). You can blink that without any external wiring — useful for quick sanity checks.

I2C Sensor Wiring

The default I2C pins on this board are GPIO8 (SDA) and GPIO9 (SCL). Most 3.3V I2C breakouts (BME280, MPU6050, SSD1306, ADS1115, BH1750, etc.) connect directly with no level shifting.

Sensor Pin ESP32-C3 Pin Details
VCC 3V3 Use 3V3, not 5V
GND GND
SDA GPIO8
SCL GPIO9
Warning: ESP32-C3 GPIO is 3.3V only. Connecting a 5V I2C device without a level shifter can damage the C3 and pull the bus into an unsafe state. Use a TXS0108E or PCA9306-based shifter when crossing voltage domains.
Tip: If a sensor never responds to a scan, check that the breakout has 4.7k pull-ups installed. Some bare modules omit them and require external pull-ups from SDA/SCL to 3V3.

SPI Device Wiring

The hardware SPI bus uses GPIO4 (SCK), GPIO5 (MISO), GPIO6 (MOSI), and GPIO7 (SS). Any free GPIO can serve as a chip select if you need more than one device on the bus.

SPI Device Pin ESP32-C3 Pin Details
VCC 3V3
GND GND
SCK GPIO4 Clock
MISO GPIO5 Master In, Slave Out
MOSI GPIO6 Master Out, Slave In
CS / SS GPIO7 Chip Select
Tip: SPI displays such as the ILI9341 are sensitive to wire length. Keep SPI lines short and use a level shifter if the display logic is 5V.

UART / Serial Wiring

The hardware UART is exposed on GPIO20 (RX) and GPIO21 (TX). This UART is independent from the USB-C serial console, so you can talk to a peripheral and watch debug output at the same time.

External Device ESP32-C3 Pin Details
TX (out from device) GPIO20 (RX) Cross-wire: their TX to your RX
RX (in to device) GPIO21 (TX) Cross-wire: your TX to their RX
VCC 3V3 or 5V Match the device's voltage
GND GND Common ground required
Warning: Powering a 5V UART device from the 5V pin is fine, but its TX line will swing to 5V and damage the C3 RX pin. Use a logic level shifter or a simple resistive divider on the device's TX line.

Code Examples

Arduino IDE - Connect to Wi-Fi

esp32_c3_wifi_connect.ino
// ESP32-C3 - Connect to Wi-Fi and print IP
// Install: Boards Manager -> "esp32" by Espressif Systems
// Select Board: "ESP32C3 Dev Module"

#include <WiFi.h>

const char* ssid     = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

void setup() {
  Serial.begin(115200);
  delay(1000);

  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println();
  Serial.print("Connected! IP address: ");
  Serial.println(WiFi.localIP());
  Serial.print("RSSI: ");
  Serial.print(WiFi.RSSI());
  Serial.println(" dBm");
}

void loop() {
  delay(10000);
  Serial.print("Still connected? ");
  Serial.println(WiFi.status() == WL_CONNECTED ? "yes" : "no");
}

Arduino IDE - Read Analog (Potentiometer)

esp32_c3_analog_read.ino
// ESP32-C3 - Read a 10k potentiometer on A0 (GPIO0)
// Wire: pot ends to 3V3 and GND, wiper to GPIO0

const int potPin = 0;  // A0 = GPIO0

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);  // 0 - 4095
}

void loop() {
  int raw = analogRead(potPin);
  float voltage = raw * 3.3 / 4095.0;
  Serial.printf("Raw: %4d   Voltage: %.2f V\n", raw, voltage);
  delay(200);
}

MicroPython - I2C Bus Scan

i2c_scan.py
# ESP32-C3 - Scan the I2C bus for devices (MicroPython)
# Flash MicroPython for ESP32-C3 from micropython.org

from machine import I2C, Pin
import time

i2c = I2C(0, sda=Pin(8), scl=Pin(9), freq=100_000)

while True:
    devices = i2c.scan()
    if devices:
        print("Found {} I2C device(s):".format(len(devices)))
        for addr in devices:
            print("  - 0x{:02X}".format(addr))
    else:
        print("No I2C devices found")
    time.sleep(2)

MicroPython - BLE GATT Service

ble_gatt.py
# ESP32-C3 - Minimal BLE peripheral with one read characteristic
# Discoverable as "ESP32C3-Hello"

import bluetooth
import time
from micropython import const

_FLAG_READ = const(0x0002)
_SVC_UUID  = bluetooth.UUID(0x180A)            # Device Information
_CHR_UUID  = bluetooth.UUID(0x2A29)            # Manufacturer Name

ble = bluetooth.BLE()
ble.active(True)

((handle,),) = ble.gatts_register_services(((_SVC_UUID, ((_CHR_UUID, _FLAG_READ),)),))
ble.gatts_write(handle, b"ShillehTek")

# Build advertising payload
name = b"ESP32C3-Hello"
adv = bytearray()
adv += bytes((2, 0x01, 0x06))                  # flags
adv += bytes((len(name) + 1, 0x09)) + name     # complete name

ble.gap_advertise(100_000, adv)
print("Advertising as 'ESP32C3-Hello' - connect with nRF Connect")

while True:
    time.sleep(1)

Frequently Asked Questions

Which board do I select in the Arduino IDE?
Install the "esp32" core by Espressif Systems through the Boards Manager. Then go to Tools > Board > ESP32 Arduino and pick "ESP32C3 Dev Module". Set "USB CDC On Boot" to "Enabled" so you can use the USB-C port for the serial monitor.
Does this board have a built-in USB-to-Serial chip?
No external chip is needed — the ESP32-C3 has native USB Serial/JTAG built into the silicon. The USB-C port goes directly to the C3, so flashing and serial monitoring work without a CP2102 or CH340. This is also why no extra USB drivers are usually required.
Are the GPIO pins 5V tolerant?
No. All ESP32-C3 GPIO pins are 3.3V only. Connecting a 5V signal directly will likely damage the chip. Use a logic level converter for any 5V sensor, display, or peripheral.
How do I put the board into download mode if uploads fail?
Hold the BOOT button, briefly press and release the RESET button (or unplug/replug USB), then release BOOT. The board will appear as a USB device in download mode. Try the upload again. This is rarely needed because the IDE usually handles auto-reset.
Can I use this board for ESP-NOW?
Yes. ESP-NOW is fully supported on the ESP32-C3 with the standard Espressif Arduino core or ESP-IDF. It's a great choice for low-power, peer-to-peer mesh-style projects without needing a router.
How much current can I draw from the 3V3 pin?
The on-board LDO regulator can typically supply around 500 mA total, but practical headroom depends on what the C3 itself is drawing (peaks of 300+ mA during Wi-Fi TX). For peripherals that need more than ~150 mA continuously, use a separate regulator.
What's the difference between the ESP32-C3 and the ESP32 (classic)?
The ESP32-C3 is a single-core 32-bit RISC-V chip running at 160 MHz with Wi-Fi 4 and Bluetooth 5.0 LE. The classic ESP32 is a dual-core Tensilica Xtensa chip at 240 MHz with Wi-Fi 4 and Bluetooth Classic + LE. The C3 is smaller, cheaper, and has BLE 5 — but the classic ESP32 has more cores, more PWM channels, and more peripherals.