Documentation

ESP32 38-Pin GPIO Expansion Breakout Board for ESP32 Development Boards | ShillehTek Product Manual
Documentation / ESP32 38-Pin GPIO Expansion Breakout Board for ESP32 Development Boards | ShillehTek Product Manual

ESP32 38-Pin GPIO Expansion Breakout Board for ESP32 Development Boards | ShillehTek Product Manual

manualshillehtek

Overview

The 38-pin GPIO expansion breakout solves the least glamorous, most persistent problem with ESP32 dev boards: they are too wide for a breadboard and too fiddly for permanent wiring. Seat your 38-pin ESP32 DevKit into the breakout’s female headers and every pin reappears on labeled terminals with room to work — power rails distributed alongside, GPIO numbers printed where you can read them, and connections that survive being bumped.

It changes how projects feel at two stages. During prototyping, it makes testing and rewiring fast: sensors connect and disconnect without prying the dev board loose or fighting for the one row of breadboard holes. And when a project graduates to “this stays plugged in,” the breakout is the difference between a nest of jumpers and an installation — screw it down, land the wires, done.

Because every ESP32 pin is exposed, the board also puts the ESP32’s pin quirks front and center: strapping pins that must float at boot, input-only pins with no pull-ups, and the ADC2 bank that stops converting when Wi-Fi runs. This manual covers seating and powering the breakout, a working map of which pins to use for what, wiring patterns for common sensor types, and test code for Arduino and MicroPython workflows.

At a Glance

Fits
38-pin ESP32 dev boards
Breaks Out
Every GPIO + power, labeled
Interfaces
I2C · SPI · UART · ADC · PWM
Power Rails
3.3 V · 5 V · GND distributed
Workflows
Arduino · ESP-IDF · MicroPython
ESP32 Included?
No — breakout board only

Specifications

Parameter Value
Compatibility 38-pin ESP32 DevKit-style boards (2 × 19 headers)
Socket Dual female header rows — dev board is removable
Breakout All GPIO, EN, and power pins on labeled points
Power distribution 3.3 V, 5 V, and GND rails alongside the GPIO
Power input Via the dev board’s USB, or 5 V to the VIN/5V rail
3.3 V source The dev board’s regulator — budget ~300–500 mA for peripherals
Logic level 3.3 V (5 V rail is supply-only, not for GPIO)
Input-only pins GPIO 34, 35, 36 (VP), 39 (VN)
Strapping pins GPIO 0, 2, 12, 15 — keep unloaded at boot
Wi-Fi + analog Use ADC1 (GPIO 32–36, 39); ADC2 dies with Wi-Fi on
Mounting Corner holes for standoffs / enclosure mounting

Wiring Guide

Seating the Dev Board

Step What to do Notes
1. Match orientation Line the dev board’s pin labels up with the breakout’s silk 3V3 over 3V3, GND over GND — check both corners
2. Align every pin Rest the board, confirm no pin is beside its socket A skewed row bends pins instantly
3. Press evenly Push straight down, alternating ends Firm, even pressure — never rock side to side
4. Verify Power by USB; onboard LED and a 3.3 V check on the rail Then flash a blink as a smoke test
Orientation is the one fatal mistake. Seated backwards, the dev board’s 5 V and GND land on the wrong rails the moment USB connects. Before first power-up, physically confirm one known pin (say, the 3V3 corner) sits over the matching label on the breakout. Ten seconds of checking protects both boards.

Powering the Board and Its Peripherals

Scenario How to power Notes
Desk / development USB into the dev board Breakout rails are fed through the dev board
Installed project Regulated 5 V into the 5V/VIN rail + GND Powers the dev board through its VIN
3.3 V sensors Feed from the 3.3 V rail Comes from the dev board’s regulator — keep total modest
Heavy loads (LEDs, motors, relays) Own supply, grounds tied to the breakout GND Never through the 3.3 V regulator
Budget the 3.3 V rail. The dev board’s little regulator feeds the ESP32 (Wi-Fi bursts included) plus everything on the 3.3 V rail. A few sensors are fine; a display plus a radio plus a sensor array starts browning out. When peripherals add up, feed the hungry ones 5 V or their own supply instead.

The Pin Map That Prevents Mysteries

Group Pins Rule of thumb
Safe general I/O 4, 5, 13, 14, 16–19, 21–23, 25–27, 32, 33 Use these first for outputs and buses
Input-only 34, 35, 36, 39 Great ADC inputs; no output, no internal pull-ups
Strapping pins 0, 2, 12, 15 Must be free at boot — avoid pull-downs/loads on them
Wi-Fi-safe analog ADC1: 32–36, 39 ADC2 pins stop converting when Wi-Fi is on
Default buses I2C 21/22 · VSPI 18/19/23/5 · UART0 1/3 Leave 1/3 alone — they are the USB serial link
Flash pins 6–11 (if exposed) Never connect anything — internal flash uses them
Why boots fail with everything wired. GPIO 12 pulled high at reset changes the flash voltage; GPIO 0 pulled low enters bootloader mode; loads on 2 and 15 can do similar mischief. If a project boots naked but not fully wired, move whatever landed on a strapping pin to a safe pin and it resolves.

Landing Common Sensor Types

Peripheral type Breakout points to use Example
I2C sensor 3.3 V · GND · 21 (SDA) · 22 (SCL) MPU6050, BME280, OLED
SPI device 18 (SCK) · 23 (MOSI) · 19 (MISO) · 5 (CS) SD card, RC522, displays
Analog sensor 3.3 V · GND · GPIO 34 (ADC1) LDR, TDS, gas sensor divider
Digital sensor 3.3 V · GND · any safe I/O (e.g. 27) PIR, reed switch, DHT22
Serial module 16 (RX2) · 17 (TX2) GPS, HC-12 — cross TX/RX
One habit for clean installs: land each sensor’s power on the rail segment nearest its signal pins and keep leads short. The breakout’s value is exactly this — wiring that reads like the pin map, so future-you can trace any wire in seconds.

Code Examples

1. Pin Sanity Tester

pin_tester.ino
// Blink any breakout point to confirm your wiring & labels.
// Change TEST_PIN, upload, and put an LED (with resistor) or
// a multimeter on that terminal.
const int TEST_PIN = 27;

void setup() {
  pinMode(TEST_PIN, OUTPUT);
  Serial.begin(115200);
  Serial.printf("Toggling GPIO %d\n", TEST_PIN);
}

void loop() {
  digitalWrite(TEST_PIN, HIGH);
  delay(500);
  digitalWrite(TEST_PIN, LOW);
  delay(500);
}

2. I2C Bus Scanner (Pins 21 / 22)

i2c_scanner.ino
#include <Wire.h>

void setup() {
  Serial.begin(115200);
  Wire.begin(21, 22);   // SDA, SCL on the breakout's I2C points
}

void loop() {
  int found = 0;
  for (byte addr = 1; addr < 127; addr++) {
    Wire.beginTransmission(addr);
    if (Wire.endTransmission() == 0) {
      Serial.printf("Device at 0x%02X\n", addr);
      found++;
    }
  }
  if (!found) Serial.println("No I2C devices found - check SDA/SCL");
  Serial.println("---");
  delay(3000);
}

3. ADC1 Reading with Wi-Fi Running

adc1_with_wifi.ino
// Proof of the ADC rule: GPIO 34 (ADC1) keeps working with Wi-Fi on;
// an ADC2 pin (e.g. GPIO 25) would return zeros here.
#include <WiFi.h>

const int SENSOR = 34;   // input-only ADC1 pin on the breakout

void setup() {
  Serial.begin(115200);
  analogSetPinAttenuation(SENSOR, ADC_11db);
  WiFi.begin("YourNetwork", "YourPassword");   // Wi-Fi active
}

void loop() {
  int raw = analogRead(SENSOR);
  float volts = raw * (3.3 / 4095.0);
  Serial.printf("ADC1 raw: %d  (%.2f V)  WiFi: %s\n",
                raw, volts,
                WiFi.status() == WL_CONNECTED ? "connected" : "...");
  delay(500);
}

4. MicroPython — Walk the Safe Pins

pin_walk.py
from machine import Pin
import time

# Pulses each safe output pin in turn - follow along with an LED
# probe on the breakout terminals to verify every label.
SAFE_PINS = [4, 5, 13, 14, 16, 17, 18, 19, 21, 22, 23, 25, 26, 27, 32, 33]

pins = [Pin(n, Pin.OUT, value=0) for n in SAFE_PINS]

while True:
    for n, p in zip(SAFE_PINS, pins):
        print("GPIO", n)
        p.value(1)
        time.sleep(0.4)
        p.value(0)
        time.sleep(0.1)

Frequently Asked Questions

Does it come with the ESP32?
No — this is the breakout board alone. It accepts the common 38-pin ESP32 DevKit-style boards (two rows of 19 pins). If you are starting fresh, pair it with one of our pre-soldered 38-pin ESP32 dev boards and the two click together out of the box.
Will my 30-pin ESP32 board fit?
No — the socket spacing is specific to the 38-pin footprint, and a 30-pin board’s rows sit closer together. Check your board’s pin count before ordering; 38-pin boards have 19 pins per side and usually expose GPIO 34/35 and the VP/VN pins that 30-pin boards omit.
The dev board won’t seat flat. Should I push harder?
Stop and look first: one pin is almost certainly beside its socket hole rather than in it, or a pin got slightly bent in transit. Straighten any bent pin with pliers, realign, and press evenly from both ends. Force without alignment folds pins under the board — recoverable, but annoying.
My sketch works until I wire everything, then the ESP32 won’t boot.
Classic strapping-pin collision. GPIO 0, 2, 12, and 15 set boot behavior at reset, so a sensor or pull resistor parked on them can hold the chip in the wrong mode. Because the breakout makes every pin available, it is easy to grab one accidentally — shift the offending wire to a safe pin (see the Pin Groups tab) and boot returns to normal.
Can I power it from USB and the 5 V rail at the same time?
Avoid it. Pick one source at a time: USB while developing, the 5 V rail for the installed project. Backfeeding two supplies against each other stresses the dev board’s protection (some boards have a diode, some clones cut corners). If you must switch often, unplug one before connecting the other.
Can I drive relays, LED strips, or motors from the breakout terminals?
Signals yes, power no. GPIO pins still source only ~12–40 mA — the breakout adds convenience, not current. Run the control signal from a GPIO to a driver stage (relay/SSR module, MOSFET board, motor driver) and give the load its own supply, with grounds commoned at the breakout’s GND rail.
Why do my analog readings die when Wi-Fi connects?
The sensor is on an ADC2 pin. The ESP32’s Wi-Fi hardware owns ADC2 whenever the radio is active, so those pins return zeros mid-connection. Move analog inputs to the ADC1 group — GPIO 32, 33, 34, 35, 36, 39 — all clearly labeled on the breakout, and readings coexist with Wi-Fi happily (example 3 demonstrates it).

Related Tutorials