ZB Coord API for XBee: This XBee library drives Digi XBee ZB Modules in API Operation mode. Most commands include remote communication's are supported by the functions of this library. You can control XBee devices through the API software modules in this, without using any AT commands. Please refer to the following page and some of sample codes:

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'

<<quote>>When you will use this anything other than Nucleo microcomputer board, please change the 4th line of xbee/xbee.cpp.

RawSerial _xbee_serial(SERIAL_TX, SERIAL_RX); for STM32 Nucleo <</quote>>

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(){
    byte dev_gpio[]   = {0x00,0x13,0xA2,0x00,0x40,0x30,0xC1,0x6F};
         // MAC Address of your remote XBee device
    
    myled = 1;                          // NUCLEOのLEDをHレベル(3.3V)へ
    xbee_init( 0 );                     // XBee用COMポートの初期化
    xbee_atnj( 0xFF );                  // デバイスの参加を受け入れる
    myled = 0;                          // NUCLEOのLEDをHレベル(3.3V)へ
    
    while(1){                           // 永久に受信する
        myled = 1;                      // NUCLEOのLEDをHレベル(3.3V)へ
        xbee_gpo(dev_gpio,11,1);        // GPOポート11をHレベル(3.3V)へ
        xbee_gpo(dev_gpio,12,1);        // GPOポート12をHレベル(3.3V)へ
        wait(1);
        myled = 0;                      // NUCLEOのLEDをHレベル(3.3V)へ
        xbee_gpo(dev_gpio,11,0);        // GPOポート11をLレベル(0.0V)へ
        xbee_gpo(dev_gpio,12,0);        // GPOポート12をLレベル(0.0V)へ
        wait(1);
    }
}

http://mbed.org/users/bokunimowakaru/code/sample01_led/

Sample Code 02 sw

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 );                  // XBee用COMポートの初期化(引数はポート番号)
    lcd.cls(); lcd.printf("ATNJ");
    xbee_atnj( 0xFF );                  // デバイスを常に参加受け入れ(テスト用)
    lcd.cls(); lcd.printf("gpio init");
    xbee_gpio_init(dev_gpio);           // デバイスdev_gpioにIO設定を行うための送信
    lcd.cls(); lcd.printf("DONE");
    
    while(1){                           // 永久に受信する
        data = xbee_rx_call( &xbee_result );
        if( xbee_result.MODE == MODE_GPIN){     // PIO入力(リモート機のボタンが押された)の時
            lcd.cls();
            for( i=7; i>=0 ; i--) lcd.printf( "%c",(char)( (int)'0' + ((data>>i) & 0x01) ) );
                                        // dataに入った値をバイナリで表示
        }
    }
}

http://mbed.org/users/bokunimowakaru/code/sample02_sw/

Sample Code 04 sens

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             // 1~254 データ要求間隔
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 );                  // XBee用COMポートの初期化(引数はポート番号)
}
 
void loop(){
    int i;
    int dev_en = 0;                 // センサー発見の有無(0:未発見)
    XBEE_RESULT xbee_result;            // 受信データ用の構造体
    int trig=0;
    float value;
 
    lcd.cls(); lcd.printf("Searching:SENSOR");
    if( xbee_atnj(10) ){                // 10秒間の参加受け入れ
        lcd.cls(); lcd.printf("Found a device");
        xbee_from( dev_sens );          // 受信したアドレスをdev_sensへ格納
        dev_en = 1;                     // sensor発見済
        xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
        xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
    }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);           // デバイスdev_sensへデータ要求
                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 );       // データを受信します。
        switch( xbee_result.MODE ){         // 受信したデータの内容(MODE値)に応じて
            case MODE_RESP:                 // sensorからの応答の場合に照度と温度を表示
            case MODE_GPIN:                 // 周期方式でデータ受信した場合も想定
                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:             // 新しいデバイスを発見
                lcd.cls(); lcd.printf("found a new dev");
                for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i];
                                        // 発見したアドレスをdev_sensに読み込み
                dev_en = 1;             // sensor発見済
                trig = 0;
                xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
                xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
                lcd.cls();
                break;
            default:
                break;
        }
    }
}

http://mbed.org/users/bokunimowakaru/code/sample04_sens/


All wikipages