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 Sep 26 13:23:26 2014 +0000
Revision:
7:a3769f9f7dfc
Parent:
5:173a41d73454
Child:
8:a114c798d954
Code Test Purpose Removed

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 4:09c0f8f67e63 23 Copyright (c) 2010-2014 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 7:a3769f9f7dfc 29 #define FORCE_INTERVAL 100 // 1~254 データ要求間隔
bokunimowakaru 0:0de2116533e1 30 TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7
bokunimowakaru 4:09c0f8f67e63 31 byte dev_sens[8]; // IEEE Address
bokunimowakaru 0:0de2116533e1 32
bokunimowakaru 0:0de2116533e1 33 void setup(){
bokunimowakaru 0:0de2116533e1 34 lcd.cls(); lcd.printf("Sample 4 SENS");
bokunimowakaru 0:0de2116533e1 35 xbee_init( 0x00 ); // XBee用COMポートの初期化(引数はポート番号)
bokunimowakaru 0:0de2116533e1 36 }
bokunimowakaru 0:0de2116533e1 37
bokunimowakaru 0:0de2116533e1 38 void loop(){
bokunimowakaru 4:09c0f8f67e63 39 int i;
bokunimowakaru 4:09c0f8f67e63 40 int dev_en = 0; // センサー発見の有無(0:未発見)
bokunimowakaru 4:09c0f8f67e63 41 XBEE_RESULT xbee_result; // 受信データ用の構造体
bokunimowakaru 4:09c0f8f67e63 42 int trig=0;
bokunimowakaru 0:0de2116533e1 43 float value;
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 }else{
bokunimowakaru 0:0de2116533e1 54 lcd.cls(); lcd.printf("Failed:no dev.");
bokunimowakaru 0:0de2116533e1 55 }
bokunimowakaru 5:173a41d73454 56 wait(1);
bokunimowakaru 5:173a41d73454 57 lcd.cls();
bokunimowakaru 0:0de2116533e1 58
bokunimowakaru 0:0de2116533e1 59 // メイン処理
bokunimowakaru 7:a3769f9f7dfc 60 while(1){ // 永久に受信する
bokunimowakaru 4:09c0f8f67e63 61 if(dev_en){
bokunimowakaru 4:09c0f8f67e63 62 if(trig<=0){
bokunimowakaru 7:a3769f9f7dfc 63 lcd.locate(12,0); lcd.printf("Trig"); wait(0.1);
bokunimowakaru 7:a3769f9f7dfc 64 xbee_force(dev_sens); // デバイスdev_sensへデータ要求
bokunimowakaru 4:09c0f8f67e63 65 trig = FORCE_INTERVAL;
bokunimowakaru 7:a3769f9f7dfc 66 lcd.locate(12,0); lcd.printf(" ");
bokunimowakaru 4:09c0f8f67e63 67 }
bokunimowakaru 4:09c0f8f67e63 68 }else{
bokunimowakaru 7:a3769f9f7dfc 69 lcd.cls(); lcd.printf("Waiting for XBee");
bokunimowakaru 7:a3769f9f7dfc 70 wait(0.5);
bokunimowakaru 5:173a41d73454 71 lcd.cls();
bokunimowakaru 0:0de2116533e1 72 }
bokunimowakaru 0:0de2116533e1 73 trig--;
bokunimowakaru 0:0de2116533e1 74
bokunimowakaru 0:0de2116533e1 75 /* データ受信(待ち受けて受信する) */
bokunimowakaru 7:a3769f9f7dfc 76 xbee_rx_call( &xbee_result ); // データを受信します。
bokunimowakaru 7:a3769f9f7dfc 77 switch( xbee_result.MODE ){ // 受信したデータの内容(MODE値)に応じて
bokunimowakaru 7:a3769f9f7dfc 78 case MODE_RESP: // sensorからの応答の場合に照度と温度を表示
bokunimowakaru 7:a3769f9f7dfc 79 case MODE_GPIN: // 周期方式でデータ受信した場合も想定
bokunimowakaru 0:0de2116533e1 80 if( bytecmp( dev_sens , &(xbee_result.FROM[0]) ,8 ) == 0 && xbee_result.STATUS == STATUS_OK ){
bokunimowakaru 0:0de2116533e1 81 // 照度測定結果
bokunimowakaru 0:0de2116533e1 82 value = xbee_sensor_result( &xbee_result, LIGHT);
bokunimowakaru 5:173a41d73454 83 lcd.locate(0,0); lcd.printf( "%.1f Lux ",value);
bokunimowakaru 0:0de2116533e1 84 // 温度測定結果
bokunimowakaru 0:0de2116533e1 85 value = xbee_sensor_result( &xbee_result, TEMP);
bokunimowakaru 5:173a41d73454 86 lcd.locate(0,1); lcd.printf( "%.1f C ",value);
bokunimowakaru 0:0de2116533e1 87 }
bokunimowakaru 0:0de2116533e1 88 break;
bokunimowakaru 0:0de2116533e1 89 case MODE_IDNT: // 新しいデバイスを発見
bokunimowakaru 0:0de2116533e1 90 lcd.cls(); lcd.printf("found a new dev");
bokunimowakaru 0:0de2116533e1 91 for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i];
bokunimowakaru 0:0de2116533e1 92 // 発見したアドレスをdev_sensに読み込み
bokunimowakaru 0:0de2116533e1 93 dev_en = 1; // sensor発見済
bokunimowakaru 4:09c0f8f67e63 94 trig = 0;
bokunimowakaru 0:0de2116533e1 95 xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
bokunimowakaru 0:0de2116533e1 96 xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
bokunimowakaru 5:173a41d73454 97 lcd.cls();
bokunimowakaru 0:0de2116533e1 98 break;
bokunimowakaru 0:0de2116533e1 99 default:
bokunimowakaru 0:0de2116533e1 100 break;
bokunimowakaru 0:0de2116533e1 101 }
bokunimowakaru 0:0de2116533e1 102 }
bokunimowakaru 0:0de2116533e1 103 }
bokunimowakaru 0:0de2116533e1 104
bokunimowakaru 0:0de2116533e1 105 int main(){
bokunimowakaru 0:0de2116533e1 106 setup();
bokunimowakaru 0:0de2116533e1 107 while(1) loop();
bokunimowakaru 0:0de2116533e1 108 }