XBee Shield

Replacement:WRL-10854. The new version of this board uses a more robust MOSFET level shifter instead of diodes. This page is for reference only.

This new revision fixes some minor spacing and labeling issues, but functionality remains the same.The XBee Shield simplifies the task of interfacing an XBee with your Arduino. This board mates directly with an Arduino Pro or USB board, and equips it with wireless communication capabilities using the popular XBee module. This unit works with all XBee modules including the Series 1 and Series 2 (and 2.5), standard and Pro version. This is SparkFun’s own design and is a distant relative to the official XBee Shield from Arduino.

The serial pins (DIN and DOUT) of the XBee are connected through an SPDT switch, which allows you to select a connection to either the UART pins (D0, D1) or any digital pins on the Arduino (D2 and D3 default). Power is taken from the 5V pin of the Arduino and regulated on-board to 3.3VDC before being supplied to the XBee. The shield also takes care of level shifting on the DIN pin of the XBee.

The board also includes LEDs to indicate power and activity on DIN, DOUT, RSSI, and DIO5 pins of the XBee. The Arduino’s reset button is brought out on the shield, and a 12x11 grid of 0.1" holes are available for prototyping. The shield does not come with headers installed; we recommend the 6 and 8-pin stackable headers. The XBee module is also not included.

Not sure which XBee module or accessory is right for you? Check out our XBee Buying Guide!

Note: A pull-up on DIN is required for this board to work properly. Thankfully, Series 1 and Series 2 XBee modules have their internal pull-up enabled by default. You will need to manually enable the pull-up on the 900MHz series.


  • Mounts directly onto your Arduino
  • DIN and DOUT pins of XBee can be connected to either the UART pins or any digital pin on the Arduino (D2 and D3 default)
  • 3.3V power regulation and level shifting on-board
  • 12x11 grid of 0.1" spaced prototyping holes
  • Reset button brought out
  • Power, DIN, DOUT, RSSI and DIO5 indicator LEDs


Customer Comments

  • Question: please let me know whether I would be able to stack this xbee shield with SparkFun GPS Logger Shield (GPS-13750).

    If so, please let me know if any modification needed. Thanks

    • If you check the schematics you’ll see that both boards use serial communication. The Arduino Uno only has 1 hardware UART (although some other Arduinos have more). Both boards can connect to the hardware UART, but they also both have a switch to connect them to pins D2/D3 to use for software serial. Software serial is often used when you have more than 1 serial device. It is also often used to prevent issues when reprogramming the Arduino since programming also uses the UART pins. In software serial you do have to do some setup and make sure your data is being sent/received from the correct serial stream, but otherwise they are pretty similar. You should be able to run one board on hardware serial and the other on software serial, just make sure to disconnect the hardware serial when programming the board.

  • WRONG! - See update below.
    Question / observation: Regarding the diode between the arduino transmit pin and the XBee receive (DIN) - Isn’t it pointed in the wrong direction?
    Observation 1 from the schematic - The diode is “pointed away” from the XBee module on the DIN pin, thus preventing the incoming signal from outside the module from reaching the receive pin.
    Observation 2 from a real XBee module & a bus pirate - The module doesn’t receive communications from the arduino or bus pirate when appropriately connected. The XBee module transmits just fine, but never responds to commands - because it never receives them. I placed the bus pirate receive pin against the XBee module’s DIN pin and it doesn’t receive anything. Then I short the diode and it works just fine.
    Update - I have been corrected. The behavior the XBee expects is for the DIN pin to be pulled LOW, not pulled HIGH so the Diode is correct! See: http://forum.sparkfun.com/viewtopic.php?f=13&t=21154

    • I have an Xbee shield, XSC Xbee, and a 5V Arduino. I could receive cleanly, but anything sent was received as a zero (0x00).
      The diode on the DIN pin was the problem for me and many others.
      See these other forum posts:
      My solution was to replace the diode with a 100 ohm resistor. 500 ohm also worked.
      I prototyped a voltage divider to get 3.3V instead of 5V, but the XSC data sheet says it can handle up to 5.5V on DIN. So, I just used the resistor to limit the current.

      • I seem to have learned an important lesson about reading the comments before buying. This shield simply doesnt work with the Arduino UNO - no data is received by the XBee on DIN, unless a change is made like the one mentioned above.
        Sparkfun should pull these shields until they are able to fix the problem. I have switched to a 4 year old XBee shield from one of your competitors, which I pulled from another project, and everything works fine now.

        • These shields work fine with the Uno, the level shifting method does require the pull-up resistor on the XBee be enabled, which it is by default on the Series 1 and Series 2 modules (it needs to be configured on the 900Mhz modules).

        • I removed the diode and replaced it with a 470 ohm resistor. In my case I’m using the 900mhz Xbees. With this change I can transmit and receive. I only had 0802 sized resistors which are a bit too big. Using the newsoftserial library with the switch set in the ‘bit bang’ mode I can debug my sketches using feedback to my PC from the USB serial port.

          • Is there still a problem to receive data from the XBEE on an Arduino UNO? I just cannot get anything to be received, though I can send fine.

  • AwkwardPlacementOfLogo Lolz

  • Is this Xbee shield compatible with the new Arduino Uno R3?? and also with XBee series 2 moduless?

  • Just to be as clear as possible about this product, and the other regulated XBee boards that Sparkfun sells (this is just their “Xbee Explorer Regulated” in shield form, really).

    It does NOT work with Xbee PRO XSC unless you can fine soldering that tiny black SMD diode off by itself on the opposite side of the board to the switch. The instructions to use X-CTU to change an internal pull-up do not apply to the XSC Xbee.

    The most horrible solution, but it works, is to simply de-solder the diode carefully, without destroying either of the two pads it sits on, then bridge the gap with a small wire. You need a very fine tip soldering iron to do this and good eyes or a loupe. Without this change when the Xbee sitting in this shield transmitted, the remote got hex 00 (displayed as a “.” in X-CTU) for every character. I’ve no idea if this diminishes the life of the Xbee versus replacing the diode with a resistor.

    After this change, I could write a loop-back sketch - read and write while available - and using another Xbee pro XSC (plugged into an Xbee explorer), use X-CTU to do the “Range Test” successfully. All “good” packets no bad ones.

    tips: * using this shield with a Uno (with only one UART) and having the UART available for driving the USB port, say for debugging, you need to have the switch set to “DLINE”, then you can use a bit-banging serial library like NewSoftSerial to talk to the Xbee. warning: NewSoftSerial is really a half-duplex serial library, it cannot send and receive simultaneously without corruption.

    • Same goes for using a Roving Networks RN-XV (XBee form factor wifi module) - I was very frustrated that I could only send data one way. I was able to remove the diode and add a wire to bridge the gap.

      My iron was NOT up to the task (hmm… xmas is coming) and my eyes hurt, but I got it done. What a pain.

      I cannot recommend this product, or the related XBee Explorer Regulated (that I did the same surgery on.)

  • Could Sparkfun us forum style software, because all this information is essential to using the product, but this comment thread is unorganised and unsearchable.

    • We have a forum here. If you have questions about the shield and can’t find your answer in the comments or in the forum, please email techsupport@sparkfun.com. They’ll be able to help you out and provide information in a more concise format.

  • I wanted to use this shield for a 3.3 Volt project, and found out that on the new revision there are proper level shifters. Could someone from your staff please update the schematics and photo’s?

  • It would seem to be useful if the prototyping area of your Ardumoto lined up with the prototyping area of your XBee shield. We’ve added stackable headers before between stacked prototyping shields and it’s a convenient way to route additional wiring between boards and still alow the boards to be pulled apart. If your prototyping areas aligned we could do this. Maybe there’s a reason you couldn’t with this board, but maybe you could consider this for the future.

  • Can somebody explain to me whether there is any practical difference between this shield and this https://www.sparkfun.com/products/9132 (the Explorer Regulated module). I want to use this with a netduino, and am wondering if both will work?

  • Is it the case that I shouldn’t use the serial monitor and when the DLINE/UART switch is in the UART position? I’m doing it and I don’t have any problems. But from reading the comments, it sounds like I should leave the switch in the DLINE position, and configure my sketch to use pins 2 & 3. I’m a bit confused about this. In this method, are pins 2 and 3 communicating with the Xbee or the serial monitor. How exactly to do I change my code to use pins 2 & 3? Also, is this change not possible with the Leonardo and Mega? One of the comments says something about not all pins supporting change interrupts. I assuming this means Leonardo and Mega can’t use Pins 2 & 3.

    Currently I’m using XBee Series 1 and the Uno with IDE v 1.0.1

  • don’t you think the link to the 6 and 8 pin stackable headers should be linked to the stackable header kit?

  • Hi, I am working on a project in which I don’t have a USB connector and I have to connect the XBee module, does anyone know of a model which just works with uart? (just RX and TX pins). I know that this one can use uart but space is a problem. Thanks!

  • can this KIT be used with AVR ATMEGA series ?

  • Defaulting to D2 and D3 on the Arduino is no longer very useful - the MEGA and Leonardo Arduinos cannot support software serial RX on just any pin.

    If you don’t want to use the main serial UART this shield allows easily switching the XBee’s DIN and DOUT to pins Digital 2 and Digital 3 on the Arduino. But this means using the SoftwareSerial library and the library has the following known limitations regarding what pins can be used:

    From the ‘SoftwareSerial’ library link in Arduino 1.01 (http://arduino.cc/en/Reference/SoftwareSerial)

    • Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69
    • Not all pins on the Leonardo support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).

    I think that D2 and D3 as the choice for alternate DIN and DOUT is outdated.

  • It would be nice if this shield had a proper logic level converter on it. I was finally able to get it to work with a Seeed Studio Bluetooth Bee module by adding a 10K bodge resistor from 3.3v to the Xbee side of the ‘problem’ diode. The module specifies that it has a ‘weak pullup resistor" on the DIN pin but that was apparently not enough to get the logic flow to work with the level shifting technique used on this board.

  • It would have been nice if they had thrown $1 worth of headers to at least allow me to get started. As it is, I can’t use it. And yes, I just realized they tell you and it seems to be customary that SF shields don’t have headers. Still..

    • We get this a lot. The reasoning behind not populating the board with headers comes down to flexibility. We could put on stackable headers, so you could add a shield on top, but what if you want the sheild to be slimmer? Without stacakables, you couldn’t add anything on top.

      Plus, adding headers would add significantly to the end cost, since we have to pay actual people to solder them on, versus a pick-and-place machine.

      Is there any reason you can’t solder your own headers? Our cheapest soldering iron is only $10.

  • I was a bit concerned with all the comments about it not working but it has worked out of the box for me. I got two series-1 xbee modules, an xbee shield, and xbee explorer. I used x-ctu to confirm the modules worked and updated the firmware. Using the default settings I am able to send/receive data just fine. I am using the DLINE setting with pins 2/3 (rx/tx) and software serial to free up the uart for debugging. The only downside is the softserial is half duplex which means corruption when sending and receiving at the exact same time which is easily fixed with message checksums and resend requests for my application.

  • What does SJ2 do on the schematic?? Its mentioned no where, does it enable wireless resets to allow sketch uploading?

    • It is indeed for wireless sketch uploading!! Here’s Nate’s tutorial on the subject from a while back, there you’ll find the settings and modifications needed for the sending and receiving XBees. Wireless sketch uploading is still not 100% reliable, so Google for other efforts and advice as well.

      • Thanks Mike i do appreciate the reply. I have read Nate’s tutorial quite a few times as well as many others including ladyala but none mention this SJ even the tronixx one that uses the sparkfun board and to not see it once mentioned on any of the shield board comment pages, including retired boards, made me doubt myself.

        Thats why i was so confused, i guess all those tuts are that old… So just solder that bridge and it “should” try to wireless upload. I understand its not 100%.

        • As you’ve seen, you need some method to get the reset signal functioning across the radio link. The XBee’s I/O pin linking functionality is used to do this. Nate’s tutorial covers routing the DTR signal from the PC’s USB port to an input pin on the PC-side XBee, and then routing the matching pin on the output-side XBee to the reset pin on the Arduino. The solder jumper closes this connection (you normally wouldn’t want the reset pin connected to the XBee to avoid accidental resets). I hope this helps, good luck!

  • I’m trying to upload a code to my APM and I’m getting this message: avrdude: stk500v2_getsync(): timeout communicating with programmer avrdude: stk500v2_command(): failed miserably to execute command 0x11 avrdude: stk500v2_disable(): failed to leave programming mode

    Does anyone know how to fix this?

  • As delivered this does not work with the RN-XV WiFly Module. Like others have stated the diode on pin 3 causes problems. By bypassing it the RN-XV WiFly Module works with the XBee Shield.

    • I am not sure whether that’s the safest way to connect the RN_XV, by doing this, I guess you are exposing your receive pin to 5V signal where-else the specs say 3.3V. I having connected my RN_XV using a converter and it works like a charm with Wifly Serial Lib, this translator too should work.

  • Hi,

    This new shield works whit Chip Kit Uno32 whitout make some modifications?

  • So, I wanted to use the xbee shield (with arduino uno) as a USB interface (basically an xbee USB Explorer). And it works, although at 9600 bps about half the bytes are corrupted. Any idea what’s going on? I suspect software serial, although it seems to work well in my other projects. I have included the sketch below, any help?


    define rxPin 2

    define txPin 3

    SoftwareSerial mySerial(rxPin, txPin);

    void setup() { Serial.begin(9600); mySerial.begin(9600); }

    void loop() { if (mySerial.available()) { Serial.print((char)mySerial.read()); } if (Serial.available()) { mySerial.print((char)Serial.read()); } }

    • Sounds like your'e dropping bytes. Assuming you are NOT using Arduino 1.0, Get the NewSoftSerial library and use it insted of SoftwareSerial. It can do higher baud rates than SoftwareSerial.

  • Hey Guys,

    When i plug my board on my uno and try upload any code i receive this message.

    avrdude: stk500_recv(): programmer is not responding

    Anybody can help me ?

    • yep. xbee is sharing the UART. code is trying to load, but it’s interfering with the xbee. unplug the shield and try again.

  • How is it possible to use the external interrupts (pins 2 and 3) with this shield? Thanks.

    • You can use pins 2 and 3 as long as you’ve configured the board to use pins 0 and 1 as the serial port. See the schematic for details.

  • Hey folks. So, if I want to use the DLINE setting instead of UART, but I don’t want to use pins 2 and 3, how do I change the default to other pins?

  • A few comments on this board and its limitations.
    1. The diode is on the board installed correctly, it is a quick and easy level shifting method that does work. When the board gets a low signal the diode acts as a short pulling the pin low. When the board gets a high signal it relies on the XBees internal pull-up resistor to pull the pin high (at the appropriate voltage level). The Series 1 and Series2/ZB modules have this pull-up enabled by default. The 900MHz modules need to have the pull-up enabled, but it is available. Especially with all the new chips with the XBee footprint coming we may change the design in the future, but for now as long as your chip has a pull-up resistor available this shield should work fine. 2. If you want to connect your XBee to your computer you will need an XBee Explorer. You can not remove the chip from your Arduino and just plug in the shield. There are many different XBee shields out there and Sparkfun’s is just one of them. On some of these shields you can, but doing so removes other features from the board which we decided to keep.

  • Okay, I am trying a simple exercise with this plugged in to a duemillenove. I am running the PhysicalPixel sketch.

    I am powering the assembly off USB.

    I am not able to get the arduino’s LED to respond to any signals. Other than installing the headers, is there any other wiring I am supposed to do? Will this work with it plugged in to USB?

    Sorry to be so elementary.

  • Is there any documentation about actually getting this to work with the Arduino Uno? I have read a few sites that say they are able to communicate with it but I have had no such luck trying their approaches.

  • Hello There,
    I got this xbee shield and the series 1 xbee chip antenna.
    I am trying to make two xbees talk to each other. So I used two arduino uno boards, two xbee antennas and two xbee shields. While I’m trying to upload code to the arduino boards, it always fails to connect the board. But if I take the xbee shield and xbee off of the arduino board, I can upload the code to the arduino board without any problem.
    Does anyone know what might be causing the problem? I tried disconnect the board and then connect it again, I also tried pressing the reset button. Neither worked…
    Thank you!

    • I think the Xbee affects the TX and RX pins. You could try switching the serial selector switch or whatever its called. That should disconnect the Xbee from the TX/RX pins. Switch it back when you are done uploading.

  • can I get a BOM for this board? Some of these SMD parts are hard to find.
    Also why is the price so high? I could probably spin off 3 of these boards for the same price…just seems like its too high for a board with a couple smd parts on there. Drop it to 10 and you got a deal.

  • does this work with xBee WiFi ?

  • Is this also compatible with Series 2 ? I mean with XBee 2mW Wire Antenna - Series 2 (ZB) - WRL-10414

    • yes, there is only a small firmware different between the series 2 and 2.5, but the hardware is the same.

  • Is the XBee shield compatible with the uno?

  • Hi,
    Can I combine this shield with Ethernet Shield (sku: DEV-09026 – http://www.sparkfun.com/products/9026) on Arduino Uno?
    I have this Xbee Shield (http://loja.lusorobotica.com/shields/39-arduino-xbee-shield-s-xbee.html) and it uses SPI like Ethernet Shield, so I can’t use both together.

  • In case someone wondered, the regulator used by the official Xbee shield is the MC33269. Its datasheet can be found at www.onsemi.com/pub/Collateral/MC33269-D.PDF.

  • I see that the shield protrudes slightly onto the power/USB jack of the Arduino UNO. With the 8 pin headers, the TX and RX pins seem to be suffering from a lose connection. I have a feeling this is because its slightly lifted towards the protruding end. Anyone facing this problem and if yes, how did you overcome? TIA.

    • I am having a slightly different problem due to the shield protruding onto the power and USB jacks when installing into an Auduino project enclosure (PRT-10088). The top cover of the enclosure will not seat down completely. I haven’t powered anything up yet, so I may end up with the same TX and RX problem you are having. As for a solution, I am considering filing out a small notch in the edge of the XBee shield so it clears the USB jack housing, then filing off the top of the power connector housing just enough to allow the XBee shield to sit down a little more. This is an indication the XBee shield design is not very professional. I am not happy about this. Does anyone at SparkFun have any better solutions?

      • Make sure the headers are soldered on. The shield fits fine if the headers are soldered on.

  • Hi all. Does anyone have connected this shield to Arduino Mega? I’ve not used Mega, so I’m not sure if this field fits on Mega. Another question (by the way), does anyone know if I can connect several shield to Arduino Mega?, by example: XBee shield + GPS shield + Cellular shield. Thanks in advance

    • You can stack as many shields as you want assuming none of the same pins are being used. All 3 of these shields use serial ports, because serial is common all 3 let you use either the default hardware serial pins 0,1, or use pins 2,3 using special code to make them look like serial. The Mega actually has 4 hardware serial lines so you should be able to connect them with a little bit of modification. If you have any other questions feel free to email us at techsupport sparkfun.com

  • which GND is this device using, the digital or one of the analog ones. i need to know because i am bread-boarding this shield

  • Great shield…works well, but WHY aren’t the header pins included? It can not be used without the pins, so why are they separate?

    • Maybe you want short ones to go with your Arduino Pro, maybe you want long ones for the Uno, maybe you want stackable, etc, etc, etc.

  • I’m very disappointed in this product. I purchased it due to the reputation of SparkFun, but the product looks like it was hastily designed. I use the DLINE position of the switch to free up pins 0/1 for other serial transmission, but this causes XBee transmission over pins 2/3! Why default to the only 2 hardware interrupt pins available??? I know we can desolder the “2” and “3” points adjacent to pins 0/1, but why default to pins 2/3 in the first place? Also, as mentioned in previous comments the onboard voltage regulator is only rated for 150mA, but the description claims support for XBee Pro (which is rated at 215mA)!!! After as many revisions that this product has had you’d think that major issues like these would have been addressed. Makes me reconsider future purchases from SparkFun :(

  • I am looking at the Schematic and am woundering where the three jumppers (SJ1-SJ3) are located physically on the board. I see what looks like one of the jumpers at 11 O'clock from the DPDT switch, but where are the other two jumpers?

  • I don’t know if someone has some problem with Xbee baudrate configuration using Xbee Shield with an Arduino board… anyway you can simply solve the problem with the NewSerialSoft library using Arduino as a bridge between Xbee and PC. You can use the test example from the library changing both the real serial and the software serial baudrate to the Xbee baudrate (9600 by default). Note: the switch on the Xbee Shield must be on “DLINE”!
    I hope this can be useful. :)
    EDIT: this method only works at the default baudrate of 9600 (or less)… I’ve done some tests

  • I’m new at this, just a simple question… What do I need to do to connect the xbee to the arduino? I mean just solder pins to the shield and plug it on the arduino? or something else is needed? thanks.

    • You need 2 arduino stackable or normal male headers of each six and eight lengths. You also need an XBee.

  • Hi Everyone,
    Maybe this is a noob question, but ill answer…
    How i know in which PIN this shield connect the XBee to my Arduino? I know to transmit and receive data from XBee im only need 4 connections. Ground, 3.3V, Transmit and Receive.
    Im guess this should be…
    Pin0 Receive
    Pin1 Transmit
    GND to GND
    V3.3 to V3.3
    Im right?

  • The voltage regulator(MIC5205 Series 3.3 V 150 mA) on the board are only rated up to 150mA while the xbee pro versions needs 215mA. Beware if you buy as this board will not have the power needed to make a strong signal. I am having to resolder new voltage regulators to deal with this low amp output.

    • Or the full 800 mA of the Xbee Pro 868… From the specs: “Transmit current: 500 mA typical at 3.3V (800 mA max)”

    • If used with an XBee Pro will it still be able to make a connection with another XBee Pro, or is the signal too weak for that?
      And what voltage regulators do you recommend as replacement?

    • Thanks for pointing this out. Parallax does the same thing with there modules.
      Sparkfun: Could you please incorporate a reg that can handle more current and in the mean time include the caveat in the description noting that this will not run the Pro at full power.

  • Does Xbee Shield WRL-09976 work with Arduino Uno? The doc says just Pro and USB shield. If not, what interface should I use?

    • ah… sorry, answered my own question.. I see that “USB board” is an inclusive term… includes UNO, etc.

  • Suggestion, a version of this sheild that doesn’t do the 3.3 regulation or conversion. I am using the 3.3v based arduino so don’t need the extra parts.

    • Question - why is the 3.3V regulator needed at all? The Arduino Uno and other related boards already do this conversion and offer a 3.3V pin. What am I missing?

      As discussed below, the 3.3V regulator causes a problem by limiting current which impacts performance of the Pro and XSC devices. It appears to me that the 3.3V coming from the Arduino offers 500mA which would also solve that problem.

      Please, someone let me know if I’m off here so I don’t fry my board by trying this. :)

      EDIT: Never mind, I see now that the 5V pin offers 500mA, but the 3.3V pin only offers 50mA.

  • What regulator do you use on the shield?
    What current rating do you suggest?
    As for the diode D1 is a 4148 fast enough?

  • Will XBee ever change their pin spacing to .1"?

Customer Reviews

No reviews yet.