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
Please refer to the following site for the details:
- http://developer.mbed.org/users/bokunimowakaru/code/xbee/wiki/Homepage (English)
- http://www.geocities.jp/bokunimowakaru/diy/xbee/xbee-nucleo.html (Japanese)
Diff: main.cpp
- Revision:
- 0:0de2116533e1
- Child:
- 4:09c0f8f67e63
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Jun 22 06:37:51 2014 +0000 @@ -0,0 +1,102 @@ +/********************************************************************* +サンプルアプリ4 センサー +新しいセンサーデバイスを発見すると、そのデバイスから照度と温度を得ます。 +ここでは子機のXBeeセンサーにDigi純正のXBee Sensorを想定していますが、 +自作したセンサーでもDIO1~2(XBee_pin 19~18)に0~1.2Vのアナログ電圧を +与えていれば、何らかの値を読みとることができます。 + +新しいXBee子機のコミッションボタンDIO0(XBee_pin 20)を押下する(信号レベ +ルがH→L→Hに推移する)と、子機から参加要求信号が発行されて、Arduino親機 +が子機を発見し、「found a device」と表示します。 + +ただし、複数のZigBeeネットワークに対応するために、ペアリングは起動後の +30秒間しか受け付けません。Arduino親機を起動して、コミッションボタンを +押してペアリングを実施しておき、再度、コミッションボタンでデバイス発見 +します。デバイス発見は30秒のペアリング期間後でも行えます。 + +本ソースリストおよびソフトウェアは、ライセンスフリーです。 +利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。 + +解説: +http://www.geocities.jp/bokunimowakaru/diy/xbee/xbee-nucleo.html + + Copyright (c) 2010-2012 Wataru KUNINO + http://www.geocities.jp/bokunimowakaru/ +*********************************************************************/ + +#include <xbee.h> +#include "TextLCD.h" +TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7 + +byte dev_sens[] = {0x00,0x13,0xA2,0x00,0x40,0x00,0x00,0x00}; // 仮設定 +byte dev_en = 0; // センサー発見の有無(0:未発見) + +void setup(){ + lcd.cls(); lcd.printf("Sample 4 SENS"); + xbee_init( 0x00 ); // XBee用COMポートの初期化(引数はポート番号) +} + +void loop(){ + byte i; + byte trig=0; + float value; + XBEE_RESULT xbee_result; // 受信データ用の構造体 + + // デバイス探索 + lcd.cls(); lcd.printf("Searching:SENSOR"); + if( xbee_atnj(10) ){ // 10秒間の参加受け入れ + lcd.cls(); lcd.printf("Found a device"); + xbee_from( dev_sens ); // 受信したアドレスをdev_sensへ格納 + dev_en = 1; // sensor発見済 + xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ + xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ + // xbee_gpio_config( dev_sens, 3 , AIN ); // 接続相手のポート3をAIN入力へ + }else{ + lcd.cls(); lcd.printf("Failed:no dev."); + } + wait(0.5); + lcd.cls(); lcd.printf("DONE"); + + // メイン処理 + lcd.cls(); lcd.printf("Receiving"); + while(1){ // 永久に受信する + if( dev_en && trig == 0){ + xbee_force( dev_sens ); // デバイスdev_sensへデータ要求(100回に1回の頻度で) + trig = 100; + } + trig--; + + /* データ受信(待ち受けて受信する) */ + xbee_rx_call( &xbee_result ); + // データを受信します。 + switch( xbee_result.MODE ){ // 受信したデータの内容(MODE値)に応じて + case MODE_RESP: // sensorからの応答の場合に照度と温度を表示 + case MODE_GPIN: // 周期方式でデータ受信した場合も想定 + if( bytecmp( dev_sens , &(xbee_result.FROM[0]) ,8 ) == 0 && xbee_result.STATUS == STATUS_OK ){ + // 照度測定結果 + value = xbee_sensor_result( &xbee_result, LIGHT); + lcd.cls(); lcd.printf( "%.1f",value ); lcd.printf(" Lux "); + // 温度測定結果 + value = xbee_sensor_result( &xbee_result, TEMP); + lcd.locate(0,1); lcd.printf( "%.1f",value ); lcd.printf(" C"); + } + break; + case MODE_IDNT: // 新しいデバイスを発見 + lcd.cls(); lcd.printf("found a new dev"); + for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i]; + // 発見したアドレスをdev_sensに読み込み + dev_en = 1; // sensor発見済 + xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ + xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ + // xbee_gpio_config( dev_sens, 3 , AIN ); // 接続相手のポート3をAIN入力へ + break; + default: + break; + } + } +} + +int main(){ + setup(); + while(1) loop(); +} \ No newline at end of file