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

XBee library 'ZB Coord API'

/media/uploads/bokunimowakaru/nucleoboard.jpg

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

/media/uploads/bokunimowakaru/nucleo_xbee.jpg

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

/media/uploads/bokunimowakaru/nucleo_jp.jpg

Examples

Sample Code 01 LED

An XBee ZB Coordinator on a Nucleo Board controls LEDs on the other XBee ZB device.

#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
 
int main(){
    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("Sample 4 SENS");
    xbee_init( 0x00 ); 
    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;
        }
    }
}

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

Committer:
bokunimowakaru
Date:
Tue Sep 23 13:09:41 2014 +0000
Revision:
0:d72830877d98
Child:
5:6ce45b34d3f0
The first release of XBee Library 'ZB Coord API' for ARM mbed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bokunimowakaru 0:d72830877d98 1 #define ARM_MBED
bokunimowakaru 0:d72830877d98 2 //#define ARM_MBED
bokunimowakaru 0:d72830877d98 3 /*********************************************************************
bokunimowakaru 0:d72830877d98 4 本ソースリストおよびソフトウェアは、ライセンスフリーです。
bokunimowakaru 0:d72830877d98 5 利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。
bokunimowakaru 0:d72830877d98 6
bokunimowakaru 0:d72830877d98 7 Copyright (c) 2010-2014 Wataru KUNINO
bokunimowakaru 0:d72830877d98 8 http://www.geocities.jp/bokunimowakaru/
bokunimowakaru 0:d72830877d98 9 *********************************************************************/
bokunimowakaru 0:d72830877d98 10
bokunimowakaru 0:d72830877d98 11 /*********************************************************************
bokunimowakaru 0:d72830877d98 12 インポート処理 ※ライブラリ xbee.inoに必要な宣言です
bokunimowakaru 0:d72830877d98 13 *********************************************************************/
bokunimowakaru 0:d72830877d98 14 #ifndef XBEE_H
bokunimowakaru 0:d72830877d98 15 #define XBEE_H
bokunimowakaru 0:d72830877d98 16
bokunimowakaru 0:d72830877d98 17 #ifndef LCD_TYPE_H
bokunimowakaru 0:d72830877d98 18 #define LCD_TYPE_H
bokunimowakaru 0:d72830877d98 19 #ifdef ARDUINO
bokunimowakaru 0:d72830877d98 20 #if defined(__AVR_ATmega32U4__)
bokunimowakaru 0:d72830877d98 21 #define LEONARDO // Arduino LEONARDを使用する場合に自動的に定義されます。
bokunimowakaru 0:d72830877d98 22 #endif
bokunimowakaru 0:d72830877d98 23 // #define LCD_H // 本ライブラリ動作を液晶表示する場合に定義する
bokunimowakaru 0:d72830877d98 24 // #define ADAFRUIT // 使用する液晶が Adafruit LCD Sheild の時に定義する
bokunimowakaru 0:d72830877d98 25 #else // H8 or ARM or PC
bokunimowakaru 0:d72830877d98 26 #ifndef ARM_MBED // H8 or PC
bokunimowakaru 0:d72830877d98 27 #define LCD_H
bokunimowakaru 0:d72830877d98 28 #endif
bokunimowakaru 0:d72830877d98 29 #endif
bokunimowakaru 0:d72830877d98 30 // #define XBEE_WIFI // XBee Wi-Fiを使用するときに定義する
bokunimowakaru 0:d72830877d98 31 // #define XBEE_WIFI_DEBUG
bokunimowakaru 0:d72830877d98 32 // #define LITE // ライトモード(メモリ節約・機能制限)の時に定義する
bokunimowakaru 0:d72830877d98 33 #define EASY_GPI // xbee_gpi関数(リモートGPIO)を使用するときに定義する
bokunimowakaru 0:d72830877d98 34 #define EASY_ADC // xbee_adc関数(リモートADC)を使用するときに定義する
bokunimowakaru 0:d72830877d98 35 #endif
bokunimowakaru 0:d72830877d98 36
bokunimowakaru 0:d72830877d98 37 #ifndef XB_IMPORT_H
bokunimowakaru 0:d72830877d98 38 #ifdef H3694
bokunimowakaru 0:d72830877d98 39 #ifndef __3694_H__
bokunimowakaru 0:d72830877d98 40 #include <3694.h>
bokunimowakaru 0:d72830877d98 41 #endif
bokunimowakaru 0:d72830877d98 42 #ifdef LCD_H
bokunimowakaru 0:d72830877d98 43 #ifndef LCD_ROW_1
bokunimowakaru 0:d72830877d98 44 #include "lcd_h8.c"
bokunimowakaru 0:d72830877d98 45 #endif
bokunimowakaru 0:d72830877d98 46 #endif
bokunimowakaru 0:d72830877d98 47 /* // lcd_h8ライブラリの関数
bokunimowakaru 0:d72830877d98 48 void lcd_delay(unsigned int data);
bokunimowakaru 0:d72830877d98 49 void lcd_toggle_E(void);
bokunimowakaru 0:d72830877d98 50 void lcd_cls(void);
bokunimowakaru 0:d72830877d98 51 void lcd_home(void);
bokunimowakaru 0:d72830877d98 52 void lcd_control(unsigned char disonoff, unsigned char curonoff, unsigned char curblink);
bokunimowakaru 0:d72830877d98 53 void lcd_goto(unsigned char mesto);
bokunimowakaru 0:d72830877d98 54 void lcd_shift(unsigned char data);
bokunimowakaru 0:d72830877d98 55 void lcd_putch(char data);
bokunimowakaru 0:d72830877d98 56 void lcd_putstr(const char *data);
bokunimowakaru 0:d72830877d98 57 void lcd_disp_bin(unsigned char x);
bokunimowakaru 0:d72830877d98 58 void lcd_disp_hex(unsigned char i);
bokunimowakaru 0:d72830877d98 59 void lcd_disp_1(unsigned int x);
bokunimowakaru 0:d72830877d98 60 void lcd_disp_2(unsigned int x);
bokunimowakaru 0:d72830877d98 61 void lcd_disp_3(unsigned int x);
bokunimowakaru 0:d72830877d98 62 void lcd_disp_5(unsigned int x);
bokunimowakaru 0:d72830877d98 63 void lcd_init(void);
bokunimowakaru 0:d72830877d98 64 */
bokunimowakaru 0:d72830877d98 65 #elif ARDUINO
bokunimowakaru 0:d72830877d98 66 // #include <inttypes.h>
bokunimowakaru 0:d72830877d98 67 #include "Arduino.h"
bokunimowakaru 0:d72830877d98 68 // #include "WProgram.h" // #if ARDUINO < 100
bokunimowakaru 0:d72830877d98 69 #ifdef LCD_H
bokunimowakaru 0:d72830877d98 70 #ifndef ADAFRUIT
bokunimowakaru 0:d72830877d98 71 // 通常のキャラクタLCDの場合
bokunimowakaru 0:d72830877d98 72 #include <LiquidCrystal.h>
bokunimowakaru 0:d72830877d98 73 #else
bokunimowakaru 0:d72830877d98 74 // Adafruit I2C接続LCDの場合(Adafruit_RGBLCDShieldライブラリが必要)
bokunimowakaru 0:d72830877d98 75 #include <Wire.h>
bokunimowakaru 0:d72830877d98 76 #include <Adafruit_MCP23017.h>
bokunimowakaru 0:d72830877d98 77 #include <Adafruit_RGBLCDShield.h>
bokunimowakaru 0:d72830877d98 78 #endif
bokunimowakaru 0:d72830877d98 79 #endif
bokunimowakaru 0:d72830877d98 80 #ifdef XBEE_WIFI
bokunimowakaru 0:d72830877d98 81 #include <SPI.h>
bokunimowakaru 0:d72830877d98 82 #include <Ethernet.h>
bokunimowakaru 0:d72830877d98 83 #include <EthernetUdp.h>
bokunimowakaru 0:d72830877d98 84 #endif
bokunimowakaru 0:d72830877d98 85 #ifndef LCD_ROW_1
bokunimowakaru 0:d72830877d98 86 #define LCD_ROW_1 0x00 //1行目先頭アドレス
bokunimowakaru 0:d72830877d98 87 #define LCD_ROW_2 0x40 //2行目先頭アドレス
bokunimowakaru 0:d72830877d98 88 #define LCD_ROW_3 0x14 //3行目先頭アドレス
bokunimowakaru 0:d72830877d98 89 #define LCD_ROW_4 0x54 //4行目先頭アドレス
bokunimowakaru 0:d72830877d98 90 #endif
bokunimowakaru 0:d72830877d98 91 #else
bokunimowakaru 0:d72830877d98 92 #ifdef ARM_MBED // ARM
bokunimowakaru 0:d72830877d98 93 #include "mbed.h"
bokunimowakaru 0:d72830877d98 94 #ifdef DEBUG
bokunimowakaru 0:d72830877d98 95 #define LCD_H
bokunimowakaru 0:d72830877d98 96 #define ERRLOG
bokunimowakaru 0:d72830877d98 97 #define LCD_ROW_1 0x00 //1行目先頭アドレス
bokunimowakaru 0:d72830877d98 98 #define LCD_ROW_2 0x40 //2行目先頭アドレス
bokunimowakaru 0:d72830877d98 99 #define LCD_ROW_3 0x14 //3行目先頭アドレス
bokunimowakaru 0:d72830877d98 100 #define LCD_ROW_4 0x54 //4行目先頭アドレス
bokunimowakaru 0:d72830877d98 101 #endif
bokunimowakaru 0:d72830877d98 102 #else // PC
bokunimowakaru 0:d72830877d98 103 #include <stdio.h>
bokunimowakaru 0:d72830877d98 104 #include <stdlib.h>
bokunimowakaru 0:d72830877d98 105 #include <string.h>
bokunimowakaru 0:d72830877d98 106 #include <termios.h>
bokunimowakaru 0:d72830877d98 107 #include <sys/signal.h>
bokunimowakaru 0:d72830877d98 108 #include <sys/time.h>
bokunimowakaru 0:d72830877d98 109 #include <fcntl.h>
bokunimowakaru 0:d72830877d98 110 #include <unistd.h>
bokunimowakaru 0:d72830877d98 111 #include <arpa/inet.h>
bokunimowakaru 0:d72830877d98 112 #ifdef XBEE_WIFI
bokunimowakaru 0:d72830877d98 113 #include <sys/types.h>
bokunimowakaru 0:d72830877d98 114 #include <sys/socket.h>
bokunimowakaru 0:d72830877d98 115 #include <netinet/in.h>
bokunimowakaru 0:d72830877d98 116 #include <ctype.h>
bokunimowakaru 0:d72830877d98 117 #include <sys/ioctl.h>
bokunimowakaru 0:d72830877d98 118 #include <string.h>
bokunimowakaru 0:d72830877d98 119 #endif
bokunimowakaru 0:d72830877d98 120 #define BAUDRATE B9600
bokunimowakaru 0:d72830877d98 121 #ifndef LCD_ROW_1
bokunimowakaru 0:d72830877d98 122 #include "lcd_pc.c"
bokunimowakaru 0:d72830877d98 123 #endif
bokunimowakaru 0:d72830877d98 124 #include <time.h> // クロックタイマー用
bokunimowakaru 0:d72830877d98 125 #endif
bokunimowakaru 0:d72830877d98 126 #endif
bokunimowakaru 0:d72830877d98 127 #define xbee_set_myaddress(adr) xbee_ratd_myaddress(adr)
bokunimowakaru 0:d72830877d98 128 #endif
bokunimowakaru 0:d72830877d98 129
bokunimowakaru 0:d72830877d98 130 /*********************************************************************
bokunimowakaru 0:d72830877d98 131 定数の設定 ※ライブラリ xbee.inoに必要な宣言です
bokunimowakaru 0:d72830877d98 132 *********************************************************************/
bokunimowakaru 0:d72830877d98 133 #ifndef XB_DEFINE_H
bokunimowakaru 0:d72830877d98 134 #define XB_DEFINE_H
bokunimowakaru 0:d72830877d98 135 #ifndef NAME
bokunimowakaru 0:d72830877d98 136 #ifdef LITE // BeeBee Lite by 蘭
bokunimowakaru 0:d72830877d98 137 #define NAME "BeeBee Lite"
bokunimowakaru 0:d72830877d98 138 #define COPYRIGHT "by Wataru & Ran"
bokunimowakaru 0:d72830877d98 139 #else
bokunimowakaru 0:d72830877d98 140 #define NAME "ZB Coord"
bokunimowakaru 0:d72830877d98 141 #define COPYRIGHT "by Wataru KUNINO"
bokunimowakaru 0:d72830877d98 142 #endif
bokunimowakaru 0:d72830877d98 143 #endif
bokunimowakaru 0:d72830877d98 144
bokunimowakaru 0:d72830877d98 145 #ifdef H3694
bokunimowakaru 0:d72830877d98 146 #define ERRLOG
bokunimowakaru 0:d72830877d98 147 #define LED1_OUT IO.PDR8.BIT.B0 // LED赤の接続ポート(エラー用)
bokunimowakaru 0:d72830877d98 148 #define LED2_OUT IO.PDR8.BIT.B1 // LED緑の接続ポート(動作確認用)
bokunimowakaru 0:d72830877d98 149 #define LCD_EN IO.PDR8.BIT.B6 // 液晶用電源
bokunimowakaru 0:d72830877d98 150 #define BUTN IO.PDR8.BIT.B2 // ボタンの接続ポート
bokunimowakaru 0:d72830877d98 151 #define SCI_SIZE 256 // シリアルデータ長(大きすぎるとRAMが不足する)
bokunimowakaru 0:d72830877d98 152 #define API_SIZE 128 // 受信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 153 #define API_TXSIZE 64 // 送信用APIデータ長(32~255)兼シリアル送信最大長
bokunimowakaru 0:d72830877d98 154 #define CALL_SIZE 32 // xbee_rx_call用戻りデータ(10~256)
bokunimowakaru 0:d72830877d98 155 #define XB_AT_SIZE 32 // ATコマンドの最大長
bokunimowakaru 0:d72830877d98 156 #elif ARDUINO
bokunimowakaru 0:d72830877d98 157 // #define LED1_OUT 15 // 赤色LED(エラー用)用デジタルポート(15=analog 1)
bokunimowakaru 0:d72830877d98 158 // #define LED2_OUT 16 // 緑色LED(動作確認用)用デジタルポート(16=analog 2)
bokunimowakaru 0:d72830877d98 159 // #define LCD_EN 6 // 液晶用電源デジタルポート
bokunimowakaru 0:d72830877d98 160 // #define BUTN 14 // ボタンの接続ポート(14 = analog 0)
bokunimowakaru 0:d72830877d98 161 #ifdef LITE
bokunimowakaru 0:d72830877d98 162 #define API_SIZE 48 // 受信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 163 #define API_TXSIZE 34 // 送信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 164 #define CALL_SIZE 16 // xbee_rx_call用戻りデータ(10~256)
bokunimowakaru 0:d72830877d98 165 #define XB_AT_SIZE 16 // ATコマンドの最大長
bokunimowakaru 0:d72830877d98 166 #else
bokunimowakaru 0:d72830877d98 167 #define CACHE_RES 2 // 応答時のキャッシュ数(無効にするには定義を消す)
bokunimowakaru 0:d72830877d98 168 #define API_SIZE 64 // 受信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 169 #define API_TXSIZE 64 // 送信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 170 #define CALL_SIZE 32 // xbee_rx_call用戻りデータ(10~256)
bokunimowakaru 0:d72830877d98 171 #define XB_AT_SIZE 32 // ATコマンドの最大長
bokunimowakaru 0:d72830877d98 172 #endif
bokunimowakaru 0:d72830877d98 173 #define LIGHT 1
bokunimowakaru 0:d72830877d98 174 #define TEMP 2
bokunimowakaru 0:d72830877d98 175 #define HUMIDITY 3
bokunimowakaru 0:d72830877d98 176 #define WATT 4
bokunimowakaru 0:d72830877d98 177 #define BATT 5
bokunimowakaru 0:d72830877d98 178 #define DISABLE 0
bokunimowakaru 0:d72830877d98 179 #define VENDER 1
bokunimowakaru 0:d72830877d98 180 #define AIN 2
bokunimowakaru 0:d72830877d98 181 #define DIN 3
bokunimowakaru 0:d72830877d98 182 #define DOUT_L 4
bokunimowakaru 0:d72830877d98 183 #define DOUT_H 5
bokunimowakaru 0:d72830877d98 184 #else
bokunimowakaru 0:d72830877d98 185 #ifdef ARM_MBED // ARM <条件は調整していない。ほぼArduinoのまま>
bokunimowakaru 0:d72830877d98 186 #define CACHE_RES 3 // 応答時のキャッシュ数(無効にするには定義を消す)
bokunimowakaru 0:d72830877d98 187 #define API_SIZE 64 // 受信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 188 #define API_TXSIZE 64 // 送信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 189 #define CALL_SIZE 32 // xbee_rx_call用戻りデータ(10~256)
bokunimowakaru 0:d72830877d98 190 #define XB_AT_SIZE 32 // ATコマンドの最大長
bokunimowakaru 0:d72830877d98 191 #define delay(ms) wait_millisec(ms) // 関数名の複製
bokunimowakaru 0:d72830877d98 192 #define LIGHT 1
bokunimowakaru 0:d72830877d98 193 #define TEMP 2
bokunimowakaru 0:d72830877d98 194 #define HUMIDITY 3
bokunimowakaru 0:d72830877d98 195 #define WATT 4
bokunimowakaru 0:d72830877d98 196 #define BATT 5
bokunimowakaru 0:d72830877d98 197 #define DISABLE 0
bokunimowakaru 0:d72830877d98 198 #define VENDER 1
bokunimowakaru 0:d72830877d98 199 #define AIN 2
bokunimowakaru 0:d72830877d98 200 #define DIN 3
bokunimowakaru 0:d72830877d98 201 #define DOUT_L 4
bokunimowakaru 0:d72830877d98 202 #define DOUT_H 5
bokunimowakaru 0:d72830877d98 203 #else // PC
bokunimowakaru 0:d72830877d98 204 // #define DEBUG // デバッグモード
bokunimowakaru 0:d72830877d98 205 // #define DEBUG_TX // 送信パケットの表示
bokunimowakaru 0:d72830877d98 206 // #define DEBUG_RX // 受信パケットの表示
bokunimowakaru 0:d72830877d98 207 #define ERRLOG // エラー時にログを出力
bokunimowakaru 0:d72830877d98 208 // #define XBEE_ERROR_TIME // エラー時のログに日時を付与
bokunimowakaru 0:d72830877d98 209 #ifdef LITE
bokunimowakaru 0:d72830877d98 210 #define API_SIZE 48 // 受信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 211 #define API_TXSIZE 34 // 送信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 212 #define CALL_SIZE 16 // xbee_rx_call用戻りデータ(10~256)
bokunimowakaru 0:d72830877d98 213 #define XB_AT_SIZE 16 // ATコマンドの最大長
bokunimowakaru 0:d72830877d98 214 #else
bokunimowakaru 0:d72830877d98 215 #define CACHE_RES 5 // 応答時のキャッシュ数(無効にするには定義を消す)
bokunimowakaru 0:d72830877d98 216 #define API_SIZE 128 // 受信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 217 #define API_TXSIZE 64 // 送信用APIデータ長(32~255)
bokunimowakaru 0:d72830877d98 218 #define CALL_SIZE 64 // xbee_rx_call用戻りデータ(10~256)
bokunimowakaru 0:d72830877d98 219 #define XB_AT_SIZE 32 // ATコマンドの最大長
bokunimowakaru 0:d72830877d98 220 #define delay(ms) wait_millisec(ms) // 関数名の複製
bokunimowakaru 0:d72830877d98 221 #endif
bokunimowakaru 0:d72830877d98 222 #endif
bokunimowakaru 0:d72830877d98 223 #endif
bokunimowakaru 0:d72830877d98 224 #define TIME_DEL 3 // デリミタ検出のタイムアウト時間(秒)
bokunimowakaru 0:d72830877d98 225 #define MODE_AUTO 0x00 // 自動受信モード
bokunimowakaru 0:d72830877d98 226 #define MODE_GPIN 0x92 // GPI data を受信するモード
bokunimowakaru 0:d72830877d98 227 #define MODE_UART 0x90 // UART data を受信するモード
bokunimowakaru 0:d72830877d98 228 #define MODE_UAR2 0x91 // UART data を受信するモード2(AO=1)
bokunimowakaru 0:d72830877d98 229 #define MODE_SENS 0x94 // XB Sensorを受信するモード(1wire専用→通常のSensorはATISを使用)
bokunimowakaru 0:d72830877d98 230 #define MODE_IDNT 0x95 // Node Identifyを受信するモード
bokunimowakaru 0:d72830877d98 231 #define MODE_RES 0x88 // ローカルATコマンドの結果を受信
bokunimowakaru 0:d72830877d98 232 #define MODE_RESP 0x97 // リモートATコマンドの結果を受信(仕様書はATNDで説明ATISもこれ)
bokunimowakaru 0:d72830877d98 233 #define MODE_MODM 0x8A // Modem Statusを受信
bokunimowakaru 0:d72830877d98 234 #define MODE_TXST 0x8B // UART Transmit Status を受信
bokunimowakaru 0:d72830877d98 235 #define MODE_BATT 0xE1 // (独自定義)バッテリステータス RAT%Vの応答時
bokunimowakaru 0:d72830877d98 236 // XBeeのFrame Typeに準拠する。
bokunimowakaru 0:d72830877d98 237 // 注意:モードを増やしたときはxbee_from_acumとxbee_rx_call内の対応を追加すること
bokunimowakaru 0:d72830877d98 238 // 独自定義の時はxbee_rx_call内のみ。
bokunimowakaru 0:d72830877d98 239 // MODE値はenum定義にしない。
bokunimowakaru 0:d72830877d98 240
bokunimowakaru 0:d72830877d98 241 #define STATUS_OK 0x00 // ATコマンドの結果がOK
bokunimowakaru 0:d72830877d98 242 #define STATUS_ERR 0x01 // ATコマンドの結果がERROR
bokunimowakaru 0:d72830877d98 243 #define STATUS_ERR_AT 0x02 // 指定されたATコマンドに誤りがある
bokunimowakaru 0:d72830877d98 244 #define STATUS_ERR_PARM 0x03 // 指定されたパラメータに誤りがある
bokunimowakaru 0:d72830877d98 245 #define STATUS_ERR_AIR 0x04 // リモートATコマンドの送信の失敗(相手が応答しない)
bokunimowakaru 0:d72830877d98 246
bokunimowakaru 0:d72830877d98 247 #define MODM_RESET 0x01 // ローカルのXBeeがリセットした
bokunimowakaru 0:d72830877d98 248 #define MODM_WATCHDOG 0x02 // ローカルのXBeeがWatch dogタイマーによってリセットした
bokunimowakaru 0:d72830877d98 249 #define MODM_JOINED 0x03 // (RouterまたはEnd Deviceで使用しているときに)ネットワークJoinした
bokunimowakaru 0:d72830877d98 250 #define MODM_LEFT 0x04 // ネットワークからdis_assosiateした
bokunimowakaru 0:d72830877d98 251 #define MODM_STARTED 0x06 // (coordinatorで使用しているときに)Coordinatorを開始した
bokunimowakaru 0:d72830877d98 252
bokunimowakaru 0:d72830877d98 253 #define DEV_TYPE_XBEE 0x00 // XBeeモジュール
bokunimowakaru 0:d72830877d98 254 #define DEV_TYPE_RS232 0x05 // RS-232Cアダプタ
bokunimowakaru 0:d72830877d98 255 #define DEV_TYPE_SENS 0x07 // Sensor (1wire専用)
bokunimowakaru 0:d72830877d98 256 #define DEV_TYPE_WALL 0x08 // Wall Router
bokunimowakaru 0:d72830877d98 257 #define DEV_TYPE_SEN_LT 0x0E // Sensor (照度・温度)
bokunimowakaru 0:d72830877d98 258 #define DEV_TYPE_SEN_LTH 0x0D // Sensor (照度・温度・湿度)
bokunimowakaru 0:d72830877d98 259 #define DEV_TYPE_PLUG 0x0F // Smart Plug
bokunimowakaru 0:d72830877d98 260
bokunimowakaru 0:d72830877d98 261 #define ZB_TYPE_COORD 0x21 // ZigBee Coordinator
bokunimowakaru 0:d72830877d98 262 #define ZB_TYPE_ROUTER 0x23 // ZigBee Router
bokunimowakaru 0:d72830877d98 263 #define ZB_TYPE_ENDDEV 0x29 // ZigBee End Device
bokunimowakaru 0:d72830877d98 264 #define XB_TYPE_NULL 0x00 // XBee Wi-Fi バージョン未取得
bokunimowakaru 0:d72830877d98 265 #define XB_TYPE_WIFI10 0x10 // XBee Wi-Fi Ver. 10xx
bokunimowakaru 0:d72830877d98 266 #define XB_TYPE_WIFI20 0x20 // XBee Wi-Fi Ver. 20xx
bokunimowakaru 0:d72830877d98 267
bokunimowakaru 0:d72830877d98 268 #define NET_ADR FFFE // ネットワークアドレス
bokunimowakaru 0:d72830877d98 269 #endif
bokunimowakaru 0:d72830877d98 270
bokunimowakaru 0:d72830877d98 271
bokunimowakaru 0:d72830877d98 272 /*********************************************************************
bokunimowakaru 0:d72830877d98 273 型の定義
bokunimowakaru 0:d72830877d98 274 *********************************************************************/
bokunimowakaru 0:d72830877d98 275
bokunimowakaru 0:d72830877d98 276 #ifdef ARDUINO
bokunimowakaru 0:d72830877d98 277 typedef struct{
bokunimowakaru 0:d72830877d98 278 public:
bokunimowakaru 0:d72830877d98 279 byte MODE; // 受信モード(Frame Type)
bokunimowakaru 0:d72830877d98 280 byte FROM[8]; // 送信元IEEEアドレス
bokunimowakaru 0:d72830877d98 281 byte AT[2]; // ATコマンド
bokunimowakaru 0:d72830877d98 282 byte ID; // 応答パケットID(Frame ID)
bokunimowakaru 0:d72830877d98 283 byte STATUS; // 応答結果(0:OK 1:ERROR)/AT結果/UART状態
bokunimowakaru 0:d72830877d98 284 union { // GPIOデータ
bokunimowakaru 0:d72830877d98 285 byte BYTE[2];
bokunimowakaru 0:d72830877d98 286 struct { // バイト毎に下位ビットから代入(リトルエンディアン)
bokunimowakaru 0:d72830877d98 287 byte D0 :1; byte D1 :1; byte D2 :1; byte D3 :1; // BYTE[1]
bokunimowakaru 0:d72830877d98 288 byte D4 :1; byte D5 :1; byte D6 :1; byte D7 :1;
bokunimowakaru 0:d72830877d98 289 byte :1; byte :1; byte D10:1; byte D11:1; // BYTE[0]
bokunimowakaru 0:d72830877d98 290 byte D12:1; byte :1; byte :1; byte :1;
bokunimowakaru 0:d72830877d98 291 } PORT;
bokunimowakaru 0:d72830877d98 292 } GPI;
bokunimowakaru 0:d72830877d98 293 // byte GPI[2]; // GPIOデータ
bokunimowakaru 0:d72830877d98 294 unsigned int ADCIN[4]; // ADCデータ
bokunimowakaru 0:d72830877d98 295 byte DATA[CALL_SIZE]; // ペイロードデータ/ZCLヘッダ+受信データ
bokunimowakaru 0:d72830877d98 296 } XBEE_RESULT; // 構造体の型名
bokunimowakaru 0:d72830877d98 297 #endif
bokunimowakaru 0:d72830877d98 298 #ifdef ARM_MBED
bokunimowakaru 0:d72830877d98 299 typedef unsigned char byte;
bokunimowakaru 0:d72830877d98 300 typedef struct{
bokunimowakaru 0:d72830877d98 301 public:
bokunimowakaru 0:d72830877d98 302 byte MODE; // 受信モード(Frame Type)
bokunimowakaru 0:d72830877d98 303 byte FROM[8]; // 送信元IEEEアドレス
bokunimowakaru 0:d72830877d98 304 byte AT[2]; // ATコマンド
bokunimowakaru 0:d72830877d98 305 byte ID; // 応答パケットID(Frame ID)
bokunimowakaru 0:d72830877d98 306 byte STATUS; // 応答結果(0:OK 1:ERROR)/AT結果/UART状態
bokunimowakaru 0:d72830877d98 307 union { // GPIOデータ
bokunimowakaru 0:d72830877d98 308 byte BYTE[2];
bokunimowakaru 0:d72830877d98 309 struct { // バイト毎に下位ビットから代入(リトルエンディアン)
bokunimowakaru 0:d72830877d98 310 byte D0 :1; byte D1 :1; byte D2 :1; byte D3 :1; // BYTE[1]
bokunimowakaru 0:d72830877d98 311 byte D4 :1; byte D5 :1; byte D6 :1; byte D7 :1;
bokunimowakaru 0:d72830877d98 312 byte :1; byte :1; byte D10:1; byte D11:1; // BYTE[0]
bokunimowakaru 0:d72830877d98 313 byte D12:1; byte :1; byte :1; byte :1;
bokunimowakaru 0:d72830877d98 314 } PORT;
bokunimowakaru 0:d72830877d98 315 } GPI;
bokunimowakaru 0:d72830877d98 316 // byte GPI[2]; // GPIOデータ
bokunimowakaru 0:d72830877d98 317 unsigned int ADCIN[4]; // ADCデータ
bokunimowakaru 0:d72830877d98 318 byte DATA[CALL_SIZE]; // 受信データ
bokunimowakaru 0:d72830877d98 319 } XBEE_RESULT; // 構造体の型名
bokunimowakaru 0:d72830877d98 320 #endif
bokunimowakaru 0:d72830877d98 321
bokunimowakaru 0:d72830877d98 322 /*********************************************************************
bokunimowakaru 0:d72830877d98 323 アプリ向け hardware 提供関数
bokunimowakaru 0:d72830877d98 324 *********************************************************************/
bokunimowakaru 0:d72830877d98 325
bokunimowakaru 0:d72830877d98 326 /* GPIO */
bokunimowakaru 0:d72830877d98 327 #ifndef ARDUINO
bokunimowakaru 0:d72830877d98 328 #ifndef ARM_MBED
bokunimowakaru 0:d72830877d98 329 byte led_red( const byte in );
bokunimowakaru 0:d72830877d98 330 byte led_green( const byte in );
bokunimowakaru 0:d72830877d98 331 byte button( void );
bokunimowakaru 0:d72830877d98 332 #endif
bokunimowakaru 0:d72830877d98 333 #endif
bokunimowakaru 0:d72830877d98 334
bokunimowakaru 0:d72830877d98 335 /* Timer */
bokunimowakaru 0:d72830877d98 336 #ifndef ARDUINO
bokunimowakaru 0:d72830877d98 337 #ifndef ARM_MBED
bokunimowakaru 0:d72830877d98 338 void wait_millisec( const int ms );
bokunimowakaru 0:d72830877d98 339 #endif
bokunimowakaru 0:d72830877d98 340 #endif
bokunimowakaru 0:d72830877d98 341
bokunimowakaru 0:d72830877d98 342 /* misc */
bokunimowakaru 0:d72830877d98 343 byte bytecmp(byte *s1, const byte *s2, byte size);
bokunimowakaru 0:d72830877d98 344 #ifndef ARDUINO
bokunimowakaru 0:d72830877d98 345 #ifndef ARM_MBED
bokunimowakaru 0:d72830877d98 346 void strcopy(char *s1, const char *s2);
bokunimowakaru 0:d72830877d98 347 void bytecpy(byte *s1, const byte *s2, byte size);
bokunimowakaru 0:d72830877d98 348 #endif
bokunimowakaru 0:d72830877d98 349 #endif
bokunimowakaru 0:d72830877d98 350
bokunimowakaru 0:d72830877d98 351 /* LCD */
bokunimowakaru 0:d72830877d98 352 #ifdef LCD_H
bokunimowakaru 0:d72830877d98 353 void lcd_cls(void);
bokunimowakaru 0:d72830877d98 354 void lcd_home(void);
bokunimowakaru 0:d72830877d98 355 void lcd_control(byte disonoff, byte curonoff, byte curblink);
bokunimowakaru 0:d72830877d98 356 void lcd_goto(const byte mesto);
bokunimowakaru 0:d72830877d98 357 void lcd_shift(const byte data);
bokunimowakaru 0:d72830877d98 358 void lcd_putch(const char data);
bokunimowakaru 0:d72830877d98 359 void lcd_putstr(const char *data);
bokunimowakaru 0:d72830877d98 360 void lcd_disp_bin(const byte x);
bokunimowakaru 0:d72830877d98 361 void lcd_disp_hex(const byte i);
bokunimowakaru 0:d72830877d98 362 void lcd_disp_1(const unsigned int x);
bokunimowakaru 0:d72830877d98 363 void lcd_disp_2(unsigned int x);
bokunimowakaru 0:d72830877d98 364 void lcd_disp_3(unsigned int x);
bokunimowakaru 0:d72830877d98 365 void lcd_disp_5(unsigned int x);
bokunimowakaru 0:d72830877d98 366 void lcd_init(void);
bokunimowakaru 0:d72830877d98 367 void lcd_disp( const char *s );
bokunimowakaru 0:d72830877d98 368 #endif
bokunimowakaru 0:d72830877d98 369
bokunimowakaru 0:d72830877d98 370 /*********************************************************************
bokunimowakaru 0:d72830877d98 371 private xbee ドライバ関数
bokunimowakaru 0:d72830877d98 372 *********************************************************************/
bokunimowakaru 0:d72830877d98 373
bokunimowakaru 0:d72830877d98 374 /* XBeeドライバ関数 */
bokunimowakaru 0:d72830877d98 375 /* byte xbee_at_tx(const char *at, const byte *value, const byte value_len);
bokunimowakaru 0:d72830877d98 376 byte xbee_at_rx(byte *data);
bokunimowakaru 0:d72830877d98 377 byte xbee_from_acum( const byte *data );
bokunimowakaru 0:d72830877d98 378 byte xbee_gpi_acum( byte *data );
bokunimowakaru 0:d72830877d98 379 byte xbee_uart_acum( byte *data );
bokunimowakaru 0:d72830877d98 380 #ifdef EASY
bokunimowakaru 0:d72830877d98 381 float xbee_sensor_acum( const byte *data, const enum xbee_sensor_type type );
bokunimowakaru 0:d72830877d98 382 #endif
bokunimowakaru 0:d72830877d98 383 byte xbee_tx_rx(const char *at, byte *data, byte len);
bokunimowakaru 0:d72830877d98 384 void xbee_reset( void );
bokunimowakaru 0:d72830877d98 385 */
bokunimowakaru 0:d72830877d98 386
bokunimowakaru 0:d72830877d98 387 /* XBee用 UART出力API */
bokunimowakaru 0:d72830877d98 388 #ifndef LITE
bokunimowakaru 0:d72830877d98 389 byte xbee_putch( const char c );
bokunimowakaru 0:d72830877d98 390 #endif
bokunimowakaru 0:d72830877d98 391 byte xbee_putstr( const char *s );
bokunimowakaru 0:d72830877d98 392 #ifndef LITE
bokunimowakaru 0:d72830877d98 393 void xbee_disp_hex( const unsigned char i );
bokunimowakaru 0:d72830877d98 394 void xbee_disp_1( const unsigned int x );
bokunimowakaru 0:d72830877d98 395 void xbee_disp_2( unsigned int x );
bokunimowakaru 0:d72830877d98 396 void xbee_disp_3(unsigned int x);
bokunimowakaru 0:d72830877d98 397 void xbee_disp_5(unsigned int x);
bokunimowakaru 0:d72830877d98 398 #endif
bokunimowakaru 0:d72830877d98 399 void xbee_log( byte level, const char *err , const byte x );
bokunimowakaru 0:d72830877d98 400
bokunimowakaru 0:d72830877d98 401 /*********************************************************************
bokunimowakaru 0:d72830877d98 402 アプリ向け xbee 提供関数
bokunimowakaru 0:d72830877d98 403 *********************************************************************/
bokunimowakaru 0:d72830877d98 404
bokunimowakaru 0:d72830877d98 405 byte xbee_myaddress( byte *address );
bokunimowakaru 0:d72830877d98 406 void xbee_address( const byte *address );
bokunimowakaru 0:d72830877d98 407 byte xbee_atd( const byte *address );
bokunimowakaru 0:d72830877d98 408 byte xbee_ratd(const byte *dev_address, const byte *set_address );
bokunimowakaru 0:d72830877d98 409 byte xbee_ratd_myaddress(const byte *address);
bokunimowakaru 0:d72830877d98 410 #define xbee_set_myaddress(adr) xbee_ratd_myaddress(adr)
bokunimowakaru 0:d72830877d98 411 void xbee_from( byte *address );
bokunimowakaru 0:d72830877d98 412 byte xbee_at(const char *in);
bokunimowakaru 0:d72830877d98 413 byte xbee_rat(const byte *address, const char *in);
bokunimowakaru 0:d72830877d98 414 byte xbee_rat_force(const byte *address, const char *in);
bokunimowakaru 0:d72830877d98 415 byte xbee_uart(const byte *address, const char *in);
bokunimowakaru 0:d72830877d98 416 byte xbee_bytes(const byte *address, const byte *in, byte len);
bokunimowakaru 0:d72830877d98 417 byte xbee_atvr( void );
bokunimowakaru 0:d72830877d98 418 byte xbee_atai( void );
bokunimowakaru 0:d72830877d98 419 byte xbee_atcb( byte cb );
bokunimowakaru 0:d72830877d98 420 unsigned short xbee_atop(byte *pan_id);
bokunimowakaru 0:d72830877d98 421 byte xbee_atee_on(const char *key );
bokunimowakaru 0:d72830877d98 422 byte xbee_atee_off( void );
bokunimowakaru 0:d72830877d98 423 byte xbee_atnc( void );
bokunimowakaru 0:d72830877d98 424 byte xbee_ratnc( const byte *address );
bokunimowakaru 0:d72830877d98 425 byte xbee_atnj( const byte timeout );
bokunimowakaru 0:d72830877d98 426 byte xbee_ratnj( const byte *address, const byte timeout );
bokunimowakaru 0:d72830877d98 427 byte xbee_ping( const byte *address );
bokunimowakaru 0:d72830877d98 428 int xbee_batt(const byte *address );
bokunimowakaru 0:d72830877d98 429 byte xbee_batt_force(const byte *address );
bokunimowakaru 0:d72830877d98 430 #ifdef ARDUINO // Arduino用
bokunimowakaru 0:d72830877d98 431 byte xbee_gpio_config(const byte *address, const byte port, const byte type );
bokunimowakaru 0:d72830877d98 432 #else
bokunimowakaru 0:d72830877d98 433 #ifdef ARM_MBED
bokunimowakaru 0:d72830877d98 434 byte xbee_gpio_config(const byte *address, const byte port, const byte type );
bokunimowakaru 0:d72830877d98 435 #else // PC/H8用
bokunimowakaru 0:d72830877d98 436 byte xbee_gpio_config(const byte *address, const byte port, const enum xbee_port_type type );
bokunimowakaru 0:d72830877d98 437 #endif
bokunimowakaru 0:d72830877d98 438 #endif
bokunimowakaru 0:d72830877d98 439 byte xbee_gpio_init( const byte *address );
bokunimowakaru 0:d72830877d98 440 byte xbee_gpo( const byte *address, const byte port,const byte out );
bokunimowakaru 0:d72830877d98 441 #ifdef EASY_GPI
bokunimowakaru 0:d72830877d98 442 byte xbee_gpi(const byte *address, const byte port);
bokunimowakaru 0:d72830877d98 443 #endif
bokunimowakaru 0:d72830877d98 444 #ifdef EASY_ADC
bokunimowakaru 0:d72830877d98 445 unsigned int xbee_adc(const byte *address, const byte port);
bokunimowakaru 0:d72830877d98 446 #endif
bokunimowakaru 0:d72830877d98 447 byte xbee_force( const byte *address );
bokunimowakaru 0:d72830877d98 448 #ifdef ARDUINO // Arduino用
bokunimowakaru 0:d72830877d98 449 float xbee_sensor_result( XBEE_RESULT *xbee_result, const byte type);
bokunimowakaru 0:d72830877d98 450 #else
bokunimowakaru 0:d72830877d98 451 #ifdef ARM_MBED
bokunimowakaru 0:d72830877d98 452 float xbee_sensor_result( XBEE_RESULT *xbee_result, const byte type);
bokunimowakaru 0:d72830877d98 453 #else // PC/H8用
bokunimowakaru 0:d72830877d98 454 float xbee_sensor_result( XBEE_RESULT *xbee_result, const enum xbee_sensor_type type );
bokunimowakaru 0:d72830877d98 455 #ifdef EASY_SENSOR
bokunimowakaru 0:d72830877d98 456 xbee_sensor(const byte *address, const enum xbee_sensor_type type );
bokunimowakaru 0:d72830877d98 457 #endif
bokunimowakaru 0:d72830877d98 458 #endif
bokunimowakaru 0:d72830877d98 459 #endif
bokunimowakaru 0:d72830877d98 460 byte xbee_rx_call( XBEE_RESULT *xbee_result );
bokunimowakaru 0:d72830877d98 461 void xbee_clear_cache(void);
bokunimowakaru 0:d72830877d98 462 byte xbee_init( const byte port );
bokunimowakaru 0:d72830877d98 463 byte xbee_reset( void );
bokunimowakaru 0:d72830877d98 464 byte xbee_end_device(const byte *address, byte sp, byte ir, const byte pin);
bokunimowakaru 0:d72830877d98 465 #ifndef LITE
bokunimowakaru 0:d72830877d98 466 byte xbee_i2c_init(const byte *address);
bokunimowakaru 0:d72830877d98 467 byte xbee_i2c_read(const byte *address, byte adr, byte *rx, byte len);
bokunimowakaru 0:d72830877d98 468 byte xbee_i2c_write(const byte *address, byte adr, byte *rx, byte len);
bokunimowakaru 0:d72830877d98 469 #endif
bokunimowakaru 0:d72830877d98 470 byte xbee_delay(unsigned int ms);
bokunimowakaru 0:d72830877d98 471 #endif // XBEE_H
bokunimowakaru 0:d72830877d98 472