
My ultimate aim is to wirelessly network several Arduino based platforms with a centralized Raspberry Pi controller or gateway. There is much for me to learn to get this operational, not the least of which is the selection of the radio device platform I plan to use. After reviewing other devices, I have settled on the XBee, in part because of its popularity, its mesh capabilities, and it power management. To get up to speed on the Xbee, I found the tutorials at Adafruit, Sparkfun, and Parallax helpful. Some additional good references are listed at the end of this post.
As I did in the post Raspberry Pi Serial Communication: What, Why, and a Touch of How, I have a desire (obsessive need?) to do some extensive researching before diving into implementing a project. What is listed below are my research findings.
XBee Series 1 vs. Series 2
Digi's XBee website gives you a confusing set of options for selecting radios but after reviewing multiple sources, it boils down to the XBee Series 1 vs. Series 2 for the DIY type applications I would do.- XBee Series 1 Module (Freescale technology with 802.15.4 firmware) have a 250 kbps RF data rates and operate at 2.4 GHz. These radios use the IEEE 802.15.4 networking protocol and can perform point-to-multi-point networking. You can also do peer-to-peer networking (a form of mesh network) but this will require a firmware upgrade called DigiMesh designed specifically for the Series 1 hardware.
- XBee Series 2 Module (Ember/Silicon Labs technology with ZigBee firmware) are similar to the Series 1 in many respects but use the ZigBee standard, and therefore, have the potential for interoperability with devices made by different vendors.
The Zigbee Alliance is a group of more than 300 companies who is responsible for publishing and maintaining the Zigbee specification. In the ZigBee network topology, there are different node types in the network (Coordinator, Router, End Device). DigiMesh is a proprietary peer-to-peer networking using a simplified topology (no need to define and organize coordinators, routers or end-nodes). Digi has a white paper that does a nice comparison of the two types of meshing products.
To further clarify the similarity/difference between Series 1 & 2, see the table below:
Feature |
XBee Series 1 / 802.15.4 |
XBee Series 2 / ZigBee |
Ramifications |
Price |
~ $23 |
~ $26 |
Price shouldn’t be a driver but If you are looking for a simple point-to-point configuration, you should go with the Series 1. The Series 2 requires considerable setup and configuration. |
Transmit Power Output Indoor/Urban Range Line-of-Sight Range |
1 mW (0dbm) up to 100 ft. up to 300 ft. |
2 mW (+3dbm) up to 133 ft. up to 400 ft. |
The additional power of the Series 2 give you a ~25% increase in range. |
Firmware |
Comes standard with 802.15.4 firmware for point-point or star topology. Requires DigiMesh firmware to mesh. |
does not offer any 802.15.4-only firmware; it is always running the XBee ZB ZigBee mesh firmware |
DigiMesh, while proprietary, appears to have less overhead and easier to configure |
Network Topologies |
Point-to-Point, Star, and Mesh (with DigiMesh firmware) |
Point-to-Point, Star, and Mesh |
With a closer reading of the specs, you’ll find that the Series 1 with DigiMesh has a peer-to-peer topology but the Series 2 is hierarchical. I believe peer-to-peer is superior. |
Routing Protocol |
Ad hoc On-Demand Distance Vector (AODV) Routing + Hierarchical Tree Routing as last resort |
Ad hoc On-Demand Distance Vector (AODV) Routing |
I suspect there are more differences here but couldn’t uncover them. |
RF Data Rate |
250 Kbps |
250 Kbps |
RF data rate doesn’t have much practical meaning |
Practical Maximum Throughput |
~ 80kbps |
ZigBee is significantly slower than the 802.15.4 |
ZugBee is a full OSI stack, and as a result, has significant overhead. |
Power-Down Current |
10 uA |
1 uA |
Series 2 was built for low power consumption. |
After pondering this all for a bit, I believe the choose boils down to two questions:
- Is the interoperability of ZigBee important to you?
- What are the benefits of ZigBee vs. DigiMesh?
AT Mode vs. API Mode
XBee modules support two modes of operation – AT mode and API mode. In API mode, you communicate with the radio by sending and receiving packets. In AT (transparent) mode, the XBee radio simply relays serial data to the receiving XBee, as identified by the DH+DL address. Series 1 radios support both AT and API modes with a single firmware version, allowing you switch between the modes with the X-CTU software.To create simple point-to-point links, XBee works nicely in AT mode without much coding. However, if your goal is to build a network consisting of more than two devices, AT mode becomes too difficult to bear. You will spend almost all the time switching in and out of AT mode, wasting time and draining batteries in the process. On the other hand, in API mode commands and data travel in specially formatted frames and no switching is necessary. Another advantage of API mode is that serial speed on transmitters doesn't have to match – one can be configured for 115,200bps, another for 2400bps, third left with default 9600bps. There is another nice feature called remote command; you can remotely request the state of XBee module pins, for example, or change an output pin level.
It's clear that I'll want to work in API mode, but judging from the examples of XBee API mode code, it sure would be nice to have a library package that has designed in some basic utilities that I can leverage. That is the next topic.
Supporting Software
One of the first packages I discovered was the Xbee Network Protocol (XNP). I was impressed by the volume and quality of the documentation. Never the less, I passed on it for two reasons. First, it isn't as mature as other packages I discovered (and not widely used), and most importantly, it appears to be implementing mesh networking in software. Ether the author didn't recognize that the Series 1 modules can mesh via the DigiMesh firmware (not a surprise since many websites wrongfully report that the Series 1 do not mesh) or he just wants to roll-his-own (what better way to learn about mesh routing protocols).xbee-arduino is a C++ Arduino library for communicating with XBees in API mode, with support for both Series 1 and Series 2. Judging from the documentation, it appears that it could be ported to Raspberry Pi but it would be far easier to use something targeted for the RPi (see below). With the latest beta software, the XBee's serial communications can be handle via SoftwareSerial, freeing up the Arduino USB for debugging. It also appears to that the author is experimenting if not already supporting DigiMesh. The package is well documented, actively maintained, and equally important, appears to be popular.
Another possibility for the Raspberry Pi is the python-xbee. This Python package is not as well documented as the xbee-arduino but does appear to be actively used and supported. The fact that its on the Python Organization's web site as a listed package gives it some additional credibility. See this and this with respect to DigiMesh support.
libxbee is another C++ library but targeted at Linux and Windows. Fewer users and the author states "development is coming to an end" may mean this platform isn't as strong as the others.
While not a very rigorous analysis, I believe I'll place my bets on xbee-arduino for Arduino development and python-xbee for Raspberry Pi development. Using Python is intriguing in part because it appears to be the preferred software language for the RPi. But what if you have some C++ code, a popular language for Linux, and that you want to use some existing libraries? There are tools that could make this happen. You could use Python's C/C++ extension modules. Also, there is the Simplified Wrapper and Interface Generator (SWIG), which is a software development tool that connects programs written in C/C++ with a variety of high-level programming languages. SWIG is used with different types of target languages including common scripting languages such as Perl, PHP, Python, Tcl and Ruby.
References
An unspoken consideration in my analysis is documentation availability/quality, example implementations for learning, and the availability of software libraries I could potential use. Here are some of the more interesting things I uncovered.Tutorials (ZigBee but can be generalized to the XBee)
- Zigbee Tutorial - a short introduction
- 802.15.4 vs ZigBee - a more technical introduction
- Zigbee Mesh Routing - Interactive Tutorial - nice job explaining AODV routing
- The ZigBee Standard - a painless introduction
- XBee Series 1 Manuals - multiple document covering the Series 1 modual
- The Unofficial XBee FAQ - answers to issues that maybe getting in the way
- XBee Cookbook for Series 1 - sort of companion document to the The Unoffical XBee FAQ
- Libelium.com Development Documentation - while targeted for the meshlium device, this does have good general documenation
- Collection of XBee Projects - Digi's collection of XBee projects done by the Hacker/DIY community
- XBee Examples & Guides - Digi's website giving you step-by-step instructions for simple projects
- Playing Xbee: Part 1, 2, 3, 4 - author does a nice "teaching tour" on his introduction to XBee
- mesh networks research group - informative topics focused in the mesh networks field
- Driver Module for XBee Device - Linux kernel driver for XBee