×

Our Technical Support team will be out of the office on Wednesday, April 23 starting at 12pm. Tech Support will reopen with normal hours on Thursday, April 24 at 9am. Thank you

Retired!

This is a retired product, but fear not as there is a newer, better version available: DEV-12640

Creative Commons images are CC BY-NC-SA 3.0

Retired RETIRED

This product has been retired from our catalog and is no longer for sale.

This page is made available for those looking for datasheets and the simply curious. Please refer to the description to see if a replacement part is available.

Replacement: DEV-11098. We've revised this board to correct the silk and LED errors. We've also added a PTC fuse and diode protection circuit. This page is for reference only.

Description: Here at SparkFun, we refuse to leave 'good enough' alone. That's why we're adding to our line-up of Arduino-compatible microcontrollers once more! The Pro Micro is similar to the Pro Mini except with an ATmega32U4 on board. The USB transceiver inside the 32U4 allows us to add USB connectivity on-board and do away with bulky external USB interface.

This tiny little board does all of the neat-o Arduino tricks that you're familiar with: 4 channels of 10-bit ADC, 5 PWM pins, 12 DIOs as well as hardware serial connections Rx and Tx. Running at 16MHz and 5V, this board will remind you a lot of your other favorite Arduino-compatible boards but this little guy can go just about anywhere.

Note: There are two minor errors on this board which shouldn't affect your overall project to any great degree but are helpful to know about. Digital Pin 14 is mis-labeled as Pin 17 on the silkscreen. Also, the Tx and Rx LEDs are pulled to ground instead of VCC.

Note: This board uses what's known as the "diskloader" bootloader, this is presumably the same bootloader used by the Arduino Leonardo. This bootloader is still in its infancy so expect some glitchiness here and there. Also, because it works over HID you will need to install some drivers so that your computer will recognize it. A "readme" file in the driver pack below explains how to do this.

Note: See the GitHub link below for support with the Arduino IDE.

Features:

  • ATMega 32U4 running at 5V/16MHz
  • Supported under Arduino IDE v1.0 (un-comment "leonardo" lines in boards.txt)
  • On-Board micro-USB connector for programming
  • 4 x 10-bit ADC pins
  • 12 x Digital I/Os (5 are PWM capable)
  • Rx and Tx Hardware Serial Connections
  • Our Smallest Arduino-Compatible Board Yet!

Documents:

Comments 77 comments

  • Where’s the all-telling magic ruler in the pictures? ;) Can we get the dimensions of the board?

    • How far does the USB port hang off the board?

    • If those header pins are spaced at 0.1" intervals, then the board size is (by my calculation) 1.3" x 0.7" - the same size as the Pro Mini… (total board length including connector would therefore be about 1.36"…) (They also mentioned in the news post and the video that it’s the same size as the Pro Mini. I somehow missed this bit info the first time I watched the video, and was under the mistaken impression that the Micro was actually smaller than the Pro Mini.)

    • Agreed :D normally they at least post on the description :D

  • If you operate a professional website, you shouldn’t have grammatical errors like this: “Note: There are two minor errors on this board which shouldn’t effect your overall project”.

    Please.

    • Good eye, thanks :) The same guy who writes all of these descriptions also proofs them (me) so it’s nice to have another set of eyes on them. I guess we all let one slip from time to time!

  • Where is A4 and A5?

  • ouch, spent two hours putting together my order to come back and find this goes out of stock right when i go to purchase it…. grrr

  • I think you mean will have no AFFECT instead of EFFECT in

    “There are two minor errors on this board which shouldn’t effect your overall”.

    I want one, or at least a 3.3v version. Two ICPs! I2C, USART (with SPI) - hey, maybe my revised hyperlog has a platform

    • “..and organizing its powers in such form, as to them shall seem most likely to effect their safety and happiness.”

      Everyone misspells it. Even the US Declaration of Independence. :/

      • That is not a misspelling. “To effect” means “to bring about”, as in “to effect change”, or as one would speak of a robot’s “end effector”. “To affect” means “to have an effect on”.

        If one said that “Joe affected the robot’s operation”, that would mean that Joe had done something which changed the way the robot was working. If one said that “Joe effected the robot’s operation”, that would mean that Joe had done something which allowed the robot to work at all.

      • I believe that the proper usage of these words may have changed over time, possibly confusing many people…

        • Nope! Effect, when used as a verb, means to bring about. In the Decl. of Ind., it means that we should organize our powers in such a way as to bring about the safety and happiness of our citizenry. It has the same meaning today, and while it is less used, it is not antiquated.

          Of course, the original post needed the noun version of effect, meaning an actual change, as opposed to “affect” as a noun, which means demeanor. As opposed to “affect” as a verb, which means to have an effect on…

          Anyway, please pardon me. I’m grading papers right now, so I’m in full-on pedant mode.

  • Hmm, but I don’t see a shiny 6-pin header for ISP programming, which would be nice if you’re reflashing it periodically (I had to do that with my Pro a few times). Omission or just assumed you’ll build a jig for it or some such?

    • Yup, no ISP header to speak of. Design decision, trying to keep the board small, same form-factor as the Pro, yada yada…

      Hopefully the bootloader works in most situations. You can always use AVRDUDE to program it (should still be stk500v1 compatible), if you want to avoid using Arduino.

      If you do need some ISP action though, I always find these little boards come in very handy.

      • There has to be some way for you guys to get the bootloader on these in production, mind informing the rest of us which gpio pins we can kludge an ISP solution onto?

        • We use pogo based test beds: http://www.sparkfun.com/tutorials/138 for programming the bootloader onto the board.

          • That’s what I meant about building a jig. I wouldn’t even worry about it except that 1) I don’t think the Leonardo bootloader is finalized (so there’s a decent likelihood of needing to reflash), 2) the pro that I made in the SMD stencil class for some reason needs ISP to reprogram no matter how often I reflash the loader (go figure; it looked like it was working fine at class), and 3) I’m looking at the 32u4 for HID applications with custom reports (keyboard/mouse/multibutton/multiaxis joystick combined) and while I’m not sure, I suspect that’ll involve some reflashing goodness.

            Looks like a fun little product tho, and a jig wouldn’t be hard to make.

            • I’m having the same problem with my pro. The auto-reset isn’t working and I can’t for the life of me figure out why. I can manually hit reset and get it working though.

        • All of the pins required to program the device are broken out in the same fashion as the other pins. See the schematic for their designations.

  • Finally, an Arduino that erases a huge advantage the PIC line has had for a while - integrated USB. The big question is just how compatible it is with all the sketches and libraries out there. Timer 2 is gone from the 32u so a number of libraries break. I know that I’d have to modify the IR library to use it with this board.

  • I purchased this board as a drop in replacement for a project I’m doing with an Arduino Mini 04. I used the 04 after using a Desemuilnevoa or however you spell that and both work fine. I even used a RBBB Arduino and that worked as well. The project consists of using the BLE Mini module from RedBearLab: http://redbearlab.com/blemini/ and just blinking a RGB LED.

    I have the LED blinking with the pro micro from sparkfun, but the TX/RX communication appears to just not work. I could not get it to work with the Teensy 2.0 or 3.0 either. The BLE module just uses serial.available() nothing special.

    Any thoughts to why this pro micro might not work? The baud rate is set correctly. I think it’s just a little beyond my skill level to debug.

  • I have been using this board in a countdown timer that uses the millis() function to trigger horns and leds at specific intervals. This code works on both the Uno R3 and the Osepp Nano, but when I use the Pro Micro my code misses cues and seems to be running slowly. In addition, when I try to use the serial monitor my IDE freezes. If anyone could give me some help with these issues that would be pretty sweet.

  • Sigh, typical Sparkfun product. Missing ADC0/ADC1, so basically no differential ADC. If you’re going to leave out two ADC pins, why the hell would you leave out the two that have special functionality? Don’t you guys ever read datasheets?

    I know I should have read the schematic before ordering, but you can’t just make this stuff up. Got bitten by sloppy SF design one too many times, this is the last time I’ve ever ordered anything from you guys. Sorry.

  • Driver download broke this AM I think…

  • Can you sell the ATmega32U4 by itself?

    • We can but let me know why you may want it? The ATmega32U4 is SMD and pretty tight pitch. There may not be many people that would want it unless it’s soldered to a breakout board.

      • Good point. However, if soldering difficulty is an issue, then why do you sell this? It looks even more difficult than the ATmega32U4 to solder.

  • When I plug this into an OS/X box and open /dev/tty.usbmodem411 with minicom, I get the following output spam:

    ALL TESTS FAIL!! OH NO!!

    • Hey IggyB,

      The test code that goes out on Pro Micro does a full IO test then signals success via the LEDs and a message piped over serial. The code is designed to work with our in-house test equipment. Since customers don’t have the test jig they’ll see the “ALL TESTS FAIL” message.

      We assume that the first thing a customer is going to do is load their own code onto the board but I’ll admit it’s disconcerting to see an ominous message like that when you first plug in a board. I hope this didn’t cause you too much worry though. Your board should be functioning correctly. And to correct seeing those serial messages all you need to do is upload your own code to the board.

      I hope that helps! Good luck!

    • I guess this is a SparkFun test binary that gets loaded on the board before it ships. I was able to load my code over it using the preinstalled bootloader. Odd message to get when you first plug in a chip from a distributor.

  • Has anyone tried to use this with a PC terminal other than the Arduino Serial Monitor, using the tutorial example?

    It works for that, but on my Developer Terminal it prints one character per second and on Bray’s Terminal it says ‘Error port is not available’.

  • If you’d like to see what 32U4 pins actually map to what Arduino “pins”, take a peek at the file: “pins_arduino_(Leonardo).h”

    Here’s the relevant snippet (kind of a mess here…):


    // ATMEL ATMEGA32U4 / ARDUINO LEONARDO // // D0 PD2 RXD1/INT2 // D1 PD3 TXD1/INT3 // D2 PD1 SDA SDA/INT1 // D3# PD0 PWM8/SCL OC0B/SCL/INT0 // D4 A6 PD4 ADC8 // D5# PC6 ??? OC3A/#OC4A // D6# A7 PD7 FastPWM #OC4D/ADC10 // D7 PE6 INT6/AIN0 // // D8 PB4 ADC11/PCINT4 // D9# A8 PB5 PWM16 OC1A/#OC4B/ADC13/PCINT5 // D10# A9 PB6 PWM16 OC1B/0c4B/ADC12/PCINT6 // D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7 // D12 A10 PD6 T1/#OC4D/ADC9 // D13# PC7 PWM10 CLK0/OC4A // // A0 PF7 ADC7 // A1 PF6 ADC6 // A2 PF5 ADC5 // A3 PF4 ADC4 // A4 PF1 ADC1 // A5 PF0 ADC0 // // New pins D14..D17 to map SPI port to digitial pins // // D14 PB0 RXLED,SS/PCINT0 // D15 PB1 SCK,PCINT1 // D16 PB2 MOSI,PCINT2 // D17 PB3 MISO,PCINT3 // // TXLED PD5 // RXLED PB0 // HWB PE2 HWB

    // these arrays map port names (e.g. port B) to the // appropriate addresses for various functions (e.g. reading // and writing)


    Really don’t like to spam in a “competitor’s” website (a bit rude!), but I have a pretty good HID mouse/keyboard tutorial for the Leonardo, with lots of undocumented functions I dredged from the *.h files: http://cal-eng.com/?page_id=579

    The keyboard modifier keys (CTRL, ALT, etc) escape me for the moment since the source code is a bit hard to follow! ;)

    • Nice tutorial! I’ll match your plug with one of my own :), Turn your Pro Micro into a USB Keyboard/Mouse. That’ll also help with using the modifiers and arrow/non-ASCII keys.

      The HID stuff is lots of fun. Great stuff in there that Arduino somewhat hid (pun very intended) away.

      • Cool!

        You really need to link that tutorial from the product page!

        You missed the “Mouse.isPressed();” function, but kudos for figuring out the modifier keys! (it’s far more convoluted that I had hoped, maybe the team will polish it up for the release…)

        FYI, I did send my site to spark@sparkfun.com to see if there was any interest in my gizmos, but no feedback yet. Oh well… ;)

  • a 3.3v version would be EPIC :-)

  • Another difference between the SF Pro Micro and the teensy is that you can run this one off of a battery via the raw connector. The teensy connects the 3.3V regulator input to the 32u4. I think it would be ok to hook the teensy to a one cell Lipo but I couldn’t find a connection on the board for it. I suppose you could make a usb-mini plug to do it.

    edit: hmmm, does this have a mini or micro USB connector? SFE shows a microUSB cable as a related product and the pictures don’t show the connector opening.

  • Does anybody have an Eagle library package for this? I’d like to drop this in to my schematics.

  • Yes, to save money, get more ADC’s and all the features of the 32u4 boards you will want to look at the teensy and adafruit’s 32u4 board. Adafruit just announced the Flora etextile platform based on the 32u4.

  • Well I wanted you guys to sell teensy’s, this is probably the closest you’ll get :-)

  • Great, site told me “you must be logged in to comment” and erased my message. Looks like I get to write this message again… I’m wondering about the bootloader, how it works on this board and what the implications of running it are. With no reset switch to manually enter “bootloader mode” - does that mean that the bootloader is always running? Can you do the usual Arduino-type stuff like have your sketch running, hooked up to USB and communicating with the host? If so, is the overhead of running the USB CDC driver significant? Is it likely to mess up timing-critical stuff going on in the sketch or is the level of disruption about the same as serial I/O? I’ve always felt it was kind of a waste to have a second IC for USB communication when there are USB-capable micros out there… It’s nice to see another Arduino-style board built around this approach…

    • Right on, great questions!

      We’re putting the Arduino Leonardo’s bootloader on these; slightly modified to have our VID and PID. A note’s been added above, as well as a link to a driver/readme.

      Any Arduino sketch loaded onto this board will include USB CDC as well as HID functionality. The CDC stuff is required for Serial communication. HID’s just fun, but can be very useful. That chunk of code is not insignificant…a simple blink sketch that would cost an Uno 1kB, now compiles to 4.3kB.

      It really is great to see all of this boiled into one chip, but there are always trade-offs.

      • So the overhead associated with not using an FTDI 232RL used on the Arduino Nano and having dedicated USB CDC device code in flash is around 3.3 kByte? Is there any way of removing the HID code that many people won’t need? Also, how much on-chip RAM is used by the USB CDC & HID code?

        • There’s 32 KB of Flash memory to go around, and from practical experience it doesn’t fill as quickly as many people might think. If you’re using the Arduino libraries, you’re pretty much dooming yourself to a large code signature - using a lightweight replacement or fully coding it yourself can save 20-75% in Flash size.

          I was under the impression that the extra 0.5 KB of RAM over an ATmega328 was meant for the USB stack. So my guess for the USB RAM usage is 512 bytes or less.

    • My bet is that it is running a Leonardo variant boot loader. The reset line is broken out, just jumper it and go :)

    • To answer these types of questions, it would be nice if SparkFun specified which bootloader they use and where the source code can be found.

  • It’s not an exact replacement for the Pro Mini - Pins A4 and A5 are missing.

    • Whoa!!! These aren’t only analog inputs – A4 and A5 are used as SCL and SDA in the I2C Wire Library. Does this mean that the Pro Micro has NO WAY of supporting any kind of I2C interface? If so, then this is a reasonably serious limitation that should be pointed out on the product page!

      • No fear, the I2C pins are still there! The hardware I2C pins on the Pro Micro are D2 (SDA) and D3 (SCL).

        • So no external interrupts then if you’re using I2C? Plz say those got moved as well!!

          If this really does support I2C and 2+ other external interrupts, then I know what Arduino will be my next one!

          • Its not so much a matter of them moving pins as it is that this is an entirely different microcontroller with different features, using different pins. Check out the datasheet for the ATMega32U4 for more info on the chips features.

    • The schematic implies that several of the digital pins (namely D4, D6, and D9) might be usable as additional analog pins. However, I do not believe that the default Arduino libraries would support this functionality. I personally skip the Arduino libraries and use C directly to program Arduinos and other AVR devices, so this is not as much as a problem.

      If the extra two analog pins are very critical, I would suggest studying the datasheet and reading some online tutorials about manipulating registers on the AVR system. It’s not as intimidating as it sounds, and you can access the extra three analog pins that way.

      • I am using all the pins now, plus the A4 and A5 on the mini - so unless additional pins are broken out, manipulating the registers won’t do me any good. I’ll just stick with the pro-mini for now. might switch it to mBed.

        • agreed. im using the A0-A5 on a pro mini, using PORTC calls for parallel data output on the entire PORTC. very time/cycles sensitive. i would love to have all six pins available.

          other than that, this looks interesting!

    • Teensy and Teensy++ breakout many more pins if needed. And the teensy is well supported and still just $16. Ever wonder how SparkFun can “give away” free money once a year?

    • Neither this board nor the Pro Mini has A4 or A5. However, this is a 44-pin QFN and a more modern and feature-rich processor than the 32-pin QFP on the Pro Mini; it’s got 12 ADC channels as opposed to 8 on the QFP and 6 on the DIP version.

      Yes, pins 40 and 41 (ADC0 and ADC1, or A4 and A5 in Arduino-speak) are not broken out. Neither is pin 26, or ADC9. However, it can take ADC readings on pins 25, 27, 28, 29, 30, 36, 37, 38, 39, 40, and 41 - that’s 11 channels of ADC. Pretty impressive, if you ask me.

      Oh, and did I mention that channels ADC0 and ADC1 can be configured as negative inputs to a programmable-gain differential amplifier stage, giving you up to 200x amplification of your input signals when muxed with any of the other ADC ports? This is a sweet little board.

      • The Pro Mini sticks “A4” and “A5” further in, closer to the microcontroller rather than around the perimeter. That negative input info sounds handy! Not sure what I would specifically use it for, but now we know :)

  • my first impression: look, PJRC teensy is finally mainstream :D however, i would recommend going to their site for some source code, as they have prebuilt header files for using the Atmega32u4 as a mouse, keyboard, or a gaming joystick, but you would have to implement the code yourself, as this version has the arduino boot-loader as opposed to the half-kay the teensy uses, which automagically incorporates the needed header files.

    • There appear to be some differences between this and the teensy. The biggest is that it appears there is no vreg on the teensy. This means that you have to either use USB or a separate power supply. This kills the teensy for several projects I have. Also, SFE seems to have more documentation than PJRC. I like having a schematic so I can go chase down connections. The teensy does seem to just be direct 32u4 pinouts so it could be moot but I like having the documentation. and there are some pinouts on the teensy that have no labels at all (at least from the photos they have). PJRC seems pretty weak on documentation in general.

      • PJRC has a quite good documentation in my opinion. The teesy is compatible with the arduino IDE, has a library database with verry good examples and is cheaper.

        Adafruit has also a 32u4 board, but that one is the same prize as the teensy and does also use the arduino Leonardo bootloader (and some extra features like a fuse).

        • Yes, the web site is a little confusing to navigate but once I found all the docs, I was quite impressed. He could stand to rework the site to make it more straightforward but his product looks very good.

      • PJRC has full schematic available on their website as well as an availble 3.3v regulator if you want to attach one (goes on underside)

  • I believe we have to edit the hardware/arduino/boards.txt file and uncomment the lines 165 to 179 to get the board listed in the Arduino software.

    Am I correct?

    • Yup. You’ll need to un-comment out (delete all the #’s) in front of either the “leonardo…” or “micro…” defines. You can use either of those as the Board selection in Arduino.

  • Wich board should we select in the Arduino 1.0 software to program it?

    Thanks

  • “Also, the Tx and Rx LEDs are pulled to ground instead of VCC.”

    Will we notice any abnormal behavior with the board because of this?

    • Nope. You’ll just have to drive them high instead of pulling them low when trying to turn them on; a tiny firmware change.

      The serial lines are connected to pins 20 and 21 (PD2 and PD3), while the LEDs are connected to pins 8 and 22 (PB0 and PD5). Somewhere in the code you’ll find these pins being set low, you need to switch that the set them high.

      This would have been an error a few years ago when P-channel MOSFET technology was weaker than N-channel, so the I/O pins could sink current better than they could source it, but it’s really not an issue now. Now, the only ‘error’ is that other Arduino libraries expect these to be inverted. Not a big deal.

    • I think all it’ll do is cause the LEDs to be on when the serial line is inactive and off when the serial line is active - instead of the other way around.

      • Correct (LEDs will be on most of the time). Not a problem and fixable by editing some of the Arduino definition files, but we’ll change it on the next rev so that everything works similarly.

  • I was about to order… and then it went out of stock. Almost as bad as the time I ordered 2 things from ThinkGeek and as the order was processing, it went out of stock. Sad face.


Related Products