XBee: Difference between revisions

From embeddedTS Manuals
No edit summary
No edit summary
Line 26: Line 26:


= Programming Example =
= Programming Example =
This source example assumes the baud rate is already set up to 9600 (required by command mode)
This source example assumes the baud rate is already set up to 9600 (required by command mode).  Replace the XBEEDEVICE with your COM port.


<source lang=c>
<source lang=c>
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <fcntl.h>
#include <termios.h>
#include <termios.h>
#include <stdio.h>
#include <strings.h>
#define XBEEDEVICE "/dev/pts/0"


int main(int argc, char **argv)
int main(int argc, char **argv)
{
{
        int fd, c, res;
        struct termios oldtio, newtio;
         char buf[255] = {0};
         char buf[255] = {0};
         int xbeefd, res;
          
 
        fd = open(XBEEDEVICE, O_RDWR | O_NOCTTY );  
         if(argc < 2)
         if(fd <0)  
         {
         {
                 printf("You must specify the COM device.\n  Example: %s /dev/pts/0\n", argv[0]);
                 perror(XBEEDEVICE);  
                 return 1;
                 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;


         xbeefd = open(argv[1], O_RDWR | O_RSYNC | O_DSYNC | O_SYNC);  
         /* set input mode (non-canonical, no echo,...) */
         if(xbeefd == -1)
        newtio.c_lflag = 0;
         {
       
                perror("Couldn't open the COM device\n");
         newtio.c_cc[VTIME]    = 0;  /* inter-character timer unused */
                return 1;
        newtio.c_cc[VMIN]    = 2;  /* blocking read until 2 chars received */
        }
          
        tcflush(fd, TCIFLUSH);
        tcsetattr(fd, TCSANOW, &newtio);


        // Sending +++ without 1 second puts the Xbee into command mode
         write(fd, "+++", 3);
         write(xbeefd, "+++", 3);


         // Returns 'OK' on command mode
         res = read(fd, buf, 255);
        read(xbeefd, &buf, 254);
        buf[res] = 0;


         if(buf[0] == 'O' && buf[1] == 'K')
         if(0 == strncmp(buf, "OK", 2))
         {
         {
                 printf("XBee detected\n");
                 printf("XBee Detected\n");
         }  
         }
         else  
         else
         {
         {
                 printf("Could not find the XBee\n");
                 printf("Could not find XBee\n");
         }
         }


        int i = 0;
        for(i = 0; i < 254; i++)
        {
                if(buf[i] != 0)
                        printf("buf[%i]: %c\n", i, buf[i]);
        }


         printf("\n\nbuf: %s\n\n", &buf[0]);
         tcsetattr(fd, TCSANOW, &oldtio);
 
        // Exit command mode
        write(xbeefd, "ATCN", 4);


         return 0;
         return 0;
}
}
</source>
</source>

Revision as of 20:44, 23 July 2011

XBee
Xbee.jpg
Released Mar. 2010
Documentation
Datasheet
Product Manual
Mechanical Drawing
Digi International

Overview

The XBee is a 802.15.4 compliant radio module. It connects to the boards using a UART, and several DIO pins. See your SBC manual for more information on the UART and DIO connection.

Getting Started

Digi offers the best introductions to this product. Many of these tutorials or samples are aimed at different platforms, but the UART information will still be relevant.

XBee Learn More

XBee 802.15.4 Digital Input/Output Line Passing

Programming Example

This source example assumes the baud rate is already set up to 9600 (required by command mode). Replace the XBEEDEVICE with your COM port.

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <termios.h>
#include <stdio.h>
#include <strings.h>

#define XBEEDEVICE "/dev/pts/0"

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);

        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");
        }

        int i = 0;
        for(i = 0; i < 254; i++)
        {
                if(buf[i] != 0)
                        printf("buf[%i]: %c\n", i, buf[i]);
        }

        tcsetattr(fd, TCSANOW, &oldtio);

        return 0;
}