Some things had to be done to make the 5V ProMicro work on linux.

(Arduino 1.0.5 @ Xubuntu 14.04 LTS 64bit)

There was a serial port conflict (the ProMicro uses two ... one for the bootloader and one for the sketch).

In Linux it was only possible to open the serial monitor but, despite all kinds of procedures to get the ProMicro in programming mode (reset pin to ground 2 times etc.), it was not able to be programmed.

However ... in a Windows test there where two com ports available, one for the serial monitor and one for the programming part. This function was clearly missing on the Linux side of the story.


All SparkFun ATmega32U4 boards share the same VID - 0x1B4F, and they all have unique PIDs. 5V Pro Micros lay claim to PIDs 0x9205 and 0x9206 (one for the bootloader, one for the sketch). 3.3V Pro Micros will show up as 0x9203 and 0x9204 for bootloader and sketch, respectively. And the Fio v3 has 0xF100 and 0xF101.

To fix this ... edit the udev rules:

cd /etc/udev/rules.d/

Create a new rule:

sudo nano 78-promicro.rules


# Arduino Pro Micro USB
ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9205", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="1b4f", ATTRS{idProduct}=="9206", ENV{ID_MM_DEVICE_IGNORE}="1"

... save

sudo chmod 777 78-promicro.rules
sudo chown -R "user"  78-promicro.rules
/etc/init.d/udev restart

Now it should be possible to use the ProMicro and the Arduino IDE. (provided that the proper board type is selected and implemented in the "hardware" folder of the Arduino IDE)

Test the blink:

/* Pro Micro Test Code
   by: Nathan Seidle
   modified by: Jim Lindblom
   SparkFun Electronics
   date: September 16, 2013
   license: Public Domain - please use this code however you'd like.
   It's provided as a learning tool.

   This code is provided to show how to control the SparkFun
   ProMicro's TX and RX LEDs within a sketch. It also serves
   to explain the difference between Serial.print() and

int RXLED = 17;  // The RX LED has a defined Arduino pin
// The TX LED was not so lucky, we'll need to use pre-defined
// macros (TXLED1, TXLED0) to control that.
// (We could use the same macros for the RX LED too — RXLED1,
//  and RXLED0.)

void setup()
 pinMode(RXLED, OUTPUT);  // Set RX LED as an output
 // TX LED is set as an output behind the scenes

 Serial.begin(9600); //This pipes to the serial monitor
 Serial1.begin(9600); //This is the UART, pipes to sensors attached to board

void loop()
 Serial.println("Hello world");  // Print "Hello World" to the Serial Monitor
 Serial1.println("Hello!");  // Print "Hello!" over hardware UART

 digitalWrite(RXLED, LOW);   // set the LED on
 TXLED0; //TX LED is not tied to a normally controlled pin
 delay(1000);              // wait for a second
 digitalWrite(RXLED, HIGH);    // set the LED off
 delay(1000);              // wait for a second

Labels: Arduino

This page was last edited by BauweBijl on 2021/05/17 09:59:18.

Built with BGAEWiki by BauweBijl