dimanche 1 décembre 2013

Analyse de trame xbee avec Processing

Pour analyser issues d'un xbee s1 côté base recevant une donnée analogique d'un autre xbee, copier ce code dans processing :



/*
XBee coté capteur à configurer en commande AT :
D02 (I/O O est configurée en entrée)
IR64 (période d'echantillonnage de 100 ms)
Penser à mettre Vref à 3,3V avec un Xbee S1.

côté Base : se mettre en mode API 1 avec X-CTU

Ce sketch permet d'analyser la trame et affiche la tension numérisée sur l'entrée 0
*/
import processing.serial.*;

Serial myPort;  // Create object from Serial class
int val = 0;      // Data received from the serial port
int[] data = new int [30];

void setup()
{
  size(200, 200);
  String portName = Serial.list()[0];
  myPort = new Serial(this, portName, 9600);
 
  textAlign(CENTER, CENTER);
  textSize(40);
  fill(255,0,0);
}

void draw()
{
  background(val/4);
  text (val,100,100);
  if ( myPort.available() >=14) {
    if (myPort.read()==0x7E){
      println("start : 7E");
      int lh = myPort.read();
      int lb = myPort.read();
      println("longueur MSB   :"+hex(lh,2));
      println("longueur LSB   :"+hex(lb,2));
      int longueur = lh*255 + lb;
      for (int i = 0; i<longueur ; i++){
        data[i]=myPort.read();
      }
      println("API identifier   :"+hex(data[0],2));
      println("Adresse 16 bits MSB   :"+hex(data[1],2));
      println("Adresse 16 bits LSB   :"+hex(data[2],2));
      println("Digital Channel Mask H  :"+hex(data[3],2));
      println("Digital Channel Mask L   :"+hex(data[4],2));
      println("Analog Channel Mask H   :"+hex(data[5],2));
      println("Analog Channel Mask L   :"+hex(data[6],2));
      println("Digital Samples   :"+hex(data[7],2));
      println("Analog samples H  :"+hex(data[8],2));
      println("Analog samples L  :"+hex(data[9],2));
      int checksum = myPort.read();
      println ("Checksum :"+hex(checksum,2));
      val = data[8]*255+data[9];
      println();
     
    }
  }
}

Aucun commentaire:

Enregistrer un commentaire