The Fio v3 is a new spin on the Arduino Fio hardware powered by the ATmega32U4.Not only is it small and LiPo-ready, it’s a very capable XBee-ready development board.
The JST-connector and 3.3v system voltage make this a great development tool for portable devices, simply plug in a Li-Poly battery and you’re ready to go. Wireless sensor networks and communication are made easy by the on-board XBee socket.
The ATmega32U4, running at 8MHz, makes it possible for you to use the on-board USB jack not only to charge a connected Li-Poly battery but to actually program the device! Because this board uses a similar bootloader to the one on the Pro Micro, you will need to download and install the special software driver below. There’s also a board definition add-on for the Arduino IDE which will add support for this board.
We’ve updated this to the latest version of the 32U4 firmware, see the firmware note in the documents below!
Note: See the GitHub link below for support with the Arduino IDE.
By connecting to the FioV3 at a baud rate of 1200 and closing the COM port, this will initiate a software reset with the Atmega32U4 just like the Arduino Leonardo (as stated in the Automatic (Software) Reset and Bootloader Initiation for a Leonardo => https://www.arduino.cc/en/Main/ArduinoBoardLeonardo ) .
The Fio V3 has the capability of measuring the battery voltage of an attached Lipo. There is a resistor divider with two 1k resistors connected to 32U4 pin PD6. PD6 is actually A11 in Arduino.
Doing an analog read on A11 will allow you to calculate the voltage remaining in the battery. The reading will be ½ of voltage level and you can calculate voltage with a simple equation.
Battery voltage = (analog reading * (3.3/1024)) * 2
The serialEvent() function is not compatible with the Esplora, Leonardo, or Micro” that uses the Atmega32U4 https://www.arduino.cc/en/Reference/SerialEvent.
There was a customer that was able to resolve this by using the serialEventRun(). For more information, try looking through this forum that helped the customer resolve the issue => https://forum.sparkfun.com/viewtopic.php?f=14&t=41515.
Timing Issues w/ USB Communication through CDC
Interrupts Atmega32u4’s built in CDC driver for USB communication can have timing issues when messing with the watchdog timer, sleep modes, and timer interrupts. I am unsure of how to fix this issue if you continue to use code that interferes with the CDC. I recommend trying a different method than using the interrupt timers.
Wrong Bootloader It’s possible to brick your FioV3 if you used the wrong board selection with the wrong frequency. If you upload the wrong frequency, the IC will not be able to understand any new code that is being uploaded. It expects to have code that is compiled for another bootloader, instead of using the 8MHz frequency with the oscillator.
When either of these cases happens, the device manager is not able to recognize the device and is usually seen as an “unknown device” when the microcontroller runs the sketch. There are ways to recover the an Atmega32U4 (i.e. LilyPad Arduino USB - Atmega32U4 board, FioV3 - Atmega32U4, Pro Micro 5V/16Mhz, Pro Micro - 3.3V/8Mhz, etc) if this happens. Check below for more information:
A.) Upload when LilyPad USB with Atmega32U4/Pro Micro/FioV3 is still in Bootloader Mode
You can try the double reset method by tapping the RST pin to GND twice (since there is no reset button on the board) as explained in the Troubleshooting sections labeled as Reset to Bootloader and How to Revive a “Bricked” Pro Micro => https://learn.sparkfun.com/tutorials/pro-micro–fio-v3-hookup-guide/troubleshooting-and-faq.
1.) Open the Arduino IDE.
2.) Choose a simple code to upload on the Arduino. I used the blink test code from the hookup guide [ https://learn.sparkfun.com/tutorials/pro-micro–fio-v3-hookup-guide#example-1-blinkies ] to upload.
3.) Check your Tools>Port menu for the list of COM ports when the Arduino is connected. You will probably not see it in the list.
4.) Click somewhere else to stop viewing the list of COM ports.
5.) Ground the RST button 2x as stated in the Troubleshooting and FAQ [ https://cdn.sparkfun.com/assets/6/d/¾/a/523c8e23757b7fbe5f8b4584.png ].
6.) Re-open the Tools>Port menu to view the list of COM ports again to see what the FioV3 enumerates to when its in its bootloader. There is an 8 second window to view the COM port when the board is in bootloader mode.
Note: Feel free to use the device manager at this step. Opening up the device manager on your operating system will help to see when the Arduino pops up and disappears.
7.) Select the COM port that the FioV3 is on before it disappears again.
8.) Hit the Upload button to compile and upload.
9.) Wait a few seconds for the Arduino IDE to compile code. The progress bar should be just over the halfway mark.
Note: On Windows, this takes about 20 seconds to compile and upload. The device will show up as “SparkFun Pro Micro (COM##)”. Trying this on a Mac seemed a little faster to compile and upload.
10.) Hit the reset button twice again to place the FioV3 in bootloader mode while the Arduino IDE is uploading.
11.) If successful, you will have no error messages the Arduino IDE will tell you that it is “Done uploading.”
After selecting the correct board definition and timing the double reset method correctly, I was able to upload successfully. It took me a couple of tries before I could get this right because of the timing. You should not need to go through this recovery procedure for subsequent uploads unless you brick the Atmega32U4 again.
B.) Outdated or Corrupt drivers
If board is showing up as Arduino Micro (COM##) or Pro Micro (COM##), try the double reset method and updating the drivers while still in bootloader mode:
1.) Use the double reset method while having the device manager open.
2.) When the board entered the bootloader mode, I right-clicked on the Arduino board in the device manager as shown in this screen shot: [ http://puu.sh/iaYYC/d45153914c.png ]
3.) I updated the driver for the board.
4.) Once the update was completed, I compiled and uploaded the code. When the uploading status bar was half-way through, I did double reset again and the problem was fixed.
C.) Reinstalling the Bootloader
As a last result, you can always try to reinstall the bootloader. The tutorial is designed for the Arduino Uno, but it should work for Atmega32U4’s bootloaded with Arduino. The idea is the same but the specifics are different. Start by reading the tutorial => https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader. The first thing you are going to need is an AVR programmer. You can use a standard AVR programmer or any Arduino with the ISP code on it (the standard code will not work with the Leonardo). You will then need to connect it to the target device (i.e. LilyPad Arduino USB, Pro Micro, Fio V3, Makey Makey, or Leonardo) to reflash the bootloader. Don’t worry about the fuse bits or even the avrdude commands (they’re great, if you are installing third party stuff, but this will work just fine).
1.): Get a programmer
This you can do by following the directions in the tutorial.
2): Connect the programmer/Arduino as ISP to the Target Device
You will need to connect to the same pins to your target device (i.e. LilyPad Arduino - USB, Pro Micro, Fio V3, Makey Makey, or Leonardo). On the Leonardo you can connect it just like the Uno. The LilyPad Arduino - USB has small ICSP pins. I managed to solder wires directly to the pins for access. The Pro Micro does not have an ISP header and the pin numbers are different. Check the tutorial for location of the pins on the programmer. Here are the pins for the FioV3 Board:
ICSP Pins <=> Pro Micro Pin GND <=> GND RST <=> RST VCC <=> VCC MISO <=> D14 SCK <=> D15 MOSI <=> D16
Note: There is a silkscreen error and D17 is labeled D14 on the Pro Micro.
3.) Program Using Arduino v1.6+ go under Tools and select the correct programmer (if your programmer uses a COM port select that too), and the correct board (LilyPad Arduino - USB, Pro Micro, FioV3, Makey Makey, or Leonardo). Then select Burn Bootloader. For the Pro Micro, this will use the bootloader in the addon file, so make sure you have the correct addon file installed. You can find the latest board definitions from the SparkFun GitHub Repository [ https://github.com/sparkfun/Arduino_Boards ].
This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.
Skill Level: Rookie - The number of pins increases, and you will have to determine polarity of components and some of the components might be a bit trickier or close together. You might need solder wick or flux.
See all skill levels
If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.
Skill Level: Rookie - You will need a better fundamental understand of what code is, and how it works. You will be using beginner-level software and development tools like Arduino. You will be dealing directly with code, but numerous examples and libraries are available. Sensors or shields will communicate with serial or TTL.
See all skill levels
If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.
Skill Level: Competent - You will be required to reference a datasheet or schematic to know how to use a component. Your knowledge of a datasheet will only require basic features like power requirements, pinouts, or communications type. Also, you may need a power supply that?s greater than 12V or more than 1A worth of current.
See all skill levels
Based on 7 ratings:
2 of 2 found this helpful:
I am making a remote sensor with an XBee Pro 900 radio, and wanted 3.3V digital outputs without using level shifters. I was using the UNO, but it had 5V outputs, so I went with the Fio V3. This is definitely not as user friendly as the UNO, so I wanted to put some notes here for others and myself.
Obviously, read the hookup portion of this website. This is a different chip than the UNO, it does not use an FTDI USB connection, so you need different drivers.
As stated above, use Serial1 to talk to the XBee
With XBee Pro 900 only, you will need to remove R2 (RSSI) because it pulls this pin low making the XBee Pro 900 not work. Not an issue with other XBees (I think) but Digi decided to change around some pins for the XBee Pro 900.
The USB micro is very finicky. I found that it would re-enumerate while operating (bum-bum sound), not affecting the operation of the board, but obviously something about the communication between computer and board is not well. I also found that my computer would not recognize the device (yes, I had already installed the drivers), and I would go through a dance of resets, exiting Arduino, remove the cable to fix this. The best solution I found was that if I plugged the battery in first, and then the USB micro, the incidence of this problem decreased substantially. It also helped getting away from the “Unknown device” in Device Manager problem. I think powering up the device prior to data is necessary. A good summary of this is in https://forum.sparkfun.com/viewtopic.php?f=32&t=32342. But this leads to the next problem.
The 5V of the USB micro and the LiPo are connected together when the on-board switch is turned on, meaning the LiPo sees the 5V of the USB micro, which is bad for the LiPo. You fix this with remove of the SJ-2 jumper. This is described on this web page “http://www.forward.com.au/pfod/ArduinoProgramming/FioV3/index.html”.
When it works its great because everything I need is integrated, but it doesn’t “just work” like the UNO. I think bringing back the FTDI USB would make this much easier to work with. Sure, it means that this would be a little larger, but I bought this for the integration with the battery charger and the XBee, and it being a little bigger won’t affect my desire for this part.
1 of 1 found this helpful:
One little problem that Chris in Tech Support helped me solve in just a few minutes. Great tech support by the way!
The battery charge light always stays on even with the USB disconnected. The problem appears to be the boot loader is programming pin D13 as an output and leaving it that way. Pin 13 is connected to the charge LED but is designed to be an input so you can read it to determine whether the battery charger IC is charging or not.
If you put this line in your sketch setup() routine it fixes the problem.
1 of 1 found this helpful:
I can successfully upload code to the board but the Serial communication does not appear to work. I have worked with many Arduino based boards since v1 or their IDE so I am familiar with how to set the baud rate for both the board and the monitor. I tried different rates too just in case some were not supported ( for whatever reason ). Would love to know if I was just missing something.
UPDATE: Looks like this board uses Serial in a different way, so make sure to read up on Serial1 vs Serial usage as they suggested. Board works as expected using Serial1.
Thanks for your feedback. Because the ATmega32U4 has built in USB, the USB serial line is different than the hardware serial line. For the hardware serial line make sure to use Serial1. If you still have any questions feel free to email email@example.com and they should be able to help you out.
5 of 5 found this helpful:
This is a nice board, easy to use and convenient to experiment with due to the USB loader.
Unfortunately, little thought was put into lowering the power consumption, so battery drain is far worse that it could/should be.
I don’t feel like replacing SMT resistors, so that battery sensor alone drains the battery. Add all the bright LEDs and the board is disappointing.
I also had issues reloading the official bootloader.
I really like this board and I hope it keeps getting updates. I use it with an XBee radios for remote devices. I’ve been using the Seed LiPo Rider Pro for solar charging and it works great.
I can get the fio v3 to power down but the XBee leds stay lit. Can you power it down with the XBee pin 9 DTS going high???
Had to cut the charge tracer to prevent battery drain. No more battery monitoring :(
Good question. I would suggest getting in touch with our tech support team, they should be able to help you out.