Чтение данных XBee в обработку - PullRequest
3 голосов
/ 10 июня 2010

Я недавно построил Tweet A Watt (http://www.ladyada.net/make/tweetawatt/) беспроводной монитор мощности, который использует XBee для передачи данных. Я пытаюсь передать данные Tweet A Watt в процессинг для использования при создании некоторой визуальной энергии прототипы обратной связи. Использование библиотеки API обработки XBee (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, RSSI и Total Samples (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 раз. Выполнение оригинального скрипта Python из программного обеспечения Tweet A Watt ( wattcher.py ) приводит к аналогичному чтению пакета XBee, но с 19 различными выборками. Это состояние, в которое я пытаюсь попасть при обработке.

В библиотеке API XBee функции getAnalog () и getAnalog (n) определены следующим образом:

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.

Я использую getAnalog (int n) в цикле для . Проблема в том, что я получаю только один «кадр» данных при вызове XBeeDataFrame data = xbee.getXBeeReading (); ?

Я также пытался читать последовательный пакет напрямую, без использования библиотеки API XBee (со ссылкой на (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, библиотекой API XBee или читающий Последовательные данные в Обработке, может помочь, это будет с благодарностью. Я ожидаю, что данные есть, я просто не получаю к ним доступ правильно Я понимаю, что это довольно специфический вопрос, и я разместил его в Adafruit (создатели набора Tweet A Watt - http://forums.adafruit.com/viewtopic.php?f=40&t=16067&sid=4e34727fa59b7c7d589564d2d6b85e46) и Processing (http://processing.org/discourse/yabb2/YaBB.pl?num=1276111549) форумы), но после десятков просмотров я у меня не было никаких ответов, поэтому я решил, что бросил сеть чуть шире.

Если я пропустил что-нибудь полезное, пожалуйста, дайте мне знать. Заранее спасибо за помощь.

1 Ответ

1 голос
/ 03 апреля 2012

В моей книге я сосредоточился на использовании более полных библиотек XBee-API для Java , созданных Эндрю Раппом. Они охватывают радиостанции Series 1 и Series 2, предоставляя полный набор взаимодействий API. Примеры кода, использующие эти библиотеки, доступны на странице Построение беспроводных сенсорных сетей .

...