2010-06-10 6 views
3

J'ai récemment construit un moniteur d'alimentation sans fil Tweet A Watt (http://www.ladyada.net/make/tweetawatt/), qui utilise XBee pour le transfert de données. J'essaye d'obtenir les données de Tweet A Watt dans le traitement pour la création de certains prototypes de retour d'énergie visuelle. En utilisant la bibliothèque d'API XBee pour le traitement (http://www.faludi.com/code/xbee-api-library-for-processing/), j'ai fait quelques progrès, mais je me suis heurté à un obstacle que j'apprécierais.Lecture des données XBee en traitement

esquisse Mon traitement ressemble à ceci:

/* 
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(""); } 
    } 
}

Tout cela fonctionne comme prévu. L'événement xBeeEvent est appelé toutes les 2 secondes et génère les valeurs correctes pour l'ID API, RSSI et Total Samples (19). Cependant, lors de la sortie du contenu des lectures analogiques, il me semble que le premier échantillon est répété 19 fois. Voir cet exemple de sortie:

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]

Comme vous pouvez le voir, le premier échantillon est répété 19 fois. L'exécution du script Python d'origine à partir du logiciel Tweet A Watt ( wattcher.py) génère une lecture similaire du paquet XBee, mais avec 19 échantillons distincts. C'est l'état que j'essaye d'obtenir dans le traitement.

Dans l'API XBee Library, les fonctions getAnalog() et getAnalog (n) sont définis comme suit:

getAnalog() – returns an array of integers that represents the current state of each analog channel with -1 indicating that the channel is not configured for analog. Use this when there is only one sample per frame. 

getAnalog(int n) – returns the nth sample of analog data as an array of integers with -1 indicating that the channel is not configured for analog.

J'utilise getAnalog (int n) dans la boucle. Est le problème que je reçois seulement un "cadre" de données, dans l'appel à XBeeDataFrame data = xbee.getXBeeReading();?

J'ai aussi essayé de lire le paquet de série directement sans utiliser l'API XBee Library (en référence à (http://www.tigoe.net/pcomp/code/category/Processing/8), (http://processing.org/reference/libraries/serial/Serial.html), et (http://ssdl.stanford.edu/ssdl/images/stories/AA236/0708A/Lab/Rover/Parts/xbeeproproductmanual.pdf), mais mon manque d'expérience dans ce domaine en fait un peu de

Si quelqu'un connaissant le paquet XBee, la bibliothèque d'API XBee, ou lisant des données de série dans le traitement peut vous aider, ce serait très apprécié Je m'attends à ce que les données soient là, je ne suis pas Je me rends compte que c'est une question assez spécifique, et je l'ai posté dans les forums Adafruit (fabricants du kit Tweet A Watt - http://forums.adafruit.com/viewtopic.php?f=40&t=16067&sid=4e34727fa59b7c7d589564d2d6b85e46) et Processing (http://processing.org/discourse/yabb2/YaBB.pl?num=1276111549), mais après des dizaines de points de vue je n'ai pas eu tout re des plis, alors je me suis dit que je devrais jeter le filet un peu plus large.

Si j'ai oublié quelque chose qui pourrait vous être utile, s'il vous plaît faites le moi savoir. Merci d'avance pour votre aide.

Répondre

1

Dans mon livre, je me suis concentré sur l'utilisation du plus complet XBee-API libraries for Java créé par Andrew Rapp. Ils couvrent à la fois les radios des séries 1 et 2, fournissant une suite complète d'interactions API. Les exemples de code qui utilisent ces bibliothèques sont disponibles sur le Building Wireless Sensor Networks page.