XBee
Released Mar. 2010 | |
Documentation | |
---|---|
Datasheet | |
Product Manual | |
Mechanical Drawing | |
Digi International |
Overview
Many of our boards support the XBEE radios which can be used for long distance communication and mesh networking using the ZigBee protocols.
Getting Started
Digi offers the best introductions to these products:
XBee Learn More XBee 802.15.4 Digital Input/Output Line Passing
For programming with their series the Linux community has created libraries that make this very convenient.
- libxbee is a C/C++ API for series 1, 2, and 5 XBEE modules in API mode.
- python-xbee is a python module for API and command mode
- xbee-api is a java API for Series 1 and 2 in API mode.
Programming Example
This source example assumes the baud rate is already set up to 9600 and that you are using a series 1 XBEE module. Keep in mind that you can reprogram the baud rate that the XBEE module will use. First set up the UART before running your application:
eval $(xuartctl --server --port 3 --speed 9600 2>&1); ln -s $ttyname /dev/ttyxuart3
# Now that the xuart device is created you can start your application:
myapp &
This is an example application that will check for the "OK" return from +++. For real usage of the XBEE you will want to use one of the APIs listed above.
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <strings.h>
#define XBEEDEVICE "/dev/ttyxuart3"
int main(int argc, char **argv)
{
int fd, c, res;
struct termios oldtio, newtio;
char buf[255] = {0};
fd = open(XBEEDEVICE, O_RDWR | O_NOCTTY );
if(fd <0)
{
perror(XBEEDEVICE);
return -1;
}
tcgetattr(fd, &oldtio); /* save current port settings */
bzero(&newtio, sizeof(newtio));
newtio.c_cflag = CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
/* set input mode (non-canonical, no echo,...) */
newtio.c_lflag = 0;
newtio.c_cc[VTIME] = 0; /* inter-character timer unused */
newtio.c_cc[VMIN] = 2; /* blocking read until 2 chars received */
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &newtio);
// Sending +++ within 1 second sets the XBee into command mode
write(fd, "+++", 3);
res = read(fd, buf, 255);
buf[res] = 0;
if(0 == strncmp(buf, "OK", 2))
{
printf("XBee Detected\n");
}
else
{
printf("Could not find XBee\n");
}
tcsetattr(fd, TCSANOW, &oldtio);
return 0;
}