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.h
00001 #define ARM_MBED 00002 /********************************************************************* 00003 本ソースリストおよびソフトウェアは、ライセンスフリーです。 00004 利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。 00005 00006 Copyright (c) 2010-2014 Wataru KUNINO 00007 http://www.geocities.jp/bokunimowakaru/ 00008 *********************************************************************/ 00009 00010 /********************************************************************* 00011 インポート処理 ※ライブラリ xbee.inoに必要な宣言です 00012 *********************************************************************/ 00013 #ifndef XBEE_H 00014 #define XBEE_H 00015 00016 #ifndef LCD_TYPE_H 00017 #define LCD_TYPE_H 00018 #ifdef ARDUINO 00019 #if defined(__AVR_ATmega32U4__) 00020 #define LEONARDO // Arduino LEONARDを使用する場合に自動的に定義されます。 00021 #endif 00022 // #define LCD_H // 本ライブラリ動作を液晶表示する場合に定義する 00023 // #define ADAFRUIT // 使用する液晶が Adafruit LCD Sheild の時に定義する 00024 #else // H8 or ARM or PC 00025 #ifndef ARM_MBED // H8 or PC 00026 #define LCD_H 00027 #endif 00028 #endif 00029 // #define XBEE_WIFI // XBee Wi-Fiを使用するときに定義する 00030 // #define XBEE_WIFI_DEBUG 00031 // #define LITE // ライトモード(メモリ節約・機能制限)の時に定義する 00032 #define EASY_GPI // xbee_gpi関数(リモートGPIO)を使用するときに定義する 00033 #define EASY_ADC // xbee_adc関数(リモートADC)を使用するときに定義する 00034 #endif 00035 00036 #ifndef XB_IMPORT_H 00037 #ifdef H3694 00038 #ifndef __3694_H__ 00039 #include <3694.h> 00040 #endif 00041 #ifdef LCD_H 00042 #ifndef LCD_ROW_1 00043 #include "lcd_h8.c" 00044 #endif 00045 #endif 00046 /* // lcd_h8ライブラリの関数 00047 void lcd_delay(unsigned int data); 00048 void lcd_toggle_E(void); 00049 void lcd_cls(void); 00050 void lcd_home(void); 00051 void lcd_control(unsigned char disonoff, unsigned char curonoff, unsigned char curblink); 00052 void lcd_goto(unsigned char mesto); 00053 void lcd_shift(unsigned char data); 00054 void lcd_putch(char data); 00055 void lcd_putstr(const char *data); 00056 void lcd_disp_bin(unsigned char x); 00057 void lcd_disp_hex(unsigned char i); 00058 void lcd_disp_1(unsigned int x); 00059 void lcd_disp_2(unsigned int x); 00060 void lcd_disp_3(unsigned int x); 00061 void lcd_disp_5(unsigned int x); 00062 void lcd_init(void); 00063 */ 00064 #elif ARDUINO 00065 // #include <inttypes.h> 00066 #include "Arduino.h" 00067 // #include "WProgram.h" // #if ARDUINO < 100 00068 #ifdef LCD_H 00069 #ifndef ADAFRUIT 00070 // 通常のキャラクタLCDの場合 00071 #include <LiquidCrystal.h> 00072 #else 00073 // Adafruit I2C接続LCDの場合(Adafruit_RGBLCDShieldライブラリが必要) 00074 #include <Wire.h> 00075 #include <Adafruit_MCP23017.h> 00076 #include <Adafruit_RGBLCDShield.h> 00077 #endif 00078 #endif 00079 #ifdef XBEE_WIFI 00080 #include <SPI.h> 00081 #include <Ethernet.h> 00082 #include <EthernetUdp.h> 00083 #endif 00084 #ifndef LCD_ROW_1 00085 #define LCD_ROW_1 0x00 //1行目先頭アドレス 00086 #define LCD_ROW_2 0x40 //2行目先頭アドレス 00087 #define LCD_ROW_3 0x14 //3行目先頭アドレス 00088 #define LCD_ROW_4 0x54 //4行目先頭アドレス 00089 #endif 00090 #else 00091 #ifdef ARM_MBED // ARM 00092 #include "mbed.h" 00093 #ifdef DEBUG 00094 #define LCD_H 00095 #define ERRLOG 00096 #define LCD_ROW_1 0x00 //1行目先頭アドレス 00097 #define LCD_ROW_2 0x40 //2行目先頭アドレス 00098 #define LCD_ROW_3 0x14 //3行目先頭アドレス 00099 #define LCD_ROW_4 0x54 //4行目先頭アドレス 00100 #endif 00101 #else // PC 00102 #include <stdio.h> 00103 #include <stdlib.h> 00104 #include <string.h> 00105 #include <termios.h> 00106 #include <sys/signal.h> 00107 #include <sys/time.h> 00108 #include <fcntl.h> 00109 #include <unistd.h> 00110 #include <arpa/inet.h> 00111 #ifdef XBEE_WIFI 00112 #include <sys/types.h> 00113 #include <sys/socket.h> 00114 #include <netinet/in.h> 00115 #include <ctype.h> 00116 #include <sys/ioctl.h> 00117 #include <string.h> 00118 #endif 00119 #define BAUDRATE B9600 00120 #ifndef LCD_ROW_1 00121 #include "lcd_pc.c" 00122 #endif 00123 #include <time.h> // クロックタイマー用 00124 #endif 00125 #endif 00126 #define xbee_set_myaddress(adr) xbee_ratd_myaddress(adr) 00127 #endif 00128 00129 /********************************************************************* 00130 定数の設定 ※ライブラリ xbee.inoに必要な宣言です 00131 *********************************************************************/ 00132 #ifndef XB_DEFINE_H 00133 #define XB_DEFINE_H 00134 #ifndef NAME 00135 #ifdef LITE // BeeBee Lite by 蘭 00136 #define NAME "BeeBee Lite" 00137 #define COPYRIGHT "by Wataru & Ran" 00138 #else 00139 #define NAME "ZB Coord" 00140 #define COPYRIGHT "by Wataru KUNINO" 00141 #endif 00142 #endif 00143 00144 #ifdef H3694 00145 #define ERRLOG 00146 #define LED1_OUT IO.PDR8.BIT.B0 // LED赤の接続ポート(エラー用) 00147 #define LED2_OUT IO.PDR8.BIT.B1 // LED緑の接続ポート(動作確認用) 00148 #define LCD_EN IO.PDR8.BIT.B6 // 液晶用電源 00149 #define BUTN IO.PDR8.BIT.B2 // ボタンの接続ポート 00150 #define SCI_SIZE 256 // シリアルデータ長(大きすぎるとRAMが不足する) 00151 #define API_SIZE 128 // 受信用APIデータ長(32~255) 00152 #define API_TXSIZE 64 // 送信用APIデータ長(32~255)兼シリアル送信最大長 00153 #define CALL_SIZE 32 // xbee_rx_call用戻りデータ(10~256) 00154 #define XB_AT_SIZE 32 // ATコマンドの最大長 00155 #elif ARDUINO 00156 // #define LED1_OUT 15 // 赤色LED(エラー用)用デジタルポート(15=analog 1) 00157 // #define LED2_OUT 16 // 緑色LED(動作確認用)用デジタルポート(16=analog 2) 00158 // #define LCD_EN 6 // 液晶用電源デジタルポート 00159 // #define BUTN 14 // ボタンの接続ポート(14 = analog 0) 00160 #ifdef LITE 00161 #define API_SIZE 48 // 受信用APIデータ長(32~255) 00162 #define API_TXSIZE 34 // 送信用APIデータ長(32~255) 00163 #define CALL_SIZE 16 // xbee_rx_call用戻りデータ(10~256) 00164 #define XB_AT_SIZE 16 // ATコマンドの最大長 00165 #else 00166 #define CACHE_RES 2 // 応答時のキャッシュ数(無効にするには定義を消す) 00167 #define API_SIZE 64 // 受信用APIデータ長(32~255) 00168 #define API_TXSIZE 64 // 送信用APIデータ長(32~255) 00169 #define CALL_SIZE 32 // xbee_rx_call用戻りデータ(10~256) 00170 #define XB_AT_SIZE 32 // ATコマンドの最大長 00171 #endif 00172 #define LIGHT 1 00173 #define TEMP 2 00174 #define HUMIDITY 3 00175 #define WATT 4 00176 #define BATT 5 00177 #define DISABLE 0 00178 #define VENDER 1 00179 #define AIN 2 00180 #define DIN 3 00181 #define DOUT_L 4 00182 #define DOUT_H 5 00183 #else 00184 #ifdef ARM_MBED // ARM <条件は調整していない。ほぼArduinoのまま> 00185 #define CACHE_RES 3 // 応答時のキャッシュ数(無効にするには定義を消す) 00186 #define API_SIZE 64 // 受信用APIデータ長(32~255) 00187 #define API_TXSIZE 64 // 送信用APIデータ長(32~255) 00188 #define CALL_SIZE 32 // xbee_rx_call用戻りデータ(10~256) 00189 #define XB_AT_SIZE 32 // ATコマンドの最大長 00190 #define delay(ms) wait_millisec(ms) // 関数名の複製 00191 #define LIGHT 1 00192 #define TEMP 2 00193 #define HUMIDITY 3 00194 #define WATT 4 00195 #define BATT 5 00196 #define DISABLE 0 00197 #define VENDER 1 00198 #define AIN 2 00199 #define DIN 3 00200 #define DOUT_L 4 00201 #define DOUT_H 5 00202 #else // PC 00203 // #define DEBUG // デバッグモード 00204 // #define DEBUG_TX // 送信パケットの表示 00205 // #define DEBUG_RX // 受信パケットの表示 00206 #define ERRLOG // エラー時にログを出力 00207 // #define XBEE_ERROR_TIME // エラー時のログに日時を付与 00208 #ifdef LITE 00209 #define API_SIZE 48 // 受信用APIデータ長(32~255) 00210 #define API_TXSIZE 34 // 送信用APIデータ長(32~255) 00211 #define CALL_SIZE 16 // xbee_rx_call用戻りデータ(10~256) 00212 #define XB_AT_SIZE 16 // ATコマンドの最大長 00213 #else 00214 #define CACHE_RES 5 // 応答時のキャッシュ数(無効にするには定義を消す) 00215 #define API_SIZE 128 // 受信用APIデータ長(32~255) 00216 #define API_TXSIZE 64 // 送信用APIデータ長(32~255) 00217 #define CALL_SIZE 64 // xbee_rx_call用戻りデータ(10~256) 00218 #define XB_AT_SIZE 32 // ATコマンドの最大長 00219 #define delay(ms) wait_millisec(ms) // 関数名の複製 00220 #endif 00221 #endif 00222 #endif 00223 #define TIME_DEL 3 // デリミタ検出のタイムアウト時間(秒) 00224 #define MODE_AUTO 0x00 // 自動受信モード 00225 #define MODE_GPIN 0x92 // GPI data を受信するモード 00226 #define MODE_UART 0x90 // UART data を受信するモード 00227 #define MODE_UAR2 0x91 // UART data を受信するモード2(AO=1) 00228 #define MODE_SENS 0x94 // XB Sensorを受信するモード(1wire専用→通常のSensorはATISを使用) 00229 #define MODE_IDNT 0x95 // Node Identifyを受信するモード 00230 #define MODE_RES 0x88 // ローカルATコマンドの結果を受信 00231 #define MODE_RESP 0x97 // リモートATコマンドの結果を受信(仕様書はATNDで説明ATISもこれ) 00232 #define MODE_MODM 0x8A // Modem Statusを受信 00233 #define MODE_TXST 0x8B // UART Transmit Status を受信 00234 #define MODE_BATT 0xE1 // (独自定義)バッテリステータス RAT%Vの応答時 00235 // XBeeのFrame Typeに準拠する。 00236 // 注意:モードを増やしたときはxbee_from_acumとxbee_rx_call内の対応を追加すること 00237 // 独自定義の時はxbee_rx_call内のみ。 00238 // MODE値はenum定義にしない。 00239 00240 #define STATUS_OK 0x00 // ATコマンドの結果がOK 00241 #define STATUS_ERR 0x01 // ATコマンドの結果がERROR 00242 #define STATUS_ERR_AT 0x02 // 指定されたATコマンドに誤りがある 00243 #define STATUS_ERR_PARM 0x03 // 指定されたパラメータに誤りがある 00244 #define STATUS_ERR_AIR 0x04 // リモートATコマンドの送信の失敗(相手が応答しない) 00245 00246 #define MODM_RESET 0x01 // ローカルのXBeeがリセットした 00247 #define MODM_WATCHDOG 0x02 // ローカルのXBeeがWatch dogタイマーによってリセットした 00248 #define MODM_JOINED 0x03 // (RouterまたはEnd Deviceで使用しているときに)ネットワークJoinした 00249 #define MODM_LEFT 0x04 // ネットワークからdis_assosiateした 00250 #define MODM_STARTED 0x06 // (coordinatorで使用しているときに)Coordinatorを開始した 00251 00252 #define DEV_TYPE_XBEE 0x00 // XBeeモジュール 00253 #define DEV_TYPE_RS232 0x05 // RS-232Cアダプタ 00254 #define DEV_TYPE_SENS 0x07 // Sensor (1wire専用) 00255 #define DEV_TYPE_WALL 0x08 // Wall Router 00256 #define DEV_TYPE_SEN_LT 0x0E // Sensor (照度・温度) 00257 #define DEV_TYPE_SEN_LTH 0x0D // Sensor (照度・温度・湿度) 00258 #define DEV_TYPE_PLUG 0x0F // Smart Plug 00259 00260 #define ZB_TYPE_COORD 0x21 // ZigBee Coordinator 00261 #define ZB_TYPE_ROUTER 0x23 // ZigBee Router 00262 #define ZB_TYPE_ENDDEV 0x29 // ZigBee End Device 00263 #define XB_TYPE_NULL 0x00 // XBee Wi-Fi バージョン未取得 00264 #define XB_TYPE_WIFI10 0x10 // XBee Wi-Fi Ver. 10xx 00265 #define XB_TYPE_WIFI20 0x20 // XBee Wi-Fi Ver. 20xx 00266 00267 #define NET_ADR FFFE // ネットワークアドレス 00268 #endif 00269 00270 00271 /********************************************************************* 00272 型の定義 00273 *********************************************************************/ 00274 00275 #ifdef ARDUINO 00276 typedef struct{ 00277 public: 00278 byte MODE; // 受信モード(Frame Type) 00279 byte FROM[8]; // 送信元IEEEアドレス 00280 byte AT[2]; // ATコマンド 00281 byte ID; // 応答パケットID(Frame ID) 00282 byte STATUS; // 応答結果(0:OK 1:ERROR)/AT結果/UART状態 00283 union { // GPIOデータ 00284 byte BYTE[2]; 00285 struct { // バイト毎に下位ビットから代入(リトルエンディアン) 00286 byte D0 :1; byte D1 :1; byte D2 :1; byte D3 :1; // BYTE[1] 00287 byte D4 :1; byte D5 :1; byte D6 :1; byte D7 :1; 00288 byte :1; byte :1; byte D10:1; byte D11:1; // BYTE[0] 00289 byte D12:1; byte :1; byte :1; byte :1; 00290 } PORT; 00291 } GPI; 00292 // byte GPI[2]; // GPIOデータ 00293 unsigned int ADCIN[4]; // ADCデータ 00294 byte DATA[CALL_SIZE]; // ペイロードデータ/ZCLヘッダ+受信データ 00295 } XBEE_RESULT; // 構造体の型名 00296 #endif 00297 #ifdef ARM_MBED 00298 typedef unsigned char byte; 00299 typedef struct{ 00300 public: 00301 byte MODE; // 受信モード(Frame Type) 00302 byte FROM[8]; // 送信元IEEEアドレス 00303 byte AT[2]; // ATコマンド 00304 byte ID; // 応答パケットID(Frame ID) 00305 byte STATUS; // 応答結果(0:OK 1:ERROR)/AT結果/UART状態 00306 union { // GPIOデータ 00307 byte BYTE[2]; 00308 struct { // バイト毎に下位ビットから代入(リトルエンディアン) 00309 byte D0 :1; byte D1 :1; byte D2 :1; byte D3 :1; // BYTE[1] 00310 byte D4 :1; byte D5 :1; byte D6 :1; byte D7 :1; 00311 byte :1; byte :1; byte D10:1; byte D11:1; // BYTE[0] 00312 byte D12:1; byte :1; byte :1; byte :1; 00313 } PORT; 00314 } GPI; 00315 // byte GPI[2]; // GPIOデータ 00316 unsigned int ADCIN[4]; // ADCデータ 00317 byte DATA[CALL_SIZE]; // 受信データ 00318 } XBEE_RESULT; // 構造体の型名 00319 #endif 00320 00321 /********************************************************************* 00322 アプリ向け hardware 提供関数 00323 *********************************************************************/ 00324 00325 /* GPIO */ 00326 #ifndef ARDUINO 00327 #ifndef ARM_MBED 00328 byte led_red( const byte in ); 00329 byte led_green( const byte in ); 00330 byte button( void ); 00331 #endif 00332 #endif 00333 00334 /* Timer */ 00335 #ifndef ARDUINO 00336 #ifndef ARM_MBED 00337 void wait_millisec( const int ms ); 00338 #endif 00339 #endif 00340 00341 /* misc */ 00342 byte bytecmp(byte *s1, const byte *s2, byte size); 00343 #ifndef ARDUINO 00344 #ifndef ARM_MBED 00345 void strcopy(char *s1, const char *s2); 00346 void bytecpy(byte *s1, const byte *s2, byte size); 00347 #endif 00348 #endif 00349 00350 /* LCD */ 00351 #ifdef LCD_H 00352 void lcd_cls(void); 00353 void lcd_home(void); 00354 void lcd_control(byte disonoff, byte curonoff, byte curblink); 00355 void lcd_goto(const byte mesto); 00356 void lcd_shift(const byte data); 00357 void lcd_putch(const char data); 00358 void lcd_putstr(const char *data); 00359 void lcd_disp_bin(const byte x); 00360 void lcd_disp_hex(const byte i); 00361 void lcd_disp_1(const unsigned int x); 00362 void lcd_disp_2(unsigned int x); 00363 void lcd_disp_3(unsigned int x); 00364 void lcd_disp_5(unsigned int x); 00365 void lcd_init(void); 00366 void lcd_disp( const char *s ); 00367 #endif 00368 00369 /********************************************************************* 00370 private xbee ドライバ関数 00371 *********************************************************************/ 00372 00373 /* XBeeドライバ関数 */ 00374 /* byte xbee_at_tx(const char *at, const byte *value, const byte value_len); 00375 byte xbee_at_rx(byte *data); 00376 byte xbee_from_acum( const byte *data ); 00377 byte xbee_gpi_acum( byte *data ); 00378 byte xbee_uart_acum( byte *data ); 00379 #ifdef EASY 00380 float xbee_sensor_acum( const byte *data, const enum xbee_sensor_type type ); 00381 #endif 00382 byte xbee_tx_rx(const char *at, byte *data, byte len); 00383 void xbee_reset( void ); 00384 */ 00385 00386 /* XBee用 UART出力API */ 00387 #ifndef LITE 00388 byte xbee_putch( const char c ); 00389 #endif 00390 byte xbee_putstr( const char *s ); 00391 #ifndef LITE 00392 void xbee_disp_hex( const unsigned char i ); 00393 void xbee_disp_1( const unsigned int x ); 00394 void xbee_disp_2( unsigned int x ); 00395 void xbee_disp_3(unsigned int x); 00396 void xbee_disp_5(unsigned int x); 00397 #endif 00398 void xbee_log( byte level, const char *err , const byte x ); 00399 00400 /********************************************************************* 00401 アプリ向け xbee 提供関数 00402 *********************************************************************/ 00403 00404 byte xbee_myaddress( byte *address ); 00405 void xbee_address( const byte *address ); 00406 byte xbee_atd( const byte *address ); 00407 byte xbee_ratd(const byte *dev_address, const byte *set_address ); 00408 byte xbee_ratd_myaddress(const byte *address); 00409 #define xbee_set_myaddress(adr) xbee_ratd_myaddress(adr) 00410 void xbee_from( byte *address ); 00411 byte xbee_at(const char *in); 00412 byte xbee_rat(const byte *address, const char *in); 00413 byte xbee_rat_force(const byte *address, const char *in); 00414 byte xbee_uart(const byte *address, const char *in); 00415 byte xbee_bytes(const byte *address, const byte *in, byte len); 00416 byte xbee_atvr( void ); 00417 byte xbee_atai( void ); 00418 byte xbee_atcb( byte cb ); 00419 unsigned short xbee_atop(byte *pan_id); 00420 byte xbee_atee_on(const char *key ); 00421 byte xbee_atee_off( void ); 00422 byte xbee_atnc( void ); 00423 byte xbee_ratnc( const byte *address ); 00424 byte xbee_atnj( const byte timeout ); 00425 byte xbee_ratnj( const byte *address, const byte timeout ); 00426 byte xbee_ping( const byte *address ); 00427 int xbee_batt(const byte *address ); 00428 byte xbee_batt_force(const byte *address ); 00429 #ifdef ARDUINO // Arduino用 00430 byte xbee_gpio_config(const byte *address, const byte port, const byte type ); 00431 #else 00432 #ifdef ARM_MBED 00433 byte xbee_gpio_config(const byte *address, const byte port, const byte type ); 00434 #else // PC/H8用 00435 byte xbee_gpio_config(const byte *address, const byte port, const enum xbee_port_type type ); 00436 #endif 00437 #endif 00438 byte xbee_gpio_init( const byte *address ); 00439 byte xbee_gpo( const byte *address, const byte port,const byte out ); 00440 #ifdef EASY_GPI 00441 byte xbee_gpi(const byte *address, const byte port); 00442 #endif 00443 #ifdef EASY_ADC 00444 unsigned int xbee_adc(const byte *address, const byte port); 00445 #endif 00446 byte xbee_force( const byte *address ); 00447 #ifdef ARDUINO // Arduino用 00448 float xbee_sensor_result( XBEE_RESULT *xbee_result, const byte type); 00449 #else 00450 #ifdef ARM_MBED 00451 float xbee_sensor_result( XBEE_RESULT *xbee_result, const byte type); 00452 #else // PC/H8用 00453 float xbee_sensor_result( XBEE_RESULT *xbee_result, const enum xbee_sensor_type type ); 00454 #ifdef EASY_SENSOR 00455 xbee_sensor(const byte *address, const enum xbee_sensor_type type ); 00456 #endif 00457 #endif 00458 #endif 00459 byte xbee_rx_call( XBEE_RESULT *xbee_result ); 00460 void xbee_clear_cache(void); 00461 byte xbee_init( const byte port ); 00462 byte xbee_reset( void ); 00463 byte xbee_end_device(const byte *address, byte sp, byte ir, const byte pin); 00464 #ifndef LITE 00465 byte xbee_i2c_init(const byte *address); 00466 byte xbee_i2c_read(const byte *address, byte adr, byte *rx, byte len); 00467 byte xbee_i2c_write(const byte *address, byte adr, byte *rx, byte len); 00468 #endif 00469 byte xbee_delay(unsigned int ms); 00470 #endif // XBEE_H 00471
Generated on Thu Jul 14 2022 01:23:34 by
![doxygen](doxygen.png)