SparkFun will be closed Nov 26th and 27th for the Thanksgiving holiday. Orders placed after 2:00pm MT on the 25th will ship out Monday the 30th.

Creative Commons images are CC BY-NC-SA 3.0

SparkFun XBee Shield
project on
hackster.io logo
hackster.io project

Windows IOT - Automate your power outlets
by Syed Sanoor

$ 14.95

added to your
shopping cart

In stock 275 in stock
14.95 1+ units
14.20 10+ units
13.46 25+ units
12.71 100+ units


Description: XBee radios are an awesome way to add wireless capability to your Arduino project and now it’s even easier with the SparkFun XBee Shield. The shield form-factor mates directly with any dev board that has an Arduino standard footprint and equips it with wireless communication capabilities using the popular XBee module. This unit works with all XBee modules including the Series 1 and 2, standard and Pro versions.

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 and DOUT pins of the XBee. In the latest revision the diode level shifter is replaced with a more robust MOSFET level shifter.

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 9x11 grid of 0.1" holes are available for prototyping. The shield does not come with headers installed; we recommend the Arduino Stackable Header Kit. The XBee module is also not included.


  • 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 MOSFET level shifting on-board
  • 9x11 grid of 0.1" spaced prototyping holes
  • Reset button brought out to shield
  • Power, DIN, DOUT, RSSI and DIO5 indicator LEDs


Recommended Products

Customer Comments

  • When used with a Intel Galileo (Gen1) board we’re having difficulty transmitting data from the Galileo to the XBee. We can receive from XBee ok. We’ve verified that the same shield works fine in both directions when used with a genuine Arduino Leonardo R3. We have also verified that the Intel Galileo works fine in both directions when the XBee is used with another manufacturer’s shield.

    Looking at signals reaching the DIN line on the XBee, we get a 3.3V (or thereabouts) level with no activity on line. When transmitting data to the XBee, the voltage alternates between 3.3 and about 1.5V (approx), not 3.3 and 0V as expected. Initially I thought that we had older boards which I know had some level conversion problems, but these are recently purchased WRL-12847. Any suggestions?

    • I had a look at the level converter circuit and had a hunch the 1k resistor values (R7, R8) were too low (sending too much current into the Intel Galileo UART TX pin while low). I repaced R7, R8 with 6K8 and it’s working now.

  • when you buy this use can use stackable headers PRT-11417 you will need 1) six pin ; 2) eight pin; 1) ten pin.

  • please note the xbee hook up guide provides instructions for the DLINE switch actives pins 2/3 for rx/tx. This means that the uno UART serial is separate from the data to/from xbee.

    also i found it good for debugging to use the tall headers on the arduino side - leaving about .25" exposed for probes or female jumpers.

    had buffering problems. xbee can stream data at up to 80Kbps. Console baud rate is 9600 bps. Arduino has 64 byte buffer. Xbee radio buffers are 100 bytes in size. so some kind of flow control is needed to do more than the cute little console to console typing demo.

    now switching to newSoftwareSerial(2,3) and experimenting with that.

  • And one more suggestion for a future revision: Instead of connecting to pin 2 and 3, connect to pin 8 and 9. This makes it easier to use the shield with AltSoftSerial, which is a lot more reliable than SoftwareSerial (and the latter doesn’t care about the pins used). Also, this frees up pin 2 and 3, which are interrupt pins, so commonly used on other shields (like ethernet or wifi).

  • One more suggestion for a future version: The newest S2C XBee modules support being used as an SPI slave instead of using a UART. Given the lack of a free UART on most Arduinos, it would be good if there was a shield that supported this, possibly using switches or (solder) jumpers.

  • I tried some fiddling with jumper wires (pin 0 to 3, 1 to 2) to allow my computer to talk to the XBee module, through the USB-to-serial adapter on my Uno. This does not seem to work and I presume this is because the voltage converter on this board uses 1k pullups, while the Arduino Uno also has 1k resistors in series on the TX and RX lines (between the USB-to-serial adapter and the pin header, not between the pin header and the 328p). Together, those form a 50/50 voltage divider, breaking transmission.

    Any chance that a future revision of this board could use bigger pullups to enable this trick to work?

  • Will this work with an Arduino that is 3.3v such as the Zero? I’m guessing the regulator would regulate the 5v out of the zero to 3.3v for the xbee but would it level shift the output of the xbee back up to 5v which could possibly damage the zero as it is a 3.3v arduino?

  • Is this shield compatible with the Arduino Due?

    Just tried it today, it is working with the Arduino Due.

  • Anyone know what the diodes do on the board by the the wee switch, are they just there in case the board is incorrectly connected, what would be the implications of removing one of them?

    Also, does the board only use PINS 0,½,3 and 5V and a ground or will there be other pins connected aswell? Also any idea which ground so I could measure total power draw of the board and xbee?

    • Looking at the board and the schematic I’m not seeing any diodes (other than LEDs). The board only uses 0,1,2,3, 5V, and GND. All the pins are physically connected to the Arduino so anything that is plugged into those pins should work. All GND pins are electrically connected so you should be able do any measurements on any of the pins.

      • They might not be diodes, they just looked that way, there just above the Dline/UART switch, there is two of them with a small 5 pin IC between them

        • The 5 pin IC is the voltage regulator. The part just below it is C3, and the part above is C1. These are 10uF decoupling caps on the input and output of the regulator.

  • I am using this shield with Arduino MEGA. I am unable to use Digital Pin 11 for PWM. Is this normal?

    I would like to use a LCD and a RGB LED with this shield. I don’t think it is possible.

    • That is not normal. The XBee shield only connects to D0 and D1 or D2 and D3. Unless you are using software serial and that is causing interference with one of the timers I’m not sure why that we be. Try removing the shield and running the code and see if you are still having problems. If so try emailing techsupport@sparkfun.com and they should be able to help.

  • URGENT! I have bought one of the older version of this stackable xbee shield WHICH DOES NOT HAVE SCL AND SDA PINS, I need to use them with my xbee to transmit gyroscope data wirelessly using the SCL and SDA.. HOW CAN I REVIVE THEM? (some sort of jumper wiring? how?) I am sorry i am kinda new… hope you guys help! Thanks! PLEASE!

    • The SCL and SDA pins are just duplicate pins. On the Uno or Redboard those pins are connected to A4 and A5. On the Leonardo they are connected to D2 and D3. You can always try just connecting to the A4 and A5 pins on the board (assuming you are using an Uno or Redboard).

      • Now I have another question, how should i put for the switch on the Xbee Shield, as I know the switch between UART and DLINE are actually involving pin TX-RX and D2 D3…. I think i messed up there when i was uploading codes. I got it working once when I upload the example [serial.ino] codes i got from the L3G library (Github), but I was not sure what i did with the switch. Help! :(

        • When you upload code to the Uno or Redboard it does so over the serial lines (RX/TX). If there is something else on those lines (even it if it isn’t trying to talk) this will mess up the communication and your upload will fail. So, if your XBee is installed on the shield flip the switch to DLINE for programming to disconnect the XBee from the serial lines. For running your code it depends, if you are using hardware serial in your code flip it to UART, if you are using software serial on pins D2/D3 then flip it to DLINE.

          • Thanks. I should mention that I am using Leonardo actually. So I simply just added a ‘1’ behind the “Serial” in Serial.begin and Serial.print commands in the serial.ino codes since I am trying to use Xbee to wirelessly send out data and debug on my laptop (attached with another Xbee). As such: … Serial1.begin(9600) … Serial1.print((int)gyro.g.x … Does doing this means I am using hardware serial thus I am using TX RX? and is that why when i connect the gyro to D2 and D3 for SDA and SCL pins, nothing is read?

            I remember that when it is working correctly, the DOUT led on the XBee shield should be indicating every Serial1.print command, right? and indeed I don’t see it ever lit up.. so that is the problem? Xbee is unable to send out data. Why is that so?

            • So the Leonardo is much different. Unlike the ATMega328 based board it uses USB to program the board. The hardware serial pins are still in the same place, and you can still use D2/D3 for software serial, but this option isn’t needed as much. Because the code is uploaded over USB though it doesn’t actually matter where the switch is. The shield should not affect your ability to upload. If you are using I2C on D2 and D3 you will definitely want to keep the switch in the ULINE position so you aren’t interfering with the I2C communication. As for the problem it’s hard to say, your I2C might be hanging and so nothing is sent, your XBees might not be configured right, etc. Try the debugging without the XBee shield and Serial.print statements and see what shows up in the serial monitor. If you are still having problems try emailing techsupport@sparkfun.com

  • The description says there is a SPDT switch, but AFAICS that should be DPDT (there’s two lines that are being switched, DIN and DOUT, so that’s two poles).

  • Dimensions of the shield measured with the calipers:

    width = ~53.96mm, about 2.12in
    length = ~60.26mm, about 2.37in
    height = ~6.32mm, about 0.25in (measured from the bottom of the board to the top of the XBee header sockets)

    This is without any header pins soldered on the shield.

  • Does this shield allow wireless communication between two Arduinos? For instance, (Arduino+Shield+XBee) <- wireless -> (Arduino+Shield+XBee). Thank you.

    • Yes, XBee provides a range of radio including ZigBee mesh networking. To learn more, check out Robert Faludi, “Building Wireless Sensor Networks”, available through SparkFun here: https://www.sparkfun.com/products/10324 (also available directly through O'Reilly).

  • Perhaps a foolish question but I was wondering if I’d have any problems using this Xbee shield in conjunction with a libelium Xbee shield? Or is it necessary to have two shields of the same make?

    • If you wanted them on two different Arduinos, you shouldn’t have any issue as long as you program the Arduino appropriately for the shield on it. From a quick Google search of the other shield’s specs, you may need to do some pin configuration to get them both onto one Arduino. And you may run into spacing issues and RF interference between the shields. I’d recommend instead going with something like the Series 2 XBees, so you can then just create a mesh network instead of needing multiple XBees on one Arduino.

      • I’ll take your advice then. That’s about as much as I expected anyhow. Thanks for your response.

  • My XCTU can’t discover my Xbee Module when I plugged it to my Arduino Leonardo using the exact same shield shown here. It can only detect a com port where the Leonardo is at but XCTU can’t find my Xbee when it searched for that com port. Why? Helps! Urgent! Thank you all…

    • XCTU expects to find an XBee directly connected to the computer. It cannot talk to devices attached to Arduinos attached to the computer.

      So you’ll need at least two XBees, one connected to the computer (e.g. in coordinator mode), and the one attached to the Leonardo. Then the Leonardo can talk to the computer through the XBee, and XCTU will be able to detect both XBees (one through the serial port, the other through the first one’s mesh network).

  • Hi Everyone. I have a question. Does possible to remote programming arduino via this shield and xbee seriers 1 ?

    • Yes.

      You will need to connect DTR on your programming cable to one of the digital IO pins of the source XBee, and make sure the corresponding pin on the destination XBee is connected to the Arduino’s reset pin.

      The Series 2 XBees do not transmit pin levels when in AT mode, and you can’t load new programs onto the Arduino in API mode.

  • Hi, you can buy Bluetooth 4.0 Bee which is Compatible with Xbee And Wiressless program here: http://www.elecfreaks.com/store/products_new.html

  • I am using this shield and configuring xBee s1 with SoftwareSerial pins 2,3. I also have a MPU9150 connected to Analog 4,5 (SDA,SCL). I am also trying to control two servos at PWM pins 9,10. I am experienced odd behavior when xBee is reading in data concerning the Servos. at a 9600 Baud rate for the xBees, I experience (every 4 seconds) an odd jerking of the servos that I cannot seem to pinpoint the issue. I have seen online that there may be an issue using SoftwareSerial in conjunction with Servos in that it may disable interrupts for a brief period of time. Is this still the case? Does anyone have successful use cases of xBee and servo configurations that I can reference and perhaps seek guidance from? Thanks!!!

    • Also try changing pins around. The ATMega328 has a certain number of timers. When the timer is being shared by things like software serial and servos you might get some weird thing going on. Sometimes just moving things to different a different pin that uses a different timer helps (see ATMega328 datasheet for more information about timers).

      • This has proven unsuccessful. Would you, you another, know that switching to use UART (pin 0,1; tx, rx) eliminate the issue? Is there an example of using the UART with this particular shield? Do I simply switch to UART on board, then eliminate the SoftSerial initialization from the code and use Serial just as I would for the console, i.e, Serial.read()? I have not tried this yet just seeking more guidance. Thanks!

  • I’m having trouble with this shield and the Triple Axis Accelerometer and Gyro Breakout - MPU-6050; Both use pin 2. On the bottom right corner of the shield there are two small solder-bridges labeled 3 and 2. Can i unsolder/resolder them so i can use other pins in SoftwareSerial for xBee?

  • Is there any plan to price these closer to the competitor (radioshack offers the Seeed Xbee Shield)? $24.95 (+ price of stackable headers) >> $9.99 (http://www.radioshack.com/product/index.jsp?productId=37988166)

  • I just assembled the headers to the shield this morning. When I use it with the Arduino Uno, Xconnect can find the radio device. I tried the XBee modules with the XBee explorer and they are recognized immediately. Tried with the UART switch in both positions; no luck. Am I missing any steps to assembling the shield?

    • It sounds like you are trying to connect the XBee to the computer using the Arduino Uno and the XBee shield. The Uno and shield do not make the necessary connections for this, you will want an XBee Explorer for this. If you still have questions on this feel free to email techsupport@sparkfun.com

      • Thank you very much for the pointer.

        I was confused; the Hookup Guide on this page says we need a XBee explorer and the XBee shield to test the connections but did not give any explanation on the necessary connections.

        Are there any tutorials or guides to setup the shield connections?

        • This XBee tutorial should be more explicit on helping you get started with connecting your XBees to a computer and configuring them to work together.

  • Will this shield work with zigbee module like this one? http://www.smartarduino.com/view.php?id=94121

    • We’re not familiar with this module, but most likely. Assuming the footprint and pinout matches the XBees. The only thing the shield does is provide 3.3V power and level shift the Din and Dout pins from 5V to 3.3V. If that’s what you need this should work fine.

  • Hi, question, is Xbee shield compatible with xbee pro s3b?, (i got XBP9B-XCST-002). When i plug to PC my arduino+xbee shield+xbee module, three leds turn on in the xbee shield (DOUT, DIO5, PWR) and when i go to XCTU and select the arduino port, it doesnt display any configuration for the RF module (wich DOES work since i can get it to work with xbee explorer). Soldering is ok, so im not sure what i could be doing wrong.

    • The XBee shield is compatible with the XBee Pro S3B (you may have to cut the solder jumper for the RSSI light, I don’t remember which of the 900MHz modules it is that requires that). But the XBee shield does not connect the XBee module to the computer, it connects the XBee module to the Arduino. If you want to connect the XBee to the computer you want the XBee Explorer USB.

  • Hey - I ordered this shield in part because it brought out the I2C headers. But the two boards I received did not have them. One I had to use because it was down to short strokes but I really need those last two to come out.

    Can I return one for a replacement with the newer version ? Thanks

    • Email techsupport@sparkfun.com with your order number. They should be able help you out with that.

  • what’s been updated from the previous rev?

    • Nothing really. Most of the changes were to make the lives of our production guys easier and are things like different size components. I believe the only user noticeable difference is we’ve updated this to the R3 form factor so the extra 4 pins are available for your stackable headers.

  • Looks like this isn’t compatible with the RN-XV? :(

    • Why not? As far as I know it should be.

      • From the pictures, pins 1-4 are gnd, 3.3v, data out, and data in.

        on the RN-XV, pins 1-4 are 3.3v, data out, data in, and gpio 8. Gnd is on pin 10

        unless I’m missing something or looking at old documentation, they don’t match

        EDIT: I think I found my mistake… it looks like the “first” PTH pin of GND isn’t connected to the first pin in the 2mm socket, it’s connected to pin 10 of the 2mm socket. I looked at the datasheet closer. :)

        • Yep, I don’t know exactly why but we break out an extra GND pin there for you. The sockets are each 10 pins long, but there are 11 holes (you get a 5V pin as well) on each side.

Customer Reviews

3.4 out of 5

Based on 11 ratings:

5 star
4 star
3 star
2 star
1 star

1 of 1 found this helpful:

Very simple way to get up and running quickly with Arduino and Xbee

Five minutes of soldering (don’t forget to buy header pins!) and you are up and running with XBee and Arduino. The board has a switch that lets you control where the XBee’s data is sent as well as a reset button. It’s a simple shield that does one thing very well and then gets out of the way. Do note that it will block the ISP pins on your Arduino, however.

1 of 1 found this helpful:

Headers not included

Would it kill you, SparkFun, to include a set of headers with the shield? Now I got the shield only to realize that I need to order $1.50 headers, pay $5 for shipping, and wait another week before I can start using it.

Sorry, but unless the shield explicitly is listed to include headers, they generally are listed without headers. It’s good to keep some extra headers in your workbench in case you need them. https://www.sparkfun.com/products/11417

1 of 1 found this helpful:

simple to use

I was breadboarding my Xbee before getting this and also doing my logic conversions on the breadboard. This cleaned up my project and the logic converter works great. I used it on an Arduino mega and the switch to change the serial lines made this easy.

Blew up in smoke

Bought two of these, soldered on headers and connected them both up to an arduino, first worked great and the second one sparked, started smoking. Both where connected identically, no solder joining two pins together or anything like that. Other then that the board seems great, only improvement I would make is include a set of stacking headers. Also thanks to the sparkfun team for resolving my issue with the faulty board, I guess with any product, good or bad, there will be the odd one or two bad ones.

It looks like the (diode?) closest to the wee switch may have blown, it appears to have a we bubble in the top of it.

Glad we could get you taken care of with a replacement!

Failure to communicate

The XBee shield was mounted on an Arduino Uno. t will send data to another XBee on a PC runing XCTU but I have been unable to get data back to the Uno. have read and re-read the various tutorials about the shield and XBees but nothing I can find explains the problem. The problem lies with either the shield, the Uno or the sample sketches found in the tutorial. The shield itself is very simple so I doubt it is defective but who knows?

0 of 1 found this helpful:

Appears to work

Limited range

Range is related to your Xbee module. The shield does not have relation to range.

0 of 1 found this helpful:

Product ok, tutorials are ancient and outdated!

If you plan to use this product with wifi Xbee, don’t rely on Sparkfun tutorials, they are ancient, outdated and DO NOT WORK. Go to github…

I’m sorry, but that tutorial is for series 1 xbees. It’s actually not outdated or broken. But it doesn’t cover Xbee WIFI. So you would want to use a different tutorial if that is your goal.

Perfect sheild

Perfect choice to add X Bee to an Arduino Uno . This board has everything you need and then some for future use . Clearly laid out and labeled . Simply perfect.

Failure to communicate

The XBee shield was mounted on an Arduino Uno. t will send data to another XBee on a PC runing XCTU but I have been unable to get data back to the Uno. have read and re-read the various tutorials about the shield and XBees but nothing I can find explains the problem. The problem lies with either the shield, the Uno or the sample sketches found in the tutorial. The shield itself is very simple so I doubt it is defective but who knows?

Can't get it to work yet...

Maybe my office wifi is too secure to use this…

Will update if I can get it working.

Related Tutorials

Internet Datalogging With Arduino and XBee WiFi

June 19, 2014

How to combine an Arduino, XBee WiFi module, and handful of sensors to create a live stream of "Office Conditions". Storing light, temperature, carbon-monoxide, and methane (for science!) readings on the Internet.