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:
Sat Oct 04 01:43:12 2014 +0000
Revision:
8:a114c798d954
Parent:
7:a3769f9f7dfc
Child:
9:f107d2c9cd6e
XBee lib's serial setting code on xbee.cpp is moved to 4th line on it.

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 0:0de2116533e1 40 void setup(){
bokunimowakaru 0:0de2116533e1 41 lcd.cls(); lcd.printf("Sample 4 SENS");
bokunimowakaru 0:0de2116533e1 42 xbee_init( 0x00 ); // XBee用COMポートの初期化(引数はポート番号)
bokunimowakaru 0:0de2116533e1 43 }
bokunimowakaru 0:0de2116533e1 44
bokunimowakaru 0:0de2116533e1 45 void loop(){
bokunimowakaru 4:09c0f8f67e63 46 int i;
bokunimowakaru 4:09c0f8f67e63 47 int dev_en = 0; // センサー発見の有無(0:未発見)
bokunimowakaru 4:09c0f8f67e63 48 XBEE_RESULT xbee_result; // 受信データ用の構造体
bokunimowakaru 4:09c0f8f67e63 49 int trig=0;
bokunimowakaru 0:0de2116533e1 50 float value;
bokunimowakaru 0:0de2116533e1 51
bokunimowakaru 0:0de2116533e1 52 // デバイス探索
bokunimowakaru 0:0de2116533e1 53 lcd.cls(); lcd.printf("Searching:SENSOR");
bokunimowakaru 0:0de2116533e1 54 if( xbee_atnj(10) ){ // 10秒間の参加受け入れ
bokunimowakaru 0:0de2116533e1 55 lcd.cls(); lcd.printf("Found a device");
bokunimowakaru 0:0de2116533e1 56 xbee_from( dev_sens ); // 受信したアドレスをdev_sensへ格納
bokunimowakaru 0:0de2116533e1 57 dev_en = 1; // sensor発見済
bokunimowakaru 0:0de2116533e1 58 xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
bokunimowakaru 0:0de2116533e1 59 xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
bokunimowakaru 0:0de2116533e1 60 }else{
bokunimowakaru 0:0de2116533e1 61 lcd.cls(); lcd.printf("Failed:no dev.");
bokunimowakaru 0:0de2116533e1 62 }
bokunimowakaru 5:173a41d73454 63 wait(1);
bokunimowakaru 5:173a41d73454 64 lcd.cls();
bokunimowakaru 0:0de2116533e1 65
bokunimowakaru 0:0de2116533e1 66 // メイン処理
bokunimowakaru 7:a3769f9f7dfc 67 while(1){ // 永久に受信する
bokunimowakaru 4:09c0f8f67e63 68 if(dev_en){
bokunimowakaru 4:09c0f8f67e63 69 if(trig<=0){
bokunimowakaru 7:a3769f9f7dfc 70 lcd.locate(12,0); lcd.printf("Trig"); wait(0.1);
bokunimowakaru 7:a3769f9f7dfc 71 xbee_force(dev_sens); // デバイスdev_sensへデータ要求
bokunimowakaru 4:09c0f8f67e63 72 trig = FORCE_INTERVAL;
bokunimowakaru 7:a3769f9f7dfc 73 lcd.locate(12,0); lcd.printf(" ");
bokunimowakaru 4:09c0f8f67e63 74 }
bokunimowakaru 4:09c0f8f67e63 75 }else{
bokunimowakaru 7:a3769f9f7dfc 76 lcd.cls(); lcd.printf("Waiting for XBee");
bokunimowakaru 7:a3769f9f7dfc 77 wait(0.5);
bokunimowakaru 5:173a41d73454 78 lcd.cls();
bokunimowakaru 0:0de2116533e1 79 }
bokunimowakaru 0:0de2116533e1 80 trig--;
bokunimowakaru 0:0de2116533e1 81
bokunimowakaru 0:0de2116533e1 82 /* データ受信(待ち受けて受信する) */
bokunimowakaru 7:a3769f9f7dfc 83 xbee_rx_call( &xbee_result ); // データを受信します。
bokunimowakaru 7:a3769f9f7dfc 84 switch( xbee_result.MODE ){ // 受信したデータの内容(MODE値)に応じて
bokunimowakaru 7:a3769f9f7dfc 85 case MODE_RESP: // sensorからの応答の場合に照度と温度を表示
bokunimowakaru 7:a3769f9f7dfc 86 case MODE_GPIN: // 周期方式でデータ受信した場合も想定
bokunimowakaru 0:0de2116533e1 87 if( bytecmp( dev_sens , &(xbee_result.FROM[0]) ,8 ) == 0 && xbee_result.STATUS == STATUS_OK ){
bokunimowakaru 0:0de2116533e1 88 // 照度測定結果
bokunimowakaru 0:0de2116533e1 89 value = xbee_sensor_result( &xbee_result, LIGHT);
bokunimowakaru 5:173a41d73454 90 lcd.locate(0,0); lcd.printf( "%.1f Lux ",value);
bokunimowakaru 0:0de2116533e1 91 // 温度測定結果
bokunimowakaru 0:0de2116533e1 92 value = xbee_sensor_result( &xbee_result, TEMP);
bokunimowakaru 5:173a41d73454 93 lcd.locate(0,1); lcd.printf( "%.1f C ",value);
bokunimowakaru 0:0de2116533e1 94 }
bokunimowakaru 0:0de2116533e1 95 break;
bokunimowakaru 0:0de2116533e1 96 case MODE_IDNT: // 新しいデバイスを発見
bokunimowakaru 0:0de2116533e1 97 lcd.cls(); lcd.printf("found a new dev");
bokunimowakaru 0:0de2116533e1 98 for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i];
bokunimowakaru 0:0de2116533e1 99 // 発見したアドレスをdev_sensに読み込み
bokunimowakaru 0:0de2116533e1 100 dev_en = 1; // sensor発見済
bokunimowakaru 4:09c0f8f67e63 101 trig = 0;
bokunimowakaru 0:0de2116533e1 102 xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ
bokunimowakaru 0:0de2116533e1 103 xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ
bokunimowakaru 5:173a41d73454 104 lcd.cls();
bokunimowakaru 0:0de2116533e1 105 break;
bokunimowakaru 0:0de2116533e1 106 default:
bokunimowakaru 0:0de2116533e1 107 break;
bokunimowakaru 0:0de2116533e1 108 }
bokunimowakaru 0:0de2116533e1 109 }
bokunimowakaru 0:0de2116533e1 110 }
bokunimowakaru 0:0de2116533e1 111
bokunimowakaru 0:0de2116533e1 112 int main(){
bokunimowakaru 0:0de2116533e1 113 setup();
bokunimowakaru 0:0de2116533e1 114 while(1) loop();
bokunimowakaru 0:0de2116533e1 115 }