Note | Text=Only one serial port can be active, either USB or XBee/Bluetooth. So you have to unplug the USB cable to receive serial data over XBee/Bluetooth.

XBee Installation

If you want serial support for XBee RF modems, this section is for you!

Would you like to setup a wireless communication link to your AeroQuad? One big advantage of doing this is that tuning your multicopter is MUCH easier! You can start flying your multicopter, observe it's flight characteristics, land it, update new tuning parameters, then fly again. Also, if you are doing high altitude flying, features like the artificial horizon will allow you to see what your multicopter is doing at those heights.

Please keep in mind that if you need to upload a new flight software version to your AeroQuad, you will still have to connect a USB cable to upload it to the flight controller board.

Parts list

  • 2x XBee Modems (Link)
  • 1x XBee Explorer USB (Link)
  • 1x USB cable to connect USB Explorer to computer ( Link)
  • 1x XBee Shield (Link)
  • 1x ICSP header (Link) (included in the Mega shield stackable headers kit)

Note | Text=Most XBees work in the 2.4GHz band and some users have reported interference problems with their Tx/Rx setup. If you already have a 2.4GHz Tx/Rx setup, you might want to consider getting either XBee Pro 900 RF or the extended range XBee Pro XSC directly from Digi. These both work in the 900MHz band which conveniently also leaves the 1.3GHz (1280MHz) band open for FPV.


In order to use the modems, they must first be configured to talk to each other using your computer. Download and install the X-CTU software from this site.
  1. Plug in one of your XBee modems into the XBee Explorer.
  2. Connect the XBee Explorer to your computer with a USB MiniB cable.
  3. Run the X-CTU application.
  4. You should see "USB Serial Port (COMx)" under the "Select Com Port" field selected. If this is the first time you are configuring a modem, the default Baud rate will most likely be 9600. Leave the baud rate at the default and press the "Test/Query button".

  5. If communication is OK between the computer and the modem a dialog box will appear stating this. Hit OK.
  6. Select the "Modem Configuration" tab.
  7. Under the "Modem Parameters and Firmware" section, hit the "Read" button. The application will read the parameters from your modem and will update the screen with all the information found.
  8. For the 900 series, you have to manually*** download the firmware package (Link) and install it in X-CTU (hit Download New versions... / Files...) This will fix the error message when reading the modem parameters and the proper function set will be selected. ***For some reason the update using "Download New Version... / Web..." doesn't work for the XBP09-DP.

  9. Find and click on "ID - PAN ID". Change this number to anything you want. This is the ID used between the two modems. You'll want to change this from the default in case someone else is using the default ID in your vicinity. Remember this ID because you will configure your other modem with the same ID.

  10. Find and click on "BD - Interface Data Rate". From the pull down menu, select "7 - 115200".

  11. You're done! Now select "Write" under the "Modem Parameters and Firmware" section. This will write these two critical settings to your modem.

  12. Unplug the XBee Explorer from your computer. Remove the XBee modem from the Explorer and plug that into the XBee Shield.
  13. Plug the next XBee modem into the XBee Explorer, then plug the Explorer back into the computer.
  14. Follow the same procedure above to set the PAN ID and Baud rate of the other XBee Modem.

Connection (Arduino)

You should be ready to go! Plug the XBee Shield into your AeroQuad Shield (or equivalent). There will be a row of headers on the XBee Shield that will fit into the same female header the contains the Arduino TX and RX pins. If you are an AeroQuad Shield owner, be sure to install the ICSP header to provide the +5V needed by the XBee Shield.

Once the XBee shield is connected to your AeroQuad, there are two switches that need to be configured. If you need to program the Arduino with the USB cable, move both switches to the direction of the rear of the AeroQuad. If you want to talk wirelessly over the XBee modems, then both the switches need to be moved in the direction of the front of the AeroQuad.

Note | Text=If you use this XBee shield, the serial data lines will be connected to Serial0 of the Arduino. In this case, do not enable WirelessTelemetry (this pushes serial communication to Serial3 instead of Serial0). Read the previous paragraph for switching between code uploading and data transmission modes.

That's it, now you are ready to connect wirelessly to the AeroQuad Configurator!

Note | Text=If you are using Flight Software version 2.3 or newer, you have to connect at a baud rate of 111111 to avoid disconnections and data loss!

Connection (AeroQuad32)

For the XBee installation on an AeroQuad32 board you do not necessarily need the XBee shield but you can use it.
The connection to the AeroQuad32 board will be made by 4 wires from the XBee to the board:

* See picture for reference

Solder 4 wires to those connection points (either on top or on the bottom). If you do have the XBee shield, you might want to use that, in that way you can solder the wires to the open holes on the shield and avoid soldering your XBee module. You can wrap it in Shrink Tube so there won't be any short circuit.

The next step is connecting it to the AeroQuad32 board.

The following paragraph only applies to the AeroQuad32 v2 board. You will find all needed conections (3V3, GND, RX1, TX1) bundled in the connector labeled "SER" on the right side of the AeroQuad32 v2 board. Connect the wires of this connectors to the corresponding pins on the XBee module.

The following paragraph applies only to the AeroQuad32 v1 board. On the schematics of the AQ32 board search for the four needed connection in table above. They will be on the left-top side.
Now connect the wires accordingly using a JST plug or just solder it.

With AeroQuad software version 3.2 and greater, you can enable wireless telemetry on the AQ32 in two ways. If you are compiling the code yourself, you must uncomment the line "#define WirelessTelemetry" from the file "UserConfiguration.h" and recompile. If you are using the web compiler, click on "Use serial3 instead of USB (for xbee/bluetooth etc)" (Don't get confused by Serial3, that's a mistake. Serial1 must be used instead as described earlier.) and upload again (see picture below). Your AeroQuad32 is now ready to communicate via XBee, USB is now disabled!

Further discussion, troubleshooting information, etc.

Check out the dedicated thread in the AeroQuad Forum.

Bluetooth Installation

If you would like to use Bluetooth on your AeroQuad, this section shows you what you need and how to set everything up.

Attaching Bluetooth to your Shield

You have three alternatives:
  1. Stackable Bluetooth Shield v2.1 (Link)

  2. Bluetooth to serial port module: BTBee (Link), which you have to plug into the XBee shield v1.0 (Link)

  3. Serial Bluetooth RF Transceiver Module (Link)

Hardware Notes

There are different firmwares for these little modules out there:
  • Version HC05 needs pin 26 (key) to be pulled up with a 10k resistor to enable command mode to accept your AT command like this one (alternative 3).
  • There are also HC04 and HC06 versions of the firmware that have different needs for getting into and out of the command mode.
  • If you have a HC04 you have to send the AT commands to the module within the first 60 seconds and before it's paired with anything.

You also should copy and paste the AT commands into your terminal window because typing them maybe too slow.

Software changes

Depending on your specific hardware model, you may have to insert some Bluetooth AT modem commands into the AeroQuad code to initialize it, which are shown below. More information regarding the AT commands can be found here and in your Bluetooth module's manual. You can find an exemplary code snippet below which needs to be customized to your needs. Typically, those statements are placed in the "setup()" function of the source code.