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
main.cpp
00001 /********************************************************************* 00002 サンプルアプリ4 センサー 00003 新しいセンサーデバイスを発見すると、そのデバイスから照度と温度を得ます。 00004 ここでは子機のXBeeセンサーにDigi純正のXBee Sensorを想定していますが、 00005 自作したセンサーでもDIO1~2(XBee_pin 19~18)に0~1.2Vのアナログ電圧を 00006 与えていれば、何らかの値を読みとることができます。 00007 00008 Sample Code 4 Sensor 00009 Measured results of an XBee wireless sensor device are displayed a LCD 00010 on Nucleo board with an XBee coordinator which is in API mode. 00011 When you will use this anything other than Nucleo microcomputer board, 00012 please change the 4th line of xbee/xbee.cpp: 00013 RawSerial _xbee_serial(SERIAL_TX, SERIAL_RX); 00014 00015 新しいXBee子機のコミッションボタンDIO0(XBee_pin 20)を押下する(信号レベ 00016 ルがH→L→Hに推移する)と、子機から参加要求信号が発行されて、Arduino親機 00017 が子機を発見し、「found a device」と表示します。 00018 00019 ただし、複数のZigBeeネットワークに対応するために、ペアリングは起動後の 00020 30秒間しか受け付けません。Arduino親機を起動して、コミッションボタンを 00021 押してペアリングを実施しておき、再度、コミッションボタンでデバイス発見 00022 します。デバイス発見は30秒のペアリング期間後でも行えます。 00023 00024 本ソースリストおよびソフトウェアは、ライセンスフリーです。 00025 利用、編集、再配布等が自由に行えますが、著作権表示の改変は禁止します。 00026 00027 解説: 00028 http://www.geocities.jp/bokunimowakaru/diy/xbee/xbee-nucleo.html 00029 00030 Copyright (c) 2010-2014 Wataru KUNINO 00031 http://www.geocities.jp/bokunimowakaru/ 00032 *********************************************************************/ 00033 #include <mbed.h> 00034 #include "xbee.h" 00035 #include "TextLCD.h" 00036 #define FORCE_INTERVAL 100 // 1~254 データ要求間隔 00037 TextLCD lcd(PA_9, PC_7, PB_5, PB_4, PB_10, PA_8); // rs, e, d4-d7 00038 byte dev_sens[8]; // IEEE Address 00039 00040 int main(){ 00041 int i; 00042 int dev_en = 0; // センサー発見の有無(0:未発見) 00043 XBEE_RESULT xbee_result; // 受信データ用の構造体 00044 int trig=0; 00045 float value; 00046 00047 lcd.cls(); lcd.printf("Sample 4 SENS"); 00048 xbee_init( 0x00 ); // XBee用COMポートの初期化(引数はポート番号) 00049 // デバイス探索 00050 lcd.cls(); lcd.printf("Searching:SENSOR"); 00051 if( xbee_atnj(10) ){ // 10秒間の参加受け入れ 00052 lcd.cls(); lcd.printf("Found a device"); 00053 xbee_from( dev_sens ); // 受信したアドレスをdev_sensへ格納 00054 dev_en = 1; // sensor発見済 00055 xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ 00056 xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ 00057 }else{ 00058 lcd.cls(); lcd.printf("Failed:no dev."); 00059 } 00060 wait(1); 00061 lcd.cls(); 00062 00063 // メイン処理 00064 while(1){ // 永久に受信する 00065 if(dev_en){ 00066 if(trig<=0){ 00067 lcd.locate(12,0); lcd.printf("Trig"); wait(0.1); 00068 xbee_force(dev_sens); // デバイスdev_sensへデータ要求 00069 trig = FORCE_INTERVAL; 00070 lcd.locate(12,0); lcd.printf(" "); 00071 } 00072 }else{ 00073 lcd.cls(); lcd.printf("Waiting for XBee"); 00074 wait(0.5); 00075 lcd.cls(); 00076 } 00077 trig--; 00078 00079 /* データ受信(待ち受けて受信する) */ 00080 xbee_rx_call( &xbee_result ); // データを受信します。 00081 switch( xbee_result.MODE ){ // 受信したデータの内容(MODE値)に応じて 00082 case MODE_RESP: // sensorからの応答の場合に照度と温度を表示 00083 case MODE_GPIN: // 周期方式でデータ受信した場合も想定 00084 if( bytecmp( dev_sens , &(xbee_result.FROM[0]) ,8 ) == 0 && xbee_result.STATUS == STATUS_OK ){ 00085 // 照度測定結果 00086 value = xbee_sensor_result( &xbee_result, LIGHT); 00087 lcd.locate(0,0); lcd.printf( "%.1f Lux ",value); 00088 // 温度測定結果 00089 value = xbee_sensor_result( &xbee_result, TEMP); 00090 lcd.locate(0,1); lcd.printf( "%.1f C ",value); 00091 } 00092 break; 00093 case MODE_IDNT: // 新しいデバイスを発見 00094 lcd.cls(); lcd.printf("found a new dev"); 00095 for( i=0;i<8;i++ ) dev_sens[i]=xbee_result.FROM[i]; 00096 // 発見したアドレスをdev_sensに読み込み 00097 dev_en = 1; // sensor発見済 00098 trig = 0; 00099 xbee_gpio_config( dev_sens, 1 , AIN ); // 接続相手のポート1をAIN入力へ 00100 xbee_gpio_config( dev_sens, 2 , AIN ); // 接続相手のポート2をAIN入力へ 00101 lcd.cls(); 00102 break; 00103 default: 00104 break; 00105 } 00106 } 00107 }
Generated on Wed Jul 20 2022 17:24:48 by 1.7.2