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:
Sun Jun 22 06:37:51 2014 +0000
Revision:
0:0de2116533e1
Child:
4:09c0f8f67e63
For Ver 1.88.

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 0:0de2116533e1 8 新しいXBee子機のコミッションボタンDIO0(XBee_pin 20)を押下する(信号レベ
bokunimowakaru 0:0de2116533e1 9 ルがH→L→Hに推移する)と、子機から参加要求信号が発行されて、Arduino親機
bokunimowakaru 0:0de2116533e1 10 が子機を発見し、「found a device」と表示します。
bokunimowakaru 0:0de2116533e1 11
bokunimowakaru 0:0de2116533e1 12 ただし、複数のZigBeeネットワークに対応するために、ペアリングは起動後の
bokunimowakaru 0:0de2116533e1 13 30秒間しか受け付けません。Arduino親機を起動して、コミッションボタンを
bokunimowakaru 0:0de2116533e1 14 押してペアリングを実施しておき、再度、コミッションボタンでデバイス発見
bokunimowakaru 0:0de2116533e1 15 します。デバイス発見は30秒のペアリング期間後でも行えます。
bokunimowakaru 0:0de2116533e1 16
bokunimowakaru 0:0de2116533e1 17 本ソースリストおよびソフトウェアは、ライセンスフリーです。
bokunimowakaru 0:0de2116533e1 18 利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。
bokunimowakaru 0:0de2116533e1 19
bokunimowakaru 0:0de2116533e1 20 解説:
bokunimowakaru 0:0de2116533e1 21 http://www.geocities.jp/bokunimowakaru/diy/xbee/xbee-nucleo.html
bokunimowakaru 0:0de2116533e1 22
bokunimowakaru 0:0de2116533e1 23 Copyright (c) 2010-2012 Wataru KUNINO
bokunimowakaru 0:0de2116533e1 24 http://www.geocities.jp/bokunimowakaru/
bokunimowakaru 0:0de2116533e1 25 *********************************************************************/
bokunimowakaru 0:0de2116533e1 26
bokunimowakaru 0:0de2116533e1 27 #include <xbee.h>
bokunimowakaru 0:0de2116533e1 28 #include "TextLCD.h"
bokunimowakaru 0:0de2116533e1 29 TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7
bokunimowakaru 0:0de2116533e1 30
bokunimowakaru 0:0de2116533e1 31 byte dev_sens[] = {0x00,0x13,0xA2,0x00,0x40,0x00,0x00,0x00}; // 仮設定
bokunimowakaru 0:0de2116533e1 32 byte dev_en = 0; // センサー発見の有無(0:未発見)
bokunimowakaru 0:0de2116533e1 33
bokunimowakaru 0:0de2116533e1 34 void setup(){
bokunimowakaru 0:0de2116533e1 35 lcd.cls(); lcd.printf("Sample 4 SENS");
bokunimowakaru 0:0de2116533e1 36 xbee_init( 0x00 ); // XBee用COMポートの初期化(引数はポート番号)
bokunimowakaru 0:0de2116533e1 37 }
bokunimowakaru 0:0de2116533e1 38
bokunimowakaru 0:0de2116533e1 39 void loop(){
bokunimowakaru 0:0de2116533e1 40 byte i;
bokunimowakaru 0:0de2116533e1 41 byte trig=0;
bokunimowakaru 0:0de2116533e1 42 float value;
bokunimowakaru 0:0de2116533e1 43 XBEE_RESULT xbee_result; // 受信データ用の構造体
bokunimowakaru 0:0de2116533e1 44
bokunimowakaru 0:0de2116533e1 45 // デバイス探索
bokunimowakaru 0:0de2116533e1 46 lcd.cls(); lcd.printf("Searching:SENSOR");
bokunimowakaru 0:0de2116533e1 47 if( xbee_atnj(10) ){ // 10秒間の参加受け入れ
bokunimowakaru 0:0de2116533e1 48 lcd.cls(); lcd.printf("Found a device");
bokunimowakaru 0:0de2116533e1 49 xbee_from( dev_sens ); // 受信したアドレスをdev_sensへ格納
bokunimowakaru 0:0de2116533e1 50 dev_en = 1; // sensor発見済
bokunimowakaru 0:0de2116533e1 51 xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
bokunimowakaru 0:0de2116533e1 52 xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
bokunimowakaru 0:0de2116533e1 53 // xbee_gpio_config( dev_sens, 3 , AIN ); // 接続相手のポート3をAIN入力へ
bokunimowakaru 0:0de2116533e1 54 }else{
bokunimowakaru 0:0de2116533e1 55 lcd.cls(); lcd.printf("Failed:no dev.");
bokunimowakaru 0:0de2116533e1 56 }
bokunimowakaru 0:0de2116533e1 57 wait(0.5);
bokunimowakaru 0:0de2116533e1 58 lcd.cls(); lcd.printf("DONE");
bokunimowakaru 0:0de2116533e1 59
bokunimowakaru 0:0de2116533e1 60 // メイン処理
bokunimowakaru 0:0de2116533e1 61 lcd.cls(); lcd.printf("Receiving");
bokunimowakaru 0:0de2116533e1 62 while(1){ // 永久に受信する
bokunimowakaru 0:0de2116533e1 63 if( dev_en && trig == 0){
bokunimowakaru 0:0de2116533e1 64 xbee_force( dev_sens ); // デバイスdev_sensへデータ要求(100回に1回の頻度で)
bokunimowakaru 0:0de2116533e1 65 trig = 100;
bokunimowakaru 0:0de2116533e1 66 }
bokunimowakaru 0:0de2116533e1 67 trig--;
bokunimowakaru 0:0de2116533e1 68
bokunimowakaru 0:0de2116533e1 69 /* データ受信(待ち受けて受信する) */
bokunimowakaru 0:0de2116533e1 70 xbee_rx_call( &xbee_result );
bokunimowakaru 0:0de2116533e1 71 // データを受信します。
bokunimowakaru 0:0de2116533e1 72 switch( xbee_result.MODE ){ // 受信したデータの内容(MODE値)に応じて
bokunimowakaru 0:0de2116533e1 73 case MODE_RESP: // sensorからの応答の場合に照度と温度を表示
bokunimowakaru 0:0de2116533e1 74 case MODE_GPIN: // 周期方式でデータ受信した場合も想定
bokunimowakaru 0:0de2116533e1 75 if( bytecmp( dev_sens , &(xbee_result.FROM[0]) ,8 ) == 0 && xbee_result.STATUS == STATUS_OK ){
bokunimowakaru 0:0de2116533e1 76 // 照度測定結果
bokunimowakaru 0:0de2116533e1 77 value = xbee_sensor_result( &xbee_result, LIGHT);
bokunimowakaru 0:0de2116533e1 78 lcd.cls(); lcd.printf( "%.1f",value ); lcd.printf(" Lux ");
bokunimowakaru 0:0de2116533e1 79 // 温度測定結果
bokunimowakaru 0:0de2116533e1 80 value = xbee_sensor_result( &xbee_result, TEMP);
bokunimowakaru 0:0de2116533e1 81 lcd.locate(0,1); lcd.printf( "%.1f",value ); lcd.printf(" C");
bokunimowakaru 0:0de2116533e1 82 }
bokunimowakaru 0:0de2116533e1 83 break;
bokunimowakaru 0:0de2116533e1 84 case MODE_IDNT: // 新しいデバイスを発見
bokunimowakaru 0:0de2116533e1 85 lcd.cls(); lcd.printf("found a new dev");
bokunimowakaru 0:0de2116533e1 86 for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i];
bokunimowakaru 0:0de2116533e1 87 // 発見したアドレスをdev_sensに読み込み
bokunimowakaru 0:0de2116533e1 88 dev_en = 1; // sensor発見済
bokunimowakaru 0:0de2116533e1 89 xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
bokunimowakaru 0:0de2116533e1 90 xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
bokunimowakaru 0:0de2116533e1 91 // xbee_gpio_config( dev_sens, 3 , AIN ); // 接続相手のポート3をAIN入力へ
bokunimowakaru 0:0de2116533e1 92 break;
bokunimowakaru 0:0de2116533e1 93 default:
bokunimowakaru 0:0de2116533e1 94 break;
bokunimowakaru 0:0de2116533e1 95 }
bokunimowakaru 0:0de2116533e1 96 }
bokunimowakaru 0:0de2116533e1 97 }
bokunimowakaru 0:0de2116533e1 98
bokunimowakaru 0:0de2116533e1 99 int main(){
bokunimowakaru 0:0de2116533e1 100 setup();
bokunimowakaru 0:0de2116533e1 101 while(1) loop();
bokunimowakaru 0:0de2116533e1 102 }