3

私は最近、データ転送に XBee を使用する Tweet A Watt ( http://www.ladyada.net/make/tweetawatt/ ) ワイヤレス電力モニターを作成しました。Tweet A Watt のデータを Processing に取り込んで、視覚エネルギー フィードバックのプロトタイプを作成しようとしています。処理用の XBee API ライブラリ ( http://www.faludi.com/code/xbee-api-library-for-processing/ ) を使用して、ある程度の前進はできましたが、障害にぶつかりました。任意の入力をオンにします。

私の処理スケッチは次のようになります。

/*
XBee Communication Prototype
XBee API Library by Daniel Shiffman and Rob Faludi: http://www.faludi.com/code/xbee-api-library-for-processing/
Sample XBee communication code adapted from Tom Igoe: http://www.tigoe.net/pcomp/code/category/Processing/148
*/

//import the xbee and serial libraries:
import xbee.*;
import processing.serial.*;

// set up Xbee parameters:
Serial port;
XBeeReader xbee;
int rssi = 0;     // received signal strength
int address = 0;     // sender's address
int samples = 0;     // total number of samples
int[] analog;     // values from the analog I/O pins

void setup() {
  // set up xbee
  port = new Serial(this, Serial.list()[0], 9600);
  xbee = new XBeeReader(this, port);
  xbee.startXBee();  
}

void draw() {}    

// called every time an XBee event is received: every 2s in the case of the Tweet A Watt
public void xBeeEvent(XBeeReader xbee) {    
   // Grab a frame of data
   XBeeDataFrame data = xbee.getXBeeReading();   
  
  println("");
  println("LOOP " + hour() + ":" + minute() + ":" + second());

    // Get the transmitter address
    address = data.getAddress16();
    println("API ID: " + address);    

    // Get the RSSI
    rssi = data.getRSSI();
  println("RSSI: " + rssi);      
                    
  // Get total number of samples
  samples = data.getTotalSamples();   
  println("Total Samples: " + samples);    

  // Output the Analog readings for each sample     
  // ONLY GETS FIRST SAMPLE - How do I access all samples?
  for (int i=0; i < samples; i++) {
   analog = data.getAnalog(i);
   print("[");
   for (int j=0; j < analog.length; j++) {
    print(analog[j]);
    if (j < analog.length - 1) { print(", "); }
   }
   print("]");
   if (i < samples - 1) { print(", "); }
   else { println(""); }
  }
}

これはすべて期待どおりに機能します。xBeeEvent は 2 秒ごとに呼び出され、API ID、RSSI、および合計サンプル (19) の正しい値を出力します。ただし、アナログ読み取り値の内容を出力すると、最初のサンプルが 19 回繰り返されているようです。この出力例を参照してください。

LOOP 10:37:57
API ID: 1
RSSI: -61
Total Samples: 19
[512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1], [512, -1, -1, -1, 688, -1]

LOOP 10:38:59
API ID: 1
RSSI: -61
Total Samples: 19
[503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1], [503, -1, -1, -1, 561, -1]

ご覧のとおり、最初のサンプルは 19 回繰り返されています。Tweet A Watt ソフトウェア ( wattcher.py )から元の Python スクリプトを実行すると、XBee パケットの同様の読み取りが出力されますが、19 の異なるサンプルが含まれます。これは、Processing で取得しようとしている状態です。

XBee API ライブラリでは、getAnalog() および getAnalog(n) 関数は次のように定義されています。

getAnalog() – 各アナログ チャネルの現在の状態を表す整数の配列を返します。-1 は、チャネルがアナログ用に構成されていないことを示します。フレームごとに 1 つのサンプルしかない場合に使用します。

getAnalog(int n) – アナログ データの n 番目のサンプルを整数の配列として返します。-1 はチャネルがアナログ用に構成されていないことを示します。

forループでgetAnalog(int n)を使用しています。XBeeDataFrame data = xbee.getXBeeReading();への呼び出しで、データの「フレーム」を 1 つしか取得していないという問題があります。?

また、XBee API ライブラリを使用せずにシリアル パケットを直接読み取ろうとしました (( http://www.tigoe.net/pcomp/code/category/Processing/8を参照)、( http://processing.org /reference/libraries/serial/Serial.html )、および ( http://ssdl.stanford.edu/ssdl/images/stories/AA236/0708A/Lab/Rover/Parts/xbeeproproductmanual.pdf )、しかし私の経験不足この分野では、これは少し初心者です。

XBee パケット、XBee API ライブラリ、または Processing でのシリアル データの読み取りに精通している方であれば、どなたか助けていただければ幸いです。データがそこにあることを期待していますが、正しくアクセスしていません。これは非常に具体的な質問であることに気づき、Adafruit (Tweet A Watt キットのメーカー - http://forums.adafruit.com/viewtopic.php?f=40&t=16067&sid=4e34727fa59b7c7d589564d2d6b85e46 ) に投稿しました。処理 ( http://processing.org/discourse/yabb2/YaBB.pl?num=1276111549 ) フォーラムですが、何十回も閲覧した後も返信がなかったので、ネットをもう少し広げてみようと思いました。

4

1 に答える 1

2

私の著書では、Andrew Rapp によって作成されたJava 用のより完全な XBee-API ライブラリの使用に焦点を当てました。シリーズ 1 無線とシリーズ 2 無線の両方をカバーし、API インタラクションの完全なスイートを提供します。これらのライブラリを使用するコード例は、ワイヤレス センサー ネットワークの構築ページで入手できます。

于 2012-04-03T16:46:37.853 に答える