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