XBee radio family consist of various XBee RF modules. Each having different specification. Generally, XBee modules operate within ISM 2.4 GHz (Unlicensed) frequency band. XBee modules support ZigBee protocol which is based on IEEE 802.15.4 standard.
XBee modules have source/destination addressing feature with unicast and broadcast communication support. They support point to point, point to multipoint, peer to peer etc. communication topologies.
XBee modules uses DSSS (Direct Sequence Spread Spectrum) modulation technique for communication. XBee has on board features like Digital I/O pins, analog ADC (10-bit) input pins, PWM output etc. It has serial UART pins for communication with PC and Microcontrollers serially. Some XBee modules (e.g. S2C) has support for SPI interface too.
XBee Module Pin Description
As shown in above figure of XBee module, it has 20 pins. Each pin function is described in table given below.
Pin No. | Name | Direction | Description |
1 | VCC | - | Power Supply |
2 | DOUT | Output | UART Data out |
3 | DIN/CONFIG | Input | UART Data in |
4 | DO8 | Output | Digital Output 8 |
5 | RESET | Input | Module Reset (reset pulse >=200nS) |
6 | PWM0/RSSI | Output | PWM Output 0/ Received Signal Strength Indicator |
7 | PWM1 | Output | PWM Output 1 |
8 | Reserved | - | Do not connect |
9 | DTR/SLEEP_RQ/DI8 | Input | Sleep Control or Digital Input 8 |
10 | GND | - | Ground |
11 | AD4/DIO4 | Input / Output | Analog Input 4/ Digital I/O 4 |
12 | CTS/DIO7 | Input / Output | Clear-To-Send Flow Control or Digital I/O 7 |
13 | ON/SLEEP | Output | Module Status Indicator, High = ON, Low = SLEEP |
14 | VREF | Input | Reference Voltage for ADC |
15 | ASSOCIATE/AD5/DIO5 | Input / Output | Associated Indicator, Analog Input 5 or Digital I/O 5 |
16 | RTS/AD6/DIO6 | Input / Output | Request-To-Send Flow Control, Analog Input 6 or Digital I/O 6 |
17 | AD3/DIO3 | Input / Output | Analog Input 3 or Digital I/O 3 |
18 | AD2/DIO2 | Input / Output | Analog Input 2 or Digital I/O 2 |
19 | AD1/DIO1 | Input / Output | Analog Input 1 or Digital I/O 1 |
20 | AD0/DIO0 | Input / Output | Analog Input 0 or Digital I/O 0 |
Let’s see operating mode of XBee
Operating Modes
XBee modules can operate in two modes namely,
Transparent mode (AT command)
Application Programming Interface (API) mode
As XBee module support ZigBee protocol, let’s see about ZigBee protocol in short.
ZigBee Protocol
ZigBee Protocol is based on IEEE (Institute for Electrical and Electronics Engineers) 802.15.4 standards with additional routing and networking functionality. It is used to create Personal Area Network (PAN) using radios.
ZigBee has mesh networking functionality. Mesh networking is used where distance between two radios is beyond their ranges. In such scenario, intermediate radio is used that will forward incoming messages to the destination and accomplish the communication between long distance radios.
ZigBee devices has three types by their function as,
ZigBee Coordinator
ZigBee Router
ZigBee End device
Let’s see about PAN and Channel in ZigBee.
PAN ID (Personal Area Network ID)
ZigBee network is known as Personal Area Network or PAN. Each network is defined with their unique PAN ID. PAN ID is common in all devices of same network.
ZigBee devices are configured with PAN ID to join network or they can select nearby PAN ID to join with their network.
The coordinator must select a PAN ID and channel to start a network. The coordinator and routers can allow other devices to join the network.
The router or coordinator that allowed an end device to join the network becomes the "parent" of the end device. If the end device sleeps, the parent must be able to buffer incoming data packets which are destined for the end device until the end device is wakes up and receives the data.
Channel
ZigBee Device uses Direct Sequence Spread Spectrum (DSSS) Coding technique and operates with fixed channel.
Sixteen channels are allocated in the 2.4 GHz band, with each channel spaced 5 MHz apart, though using only 2 MHz of bandwidth.
XBee modules support all 16 channels and XBee-PRO modules support 14 of the 16 channel.
The Coordinator can auto decide which PAN ID and channel to use.
Addressing
Now let’s see one important thing to know in addressing XBee devices. There are two addressing method used by XBee devices
Short 16-bit addressing
Long 64-bit addressing
With Unicast and Broadcast communication feature.
Short 16-bit addressing
Short address known by ‘MY’ parameter.
Setting the ‘DH’ parameter to zero will configure the destination address to be short 16-bit address.
For two modules to communicate using short addressing, the Destination Address (sets in ‘DL’ parameter) of the transmitter module must match the MY parameter of the receiver as shown in below table,
Parameter | Transmitter Module | Receiver Module |
MY (Source Address) | 0x11 | 0x22 |
DH (Destination Address High) | 0 | 0 |
DL (Destination Address Low) | 0x22 | 0x11 |
Long 64-bit addressing
In Long 64-bit addressing mode MY parameter is disabled.
Source Address Parameters (SH & SL) and Destination Address Parameters (DH & DL) are used for communication as shown in below table,
Parameter | Transmitter Module | Receiver Module |
SH (Source Address High) | 0x0013A200 | 0x0013A200 |
SL (Source Address Low) | 0x41241D5A | 0x41241CB2 |
DH (Destination Address High) | 0x0013A200 | 0x0013A200 |
DL (Destination Address Low) | 0x41241CB2 | 0x41241D5A |
Broadcast Mode
By default, XBee operates in Unicast (point to point) mode of communication that supports retries of any lost message.
Any XBee module within range will accept a packet that contains a broadcast address.
When configured to operate in Broadcast Mode, receiving modules do not send ACKs (Acknowledgements) and transmitting modules do not automatically re-send packets as is the case in Unicast Mode.
To send a broadcast packet to all modules regardless of 16-bit or 64-bit addressing, set the destination address of the broadcasting module as shown below.
Now let’s see how to configure XBee in either operating mode (AT command / API) and in either device function type (Coordinator / Router / End Device).
XBee Configuration
To configure XBee in either operating mode and device function type, Digi International provides a software tool known as X-CTU. Using this tool, we can configure device, test device performance and upgrade firmware.
Here we need to first download X-CTU and go through short overview of X-CTU User Guide.
We can also configure XBee devices through PC / Laptop using serial terminal easily in transparent (AT command) operating mode by using AT commands.
Note that XBee device will enter in Command mode only after getting “+++” serial command and automatically get to normal mode after an adjustable time slot.
Let’s see how to setup ZigBee network.
XBee Network
To create network, we require two or more XBee radio devices. E.g. here we take two XBee S2devices from XB24-ZB product family with two XBee USB adapter as shown below.
First connect both XBee devices to PC/Laptop serial port using XBee USB adapter& cable. Now open X-CTU software and click on
symbol in upper left hand side to add device.
The Add radio device window will pop up in which we need to select USB port to which we have attached XBee devices. As shown in below snap.
Set Baud rate which is 9600 by default.
Set values of Data bits, parity and Stop bits.
For sake of simplicity keep all default parameters as shown in figure and click on finish. It will add selected XBee device. Do same procedure to add second XBee device.
Now both devices will appear in upper left corner of X-CTU and their parameter value at right hand side as shown in below figure.
Here we have configured one XBee device as Coordinator.
And another one as End Device.
Both are configured in transparent (AT command) mode.
To configure XBee device in another operating mode and function set click on update
symbol besides the upper right hand side. Update Firmware window will pop up as shown in below figure, where we can select,
Product family of XBee device.
Function set to select required operating mode and function type of XBee device.
And firmware version.
After updating XBee devices with correct firmware, we must ensure at least three parameters of XBee devices given below
Baud rate should be same for each device.
PAN ID should be unique for all XBee devices in same n/w.
Operating Channel should be same for all devices in same n/w.
Now let’s set XBee parameters i.e. PAN ID, Channel (CH) and Communicate in Unicast mode using long 64-bit addressing mode for both XBee devices as shown in below figure.
Here we are setting PAN ID = 1234. Coordinator will select channel.
For long 64-bit addressing mode we are setting Coordinator Source Address (SH &SL) parameters in End Device Destination Address (DH &DL) parameters and vice versa.
Don’t forget to keep Baud rate same of devices in the same network.
Now to test communication, open the console by clicking
symbol shown in upper right corner of X-CTU window and click on open to open console as shown in below figure.
Now type message from Coordinator console log, it will appear at end device console log and vice versa as seen in below GIF.
API Operation
Now let’s see packet based Application Programming Interface (API) mode.
In API mode, data is structured in well-defined frame.
Generally, Frame starts with one-byte Start Delimiter (0x7E), then Frame Length, Frame Type, Frame Data and ends with Checksum.
Any incoming data before Start Delimiter is discarded.
And if checksum is not correct then data is discarded.
Frame Length is 2-3-byte data which indicate frame length. It is measured from Frame Type till Checksum in bytes.
Frame Type is a one-byte command ID represent the frame type like Transmit request frame, AT command frame, Remote AT command frame, Modem Status frame, Transmit status frame etc.
Frame Data is the actual data or command to be send.
Checksum is a one-byte data calculated and verified on non-escaped data. It is calculated by adding all bytes (Not including Start delimiter and Frame length,), keeping only the lowest 8 bits of the result and subtract it from 0xFF.
Let’s see example of AT Command Frame
Here,
Frame Length = Length of (Frame Type + Frame ID + AT Command) in Bytes
Checksum = 0xFF – (Frame Type + Frame ID + AT Command)
= 0xFF – (0x08 + 0x01 + 0x44 + 0x4C) = 0x66.
As shown in above figure we can check API frame structure and example of AT command frame. In example, there we have checked DL parameter of XBee device, for which we have to send above AT Command Frame i.e. we have to send below data serially to XBee device,
0x7E 0x00 0x04 0x08 0x01 0x44 0x4C 0x66.
Note that depending on API identifier/Frame Type, CMD Data gets sectored in Data, Option, Parameter value, Digital value, analog value etc.
Note: - In API operation (with escape) mode, when sending or receiving a UART data frame, specific data values must be escaped (flagged) so they do not interfere with the UART or UART data frame operation. To escape an interfering data byte, insert 0x7D and follow it with the byte to be escaped XORed with 0x20.
API Frame Generator in X-CTU
X-CTU has API frame generator tool through which we can generate API frames. Open X-CTU and Select tools -> Frames generator in X-CTU as shown in below figure.
Upon clicking on Frames generator XBee API Frame generator window will pop up where we can generate API frames based on Protocol, Mode and Frame type as shown in below figure.
Now let’s see about ADC and Digital line support of XBee
ADC and Digital I/O Pins
XBee device has 10-bit ADC and Digital I/O line passing support. Specific XBee device pins can be configured to one of following function,
ADC
Digital Input
Digital Output Low
Digital Output High
I/O data begin with header in frame and after header; I/O sample data is present in frame as shown in below figure.
Header indicates number of samples and which channel is active at a time; whereas sample data consists of actual analog and digital data.
Configuring XBee Pins
Let’s see how to configure any specific XBee pin function from XCTU tool
Select the XBee pin to be configured.
Then select the function for that pin as shown in below image and click on write setting
Now let’s see about I/O Sampling
I/O Sampling
XBee devices have ability to monitor and sample all analog and digital I/O lines. To read I/O samples from remote device, parent device must have API mode enabled. I/O sampling is mostly used to request analog and digital samples from XBee end.
There are three ways to obtain I/O samples, either locally or remotely:
Queried Sampling
Periodic Sampling
Change Detection Sampling
Connection Diagram of Xbee S2 Module with Arduino
Connection Diagram of XBee Router (At End device)
XBee S2 (ZigBee) Code for Arduino UNO
#include <XBee.h>
#include <SoftwareSerial.h>
#define ssRX 9 /* Rx pin for software serial */
#define ssTX 8 /* Tx pin for software serial */
/* Create object named xbee_ss of the class SoftwareSerial */
SoftwareSerial xbee_ss(ssRX, ssTX); /* Define pins for software serial instance named xbee-ss(any name of your choice) to be connected to xbee */
/* ssTx of Arduino connected to Din (pin 3 of xbee) */
/* ssRx of Arduino connected to Dout (pin 2 of xbee) */
XBee xbee = XBee(); /* Create an object named xbee(any name of your choice) of the class XBee */
ZBRxIoSampleResponse ioSamples = ZBRxIoSampleResponse();
/* Create an object named ioSamples(any name of your choice) of the class ZBRxIoSampleResponse */
void setup() {
Serial.begin(9600); /* Define baud rate for serial communication */
xbee_ss.begin(9600); /* Define baud rate for software serial communication */
xbee.setSerial(xbee_ss); /* Define serial communication to be used for communication with xbee */
/* In this case, software serial is used. You could use hardware serial as well by writing "Serial" in place of "xbee_ss" */
/* For UNO, software serialis required so that we can use hardware serial for debugging and verification */
/* If using a board like Mega, you can use Serial, Serial1, etc. for the same, and there will be no need for software serial */
}
void loop() {
xbee.readPacket(); /* Read until a packet is received or an error occurs */
if(xbee.getResponse().isAvailable()) /* True if response has been successfully parsed and is complete */
{
if(xbee.getResponse().getApiId()==ZB_IO_SAMPLE_RESPONSE) /* If response is of IO_Sample_response type */
{
xbee.getResponse().getZBRxIoSampleResponse(ioSamples); /* Get the IO Sample Response */
Serial.print("Received I/O Sample from: ");
Serial.print(ioSamples.getRemoteAddress64().getMsb(), HEX); /* DH(in HEX format) of the sending device */
Serial.print(ioSamples.getRemoteAddress64().getLsb(), HEX); /* DL(in HEX format) of the sending device */
Serial.println("");
if (ioSamples.containsAnalog()) { /* If Analog samples present in the response */
Serial.println("Sample contains analog data");
}
if (ioSamples.containsDigital()) { /* If Digital samples present in the response */
Serial.println("Sample contains digtal data");
}
/* Loop for identifying the analog samples present in the received sample data and to print it */
for (int i = 0; i <= 4; i++) { /* Only 4 Analog channels */
if (ioSamples.isAnalogEnabled(i)) { /* Check Analog channel mask to see if the any pin is enabled for analog input sampling */
Serial.print("Analog (AI");
Serial.print(i, DEC);
Serial.print(") is ");
Serial.println(ioSamples.getAnalog(i), DEC);
}
}
for (int i = 0; i <= 12; i++) { /* 12 Digital IO lines */
if (ioSamples.isDigitalEnabled(i)) { /* Check Digital channel mask to see if any pin is enabled for digital IO sampling */
Serial.print("Digital (DI");
Serial.print(i, DEC);
Serial.print(") is ");
Serial.println(ioSamples.isDigitalOn(i), DEC);
}
}
}
else
{
Serial.print("Expected I/O Sample, but got ");
Serial.print(xbee.getResponse().getApiId(), HEX); /* Print response received instead of IO_Sample_Response */
}
}
else if (xbee.getResponse().isError()) { /* If error detected, print the error code */
Serial.print("Error reading packet. Error code: ");
Serial.println(xbee.getResponse().getErrorCode());
}
}
Please check this guide for more details, output and video
Comments