Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: sample02_sw xbee_aging sample01_led sample04_sens
You are viewing an older revision! See the latest version
Homepage
XBee library 'ZB Coord API'¶

Nucleo Board + Arduino Wireless Shield + XBee ZB Module + LCD¶
This XBee liblary is developed for Digi XBee ZB Modules on Nucleo F401RE Micro Computer Board through Arduino Wireless Shield.
Quote:
When you will use this liblary for anything other than Nucleo microcomputer board, please change the 4th line of xbee/xbee.cpp. The above code is only for STM32 Nucleo board.
- RawSerial _xbee_serial(SERIAL_TX, SERIAL_RX);

Hardware Jumper Settings¶
The hardware soldering jumper setting for the serial ports is necessary for Nucleo board.
- Set OPEN for SB14(TX)
- Set SHORT jumper for SB62
- Set SHORT jumper for SB63

Examples¶
Sample Code 01 LED¶
An XBee ZB Coordinator on a Nucleo Board controls LEDs on the other XBee ZB device.
sample
#include "xbee.h"
DigitalOut myled(LED1);
int main(){
// Please set MAC Address to access your remote XBee device.
byte dev_gpio[] = {0x00,0x13,0xA2,0x00,0x40,0x30,0xC1,0x6F};
myled = 1; // set Higher Level(3.3V) for LED port on NUCLEO
xbee_init( 0 ); // Initialize XBee COM Port Settings
xbee_atnj( 0xFF ); // Enable Network Join
myled = 0; // set Lower Level(0.0V) for LED port on NUCLEO
while(1){
myled = 1; // set Higher Level(3.3V) for LED port on NUCLEO
xbee_gpo(dev_gpio,11,1); // set H Level for GPO port 11 on remote xbee
xbee_gpo(dev_gpio,12,1); // set H Level for GPO port 12 on remote xbee
wait(1);
myled = 0; // set Lower Level(0.0V) for LED port on NUCLEO
xbee_gpo(dev_gpio,11,0); // set L Level for GPO port 11 on remote xbee
xbee_gpo(dev_gpio,12,0); // set L Level for GPO port 12 on remote xbee
wait(1);
}
}
http://mbed.org/users/bokunimowakaru/code/sample01_led/
Sample Code 02 Switch¶
To push buttons (or switches) on an XBee ZB device report the conditions of input ports on it to a Nucleo board, and display them on a LCD.
#include "xbee.h"
#include "TextLCD.h"
TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7
int main(){
byte data;
int i;
XBEE_RESULT xbee_result;
byte dev_gpio[] = {0x00,0x13,0xA2,0x00,0x40,0x30,0xC1,0x6F};
lcd.cls(); lcd.printf("Sample 2 SW");
xbee_init( 0x00 );
lcd.cls(); lcd.printf("ATNJ");
xbee_atnj( 0xFF );
lcd.cls(); lcd.printf("gpio init");
xbee_gpio_init(dev_gpio); // Send GPIO mode settings to remote device.
lcd.cls(); lcd.printf("DONE");
while(1){
data = xbee_rx_call( &xbee_result );
if( xbee_result.MODE == MODE_GPIN){ // When a GPIO packet is recieved,
lcd.cls();
for( i=7; i>=0 ; i--) lcd.printf( "%c",(char)( (int)'0' + ((data>>i) & 0x01) ) );
// Display the recieved data.
}
}
}
http://mbed.org/users/bokunimowakaru/code/sample02_sw/
Sample Code 04 Sensor¶
Measured results of an XBee wireless sensor device are displayed a LCD on Nucleo board with an XBee coordinator which is in API mode.
#include <xbee.h>
#include "TextLCD.h"
#define FORCE_INTERVAL 100
TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7
byte dev_sens[8]; // IEEE Address
void setup(){
lcd.cls(); lcd.printf("Sample 4 SENS");
xbee_init( 0x00 );
}
void loop(){
int i;
int dev_en = 0; // Device Detection Flag
XBEE_RESULT xbee_result; // Stracture for recieved data
int trig=0;
float value;
lcd.cls(); lcd.printf("Searching:SENSOR");
if( xbee_atnj(10) ){ // Enable Network Join during 10 seconds.
lcd.cls(); lcd.printf("Found a device");
xbee_from( dev_sens ); // Get address of remote device.
dev_en = 1;
xbee_gpio_config( dev_sens, 1 , AIN ); // Analog Input mode to port 1 on remote device
xbee_gpio_config( dev_sens, 2 , AIN ); // Analog Input mode to port 2 on remote device
}else{
lcd.cls(); lcd.printf("Failed:no dev.");
}
wait(1);
lcd.cls();
while(1){
if(dev_en){
if(trig<=0){
lcd.locate(12,0); lcd.printf("Trig"); wait(0.1);
xbee_force(dev_sens); // Send a request command to remote device.
trig = FORCE_INTERVAL;
lcd.locate(12,0); lcd.printf(" ");
}
}else{
lcd.cls(); lcd.printf("Waiting for XBee");
wait(0.5);
lcd.cls();
}
trig--;
xbee_rx_call( &xbee_result ); // Check a recieved packet.
switch( xbee_result.MODE ){ // Check the packet type.
case MODE_RESP: // the responce for the request in xbee_force().
case MODE_GPIN: // Report data from remote xbee device.
if( bytecmp( dev_sens , &(xbee_result.FROM[0]) ,8 ) == 0 && xbee_result.STATUS == STATUS_OK ){
value = xbee_sensor_result( &xbee_result, LIGHT);
lcd.locate(0,0); lcd.printf( "%.1f Lux ",value);
value = xbee_sensor_result( &xbee_result, TEMP);
lcd.locate(0,1); lcd.printf( "%.1f C ",value);
}
break;
case MODE_IDNT: // Commissioning Button Report is recieved.
lcd.cls(); lcd.printf("found a new dev");
for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i];
// Save MAC address of reported device.
dev_en = 1; // Flag on (A sensor is detected.)
trig = 0;
xbee_gpio_config( dev_sens, 1 , AIN ); // Set Analog Mode to port 1 on remote XBee
xbee_gpio_config( dev_sens, 2 , AIN ); // Set Analog Mode to port 2 on remote XBee
lcd.cls();
break;
default:
break;
}
}
}