Documentation

ShillehTek Pro Micro ATmega32U4 5V 16MHz Presoldered Type-C | ShillehTek Product Manual
Documentation / ShillehTek Pro Micro ATmega32U4 5V 16MHz Presoldered Type-C | ShillehTek Product Manual

ShillehTek Pro Micro ATmega32U4 5V 16MHz Presoldered Type-C | ShillehTek Product Manual

pro-micro-atmega32u4-5v-16mhz-presoldered-type-cshillehtek

Overview

The ShillehTek Pro Micro ATmega32U4 5V 16MHz Presoldered (Type-C) is a compact, breadboard-friendly development board built around Atmel's ATmega32U4 microcontroller. Unlike the Arduino Uno or Nano, the ATmega32U4 has native USB built directly into the chip — no separate USB-to-serial converter required. This means the board can present itself to your computer as a keyboard, mouse, MIDI device, joystick, or generic serial port, which makes it one of the most popular choices for DIY macro pads, custom input devices, and USB HID projects.

The board runs at 5V and 16 MHz with 32 KB of flash, 2.5 KB of SRAM, and 1 KB of EEPROM. It exposes 18 digital I/O pins (5 with PWM), 9 analog inputs, hardware I2C, hardware SPI, and hardware UART. The headers come pre-soldered, so you can drop it straight into a breadboard and start building. Power is supplied through the USB Type-C connector or through the RAW pin (6–12V), and the onboard regulator provides 5V to VCC.

It programs just like a standard Arduino Leonardo using the Arduino IDE — select "Arduino Leonardo" or "SparkFun Pro Micro (5V, 16 MHz)" as the board, pick the COM port, and click Upload. Libraries like Keyboard, Mouse, and HID-Project unlock the native USB capabilities that make this board so much fun to build with.

At a Glance

MCU
ATmega32U4
Clock Speed
16 MHz
Logic Level
5V
USB
Native Type-C
Digital I/O
18 (5 PWM)
Analog In
9 channels

Specifications

Parameter Value
Microcontroller Atmel ATmega32U4
Operating Voltage 5V
Input Voltage (RAW) 6–12V (onboard regulator)
Clock Speed 16 MHz (external crystal)
Flash Memory 32 KB (4 KB used by bootloader)
SRAM 2.5 KB
EEPROM 1 KB
Digital I/O Pins 18 total
PWM Pins 5 (D3, D5, D6, D9, D10)
Analog Inputs 9 (A0–A3, A6–A10)
Hardware Interfaces 1x UART, 1x I2C, 1x SPI
External Interrupts 5 (D0, D1, D2, D3, D7)
DC Current per I/O Pin 20 mA (40 mA absolute max)
USB Connector USB Type-C (native USB 2.0 device)
Dimensions 33 × 18 mm
Bootloader Caterina (Arduino Leonardo compatible)

Pinout Diagram

ShillehTek Pro Micro ATmega32U4 pinout diagram showing TX/D1, RX/D0, GND, D2-D10 digital pins with PWM, I2C and analog annotations on the left side and RAW, GND, RST, VCC, A0-A3, D14/MISO, D15/SCK, D16/MOSI SPI pins on the right side

Wiring Guide

Arduino IDE Setup

The Pro Micro uses the Caterina bootloader, which is the same bootloader used by the Arduino Leonardo. You can use either the built-in Leonardo board definition or install SparkFun's Pro Micro board support for more accurate board naming.

Setting Value
Board Arduino Leonardo (or SparkFun Pro Micro)
Processor (if Pro Micro) ATmega32U4 (5V, 16 MHz)
Port COM or /dev/ttyACM* that appears when plugged in
Programmer AVRISP mkII (default)
Tip: If upload fails with "programmer not responding", quickly short the RST pin to GND twice in a row (double-tap) right when the IDE starts uploading. This forces the bootloader to stay active for 8 seconds so the IDE can find the port.
Why the double reset? The 32U4's native USB disappears briefly after a sketch runs. If your sketch hangs or disables USB, the bootloader is the only way back — the double-tap reset enumerates a separate USB device for programming.

Power Options

The Pro Micro can be powered three ways. Pick whichever fits your project.

Method Pin Voltage Range
USB Type-C USB connector 5V (from host)
Regulated input VCC pin 5V only (bypasses regulator)
Unregulated input RAW pin 6–12V (goes through onboard regulator)
Warning: Never feed more than 5V into the VCC pin — that pin connects directly to the MCU and the regulator output. Higher voltages will destroy the ATmega32U4. Use the RAW pin for anything above 5V.
Tip: You can power the Pro Micro from USB and RAW at the same time — the board uses whichever source has a higher voltage. This is handy for battery-backup setups.

I2C Peripherals

The ATmega32U4 has one hardware I2C port using pins D2 (SDA) and D3 (SCL). Use the standard Wire library to talk to sensors and displays.

Pro Micro Pin I2C Signal Connect To
D2 SDA Peripheral SDA
D3 SCL Peripheral SCL
VCC Peripheral VCC (if peripheral is 5V-tolerant)
GND Peripheral GND
Pull-ups: Most breakout boards (OLEDs, sensors) already include 4.7kΩ pull-ups on SDA and SCL. If you're daisy-chaining more than one peripheral, you may need to remove extras to avoid over-strong pull-up.
3.3V peripherals: The Pro Micro runs at 5V logic. Connecting it directly to a 3.3V-only peripheral (such as an ESP-01 or certain IMUs) will damage the peripheral. Use a bidirectional I2C level shifter for 3.3V devices.

SPI Peripherals

The ATmega32U4 exposes hardware SPI on the 6-pin ICSP-style header as well as on dedicated through-holes. Use the SPI library with any pin you prefer as CS.

Pro Micro Pin SPI Signal Direction
D15 SCK Output
D16 MOSI Output
D14 MISO Input
Any digital pin CS/SS Output (software)
Tip: Unlike the Uno, the Pro Micro's SPI pins do NOT match pins D11–D13. If you're porting a sketch that uses digitalWrite(11, ...) to bit-bang SPI, change those references to the correct SPI pins (D14/D15/D16).

Code Examples

Blink (Hello World)

blink.ino
// Blink the onboard TX/RX LEDs since the Pro Micro has no
// dedicated user LED on a GPIO pin. D13 is not an LED here.

void setup() {
  // Both built-in LEDs are available:
  // LED_BUILTIN_TX (PD5) and LED_BUILTIN_RX (PB0)
  pinMode(LED_BUILTIN_TX, OUTPUT);
  pinMode(LED_BUILTIN_RX, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN_TX, LOW);   // LEDs are active-LOW
  digitalWrite(LED_BUILTIN_RX, HIGH);
  delay(500);
  digitalWrite(LED_BUILTIN_TX, HIGH);
  digitalWrite(LED_BUILTIN_RX, LOW);
  delay(500);
}

USB Keyboard (Native HID)

keyboard_button.ino
// Wire a pushbutton between D2 and GND.
// When pressed, the Pro Micro types "Hello from Pro Micro!"
// as if it were a real USB keyboard.

#include <Keyboard.h>

const int BUTTON_PIN = 2;
bool lastState = HIGH;

void setup() {
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  Keyboard.begin();
}

void loop() {
  bool state = digitalRead(BUTTON_PIN);

  // Trigger on press (HIGH -> LOW transition)
  if (lastState == HIGH && state == LOW) {
    Keyboard.print("Hello from Pro Micro!");
    Keyboard.press(KEY_RETURN);
    Keyboard.releaseAll();
    delay(50);  // debounce
  }

  lastState = state;
}

USB Mouse Jiggler

mouse_jiggler.ino
// Classic "mouse jiggler" — moves the cursor a pixel every
// 30 seconds so your computer thinks you're still at it.

#include <Mouse.h>

void setup() {
  Mouse.begin();
}

void loop() {
  Mouse.move(1, 0, 0);
  delay(100);
  Mouse.move(-1, 0, 0);
  delay(30000);  // 30 seconds
}

I2C Scanner

i2c_scanner.ino
// Scans the I2C bus and prints the address of every device
// it finds. Useful first sketch to verify SDA/SCL wiring.

#include <Wire.h>

void setup() {
  Wire.begin();
  Serial.begin(9600);
  while (!Serial) { ; }  // Wait for native USB CDC port
  Serial.println("I2C Scanner");
}

void loop() {
  byte found = 0;

  for (byte addr = 1; addr < 127; addr++) {
    Wire.beginTransmission(addr);
    if (Wire.endTransmission() == 0) {
      Serial.print("Device at 0x");
      if (addr < 16) Serial.print("0");
      Serial.println(addr, HEX);
      found++;
    }
  }

  if (found == 0) Serial.println("No devices found");
  delay(5000);
}

Media Control Keys (Consumer HID)

media_keys.ino
// Turns the Pro Micro into a media control remote.
// Requires the HID-Project library (install via Library Manager).
// Wire three buttons: D2=Play/Pause, D3=Next, D4=Previous.

#include <HID-Project.h>

const int PLAY_PIN = 2;
const int NEXT_PIN = 3;
const int PREV_PIN = 4;

void setup() {
  pinMode(PLAY_PIN, INPUT_PULLUP);
  pinMode(NEXT_PIN, INPUT_PULLUP);
  pinMode(PREV_PIN, INPUT_PULLUP);
  Consumer.begin();
}

void loop() {
  if (digitalRead(PLAY_PIN) == LOW) {
    Consumer.write(MEDIA_PLAY_PAUSE);
    delay(200);
  }
  if (digitalRead(NEXT_PIN) == LOW) {
    Consumer.write(MEDIA_NEXT);
    delay(200);
  }
  if (digitalRead(PREV_PIN) == LOW) {
    Consumer.write(MEDIA_PREVIOUS);
    delay(200);
  }
}

Frequently Asked Questions

Why does my Pro Micro disappear from the port list after uploading?
The ATmega32U4's USB device is software-controlled, so it re-enumerates every time a new sketch runs. If your sketch hangs or doesn't call Keyboard.begin()/Serial.begin(), the port may not come back. Double-tap the RST pin to GND to force the bootloader to stay active for 8 seconds so you can upload a new sketch.
What's the difference between this and an Arduino Leonardo?
Nothing functionally — both use the ATmega32U4 at 5V/16MHz and share the same Caterina bootloader, so sketches and libraries are interchangeable. The Pro Micro is just much smaller, breadboard-friendly, and uses the "Pro Micro" pin numbering convention. Selecting "Arduino Leonardo" in the IDE works perfectly.
Can I use it as a USB keyboard or mouse?
Yes — that's the main reason people choose the Pro Micro over an Uno or Nano. The ATmega32U4 has native USB, so the board enumerates directly as a USB HID device. Use the built-in Keyboard and Mouse libraries for basic use, or the HID-Project library for advanced features like media keys and gamepad reports.
Does D13 have an onboard LED like on the Uno?
No. The Pro Micro doesn't expose D13 at all, and it has no dedicated user LED. The two onboard LEDs are the TX and RX indicators wired to LED_BUILTIN_TX and LED_BUILTIN_RX, and they're active-LOW (write LOW to turn them on). Most Blink examples need to be adjusted accordingly.
How do I power it without USB?
Connect a 6–12V source (battery, wall adapter) to the RAW pin and ground to GND. The onboard regulator will produce 5V on the VCC pin. Alternatively, feed a clean 5V source directly into VCC, but never exceed 5V on that pin or you'll destroy the MCU.
Can I connect 3.3V sensors directly?
Be careful. The Pro Micro runs at 5V logic, so its TX and output pins send 5V signals. Most 3.3V sensors (ESP-01, certain IMUs) will be damaged by this. Use a logic level shifter for 3.3V I2C/SPI peripherals, or choose the 3.3V/8MHz Pro Micro variant if your project is 3.3V-centric.
Which USB cable do I need?
Any standard USB-C data cable. Some cheap USB-C cables ship as charge-only and won't enumerate as a device — if your computer doesn't detect the board at all, try a different cable before assuming the board is faulty.

Related Tutorials

No tutorials specific to the Pro Micro ATmega32U4 are published on shillehtek.com yet. Check back soon — new projects using this board (keyboard macropads, mouse jigglers, USB gadgets) will be added here as they go live.