私は最近、データ転送に 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 ) フォーラムですが、何十回も閲覧した後も返信がなかったので、ネットをもう少し広げてみようと思いました。