Measured results of an XBee wireless sensor device are displayed a LCD on Nucleo board with an XBee coordinator which is in API mode.

Dependencies:   TextLCD mbed xbee sample04_sens

Dependents:   sample04_sens

Please refer to the following site for the details:

Committer:
bokunimowakaru
Date:
Fri Oct 31 10:11:59 2014 +0000
Revision:
10:6257dc798036
Parent:
9:f107d2c9cd6e
Update xbee library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bokunimowakaru 0:0de2116533e1 1 /*********************************************************************
bokunimowakaru 0:0de2116533e1 2 サンプルアプリ4 センサー
bokunimowakaru 0:0de2116533e1 3 新しいセンサーデバイスを発見すると、そのデバイスから照度と温度を得ます。
bokunimowakaru 0:0de2116533e1 4 ここでは子機のXBeeセンサーにDigi純正のXBee Sensorを想定していますが、
bokunimowakaru 0:0de2116533e1 5 自作したセンサーでもDIO1~2(XBee_pin 19~18)に0~1.2Vのアナログ電圧を
bokunimowakaru 0:0de2116533e1 6 与えていれば、何らかの値を読みとることができます。
bokunimowakaru 0:0de2116533e1 7
bokunimowakaru 8:a114c798d954 8 Sample Code 4 Sensor
bokunimowakaru 8:a114c798d954 9 Measured results of an XBee wireless sensor device are displayed a LCD
bokunimowakaru 8:a114c798d954 10 on Nucleo board with an XBee coordinator which is in API mode.
bokunimowakaru 8:a114c798d954 11 When you will use this anything other than Nucleo microcomputer board,
bokunimowakaru 8:a114c798d954 12 please change the 4th line of xbee/xbee.cpp:
bokunimowakaru 8:a114c798d954 13 RawSerial _xbee_serial(SERIAL_TX, SERIAL_RX);
bokunimowakaru 8:a114c798d954 14
bokunimowakaru 0:0de2116533e1 15 新しいXBee子機のコミッションボタンDIO0(XBee_pin 20)を押下する(信号レベ
bokunimowakaru 0:0de2116533e1 16 ルがH→L→Hに推移する)と、子機から参加要求信号が発行されて、Arduino親機
bokunimowakaru 0:0de2116533e1 17 が子機を発見し、「found a device」と表示します。
bokunimowakaru 0:0de2116533e1 18
bokunimowakaru 0:0de2116533e1 19 ただし、複数のZigBeeネットワークに対応するために、ペアリングは起動後の
bokunimowakaru 0:0de2116533e1 20 30秒間しか受け付けません。Arduino親機を起動して、コミッションボタンを
bokunimowakaru 0:0de2116533e1 21 押してペアリングを実施しておき、再度、コミッションボタンでデバイス発見
bokunimowakaru 0:0de2116533e1 22 します。デバイス発見は30秒のペアリング期間後でも行えます。
bokunimowakaru 0:0de2116533e1 23
bokunimowakaru 0:0de2116533e1 24 本ソースリストおよびソフトウェアは、ライセンスフリーです。
bokunimowakaru 0:0de2116533e1 25 利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。
bokunimowakaru 0:0de2116533e1 26
bokunimowakaru 0:0de2116533e1 27 解説:
bokunimowakaru 0:0de2116533e1 28 http://www.geocities.jp/bokunimowakaru/diy/xbee/xbee-nucleo.html
bokunimowakaru 0:0de2116533e1 29
bokunimowakaru 4:09c0f8f67e63 30 Copyright (c) 2010-2014 Wataru KUNINO
bokunimowakaru 0:0de2116533e1 31 http://www.geocities.jp/bokunimowakaru/
bokunimowakaru 0:0de2116533e1 32 *********************************************************************/
bokunimowakaru 8:a114c798d954 33 #include <mbed.h>
bokunimowakaru 8:a114c798d954 34 #include "xbee.h"
bokunimowakaru 0:0de2116533e1 35 #include "TextLCD.h"
bokunimowakaru 7:a3769f9f7dfc 36 #define FORCE_INTERVAL 100 // 1~254 データ要求間隔
bokunimowakaru 0:0de2116533e1 37 TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7
bokunimowakaru 4:09c0f8f67e63 38 byte dev_sens[8]; // IEEE Address
bokunimowakaru 0:0de2116533e1 39
bokunimowakaru 9:f107d2c9cd6e 40 int main(){
bokunimowakaru 4:09c0f8f67e63 41 int i;
bokunimowakaru 9:f107d2c9cd6e 42 int dev_en = 0; // センサー発見の有無(0:未発見)
bokunimowakaru 4:09c0f8f67e63 43 XBEE_RESULT xbee_result; // 受信データ用の構造体
bokunimowakaru 4:09c0f8f67e63 44 int trig=0;
bokunimowakaru 0:0de2116533e1 45 float value;
bokunimowakaru 0:0de2116533e1 46
bokunimowakaru 9:f107d2c9cd6e 47 lcd.cls(); lcd.printf("Sample 4 SENS");
bokunimowakaru 9:f107d2c9cd6e 48 xbee_init( 0x00 ); // XBee用COMポートの初期化(引数はポート番号)
bokunimowakaru 0:0de2116533e1 49 // デバイス探索
bokunimowakaru 0:0de2116533e1 50 lcd.cls(); lcd.printf("Searching:SENSOR");
bokunimowakaru 0:0de2116533e1 51 if( xbee_atnj(10) ){ // 10秒間の参加受け入れ
bokunimowakaru 0:0de2116533e1 52 lcd.cls(); lcd.printf("Found a device");
bokunimowakaru 0:0de2116533e1 53 xbee_from( dev_sens ); // 受信したアドレスをdev_sensへ格納
bokunimowakaru 0:0de2116533e1 54 dev_en = 1; // sensor発見済
bokunimowakaru 0:0de2116533e1 55 xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
bokunimowakaru 0:0de2116533e1 56 xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
bokunimowakaru 0:0de2116533e1 57 }else{
bokunimowakaru 0:0de2116533e1 58 lcd.cls(); lcd.printf("Failed:no dev.");
bokunimowakaru 0:0de2116533e1 59 }
bokunimowakaru 5:173a41d73454 60 wait(1);
bokunimowakaru 5:173a41d73454 61 lcd.cls();
bokunimowakaru 0:0de2116533e1 62
bokunimowakaru 0:0de2116533e1 63 // メイン処理
bokunimowakaru 9:f107d2c9cd6e 64 while(1){ // 永久に受信する
bokunimowakaru 4:09c0f8f67e63 65 if(dev_en){
bokunimowakaru 4:09c0f8f67e63 66 if(trig<=0){
bokunimowakaru 7:a3769f9f7dfc 67 lcd.locate(12,0); lcd.printf("Trig"); wait(0.1);
bokunimowakaru 9:f107d2c9cd6e 68 xbee_force(dev_sens); // デバイスdev_sensへデータ要求
bokunimowakaru 4:09c0f8f67e63 69 trig = FORCE_INTERVAL;
bokunimowakaru 7:a3769f9f7dfc 70 lcd.locate(12,0); lcd.printf(" ");
bokunimowakaru 4:09c0f8f67e63 71 }
bokunimowakaru 4:09c0f8f67e63 72 }else{
bokunimowakaru 7:a3769f9f7dfc 73 lcd.cls(); lcd.printf("Waiting for XBee");
bokunimowakaru 7:a3769f9f7dfc 74 wait(0.5);
bokunimowakaru 5:173a41d73454 75 lcd.cls();
bokunimowakaru 0:0de2116533e1 76 }
bokunimowakaru 0:0de2116533e1 77 trig--;
bokunimowakaru 0:0de2116533e1 78
bokunimowakaru 0:0de2116533e1 79 /* データ受信(待ち受けて受信する) */
bokunimowakaru 9:f107d2c9cd6e 80 xbee_rx_call( &xbee_result ); // データを受信します。
bokunimowakaru 9:f107d2c9cd6e 81 switch( xbee_result.MODE ){ // 受信したデータの内容(MODE値)に応じて
bokunimowakaru 9:f107d2c9cd6e 82 case MODE_RESP: // sensorからの応答の場合に照度と温度を表示
bokunimowakaru 9:f107d2c9cd6e 83 case MODE_GPIN: // 周期方式でデータ受信した場合も想定
bokunimowakaru 0:0de2116533e1 84 if( bytecmp( dev_sens , &(xbee_result.FROM[0]) ,8 ) == 0 && xbee_result.STATUS == STATUS_OK ){
bokunimowakaru 0:0de2116533e1 85 // 照度測定結果
bokunimowakaru 0:0de2116533e1 86 value = xbee_sensor_result( &xbee_result, LIGHT);
bokunimowakaru 5:173a41d73454 87 lcd.locate(0,0); lcd.printf( "%.1f Lux ",value);
bokunimowakaru 0:0de2116533e1 88 // 温度測定結果
bokunimowakaru 0:0de2116533e1 89 value = xbee_sensor_result( &xbee_result, TEMP);
bokunimowakaru 5:173a41d73454 90 lcd.locate(0,1); lcd.printf( "%.1f C ",value);
bokunimowakaru 0:0de2116533e1 91 }
bokunimowakaru 0:0de2116533e1 92 break;
bokunimowakaru 0:0de2116533e1 93 case MODE_IDNT: // 新しいデバイスを発見
bokunimowakaru 0:0de2116533e1 94 lcd.cls(); lcd.printf("found a new dev");
bokunimowakaru 0:0de2116533e1 95 for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i];
bokunimowakaru 0:0de2116533e1 96 // 発見したアドレスをdev_sensに読み込み
bokunimowakaru 0:0de2116533e1 97 dev_en = 1; // sensor発見済
bokunimowakaru 4:09c0f8f67e63 98 trig = 0;
bokunimowakaru 0:0de2116533e1 99 xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
bokunimowakaru 0:0de2116533e1 100 xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
bokunimowakaru 5:173a41d73454 101 lcd.cls();
bokunimowakaru 0:0de2116533e1 102 break;
bokunimowakaru 0:0de2116533e1 103 default:
bokunimowakaru 0:0de2116533e1 104 break;
bokunimowakaru 0:0de2116533e1 105 }
bokunimowakaru 0:0de2116533e1 106 }
bokunimowakaru 0:0de2116533e1 107 }