Describe BereBere/k2o2p5 here.

Recibiendo datos de un GPS de k2o a processing y guardandolos en un xml.

   1 /*
   2   *Este sketch recibe la posicion del GPS por OSC a travez de k2o y los guarda en un archivo xml.  
   3   *Necesita las librerias oscP5 y proxml (http://processing.org/reference/libraries/index.html).
   4   *Necesita correr k2oplay en mismo puerto usado por oscP5 con este comando:
   5   *
   6   *k2oplay log.txt osc.udp://localhost:54321
   7   * 
   8   *k2o: http://k2o.znerol.ch/
   9  */
  10 
  11 import proxml.*;
  12 import oscP5.*;
  13 import netP5.*;
  14 
  15 OscP5 oscP5;
  16 NetAddress myRemoteLocation;
  17 
  18 //elemento xml que va a guardar los datos
  19 XMLElement waypoints;
  20 
  21 XMLInOut xmlInOut;
  22 
  23 
  24 float lat = 0.0;
  25 float lon = 0.0;
  26 float alt = 0.0;
  27 
  28 void setup(){
  29   size(400,400);
  30   smooth();
  31   background(255);
  32   oscP5 = new OscP5(this,54321);
  33   //Carga el archivo xml
  34   xmlInOut = new XMLInOut(this);
  35   try{
  36     xmlInOut.loadElement("waypoints.xml"); 
  37   }
  38   catch(Exception e){
  39     //si no existe el archivo, crea un elemento xml nuevo
  40     xmlEvent(new XMLElement("waypoints"));
  41   }
  42 }
  43 
  44 void xmlEvent(XMLElement element){
  45   waypoints = element;
  46 }
  47 
  48 void draw(){
  49   xmlData();
  50   delay(10000);
  51   //espera 10 segundos antes de tomar la siguiente muestra.
  52 }
  53 
  54 void oscEvent(OscMessage theOscMessage) {
  55   /* compara las direcciones y si encuentra la correcta imprime el valor */
  56 
  57   if(theOscMessage.checkAddrPattern("/kismet/gps/lat")==true){
  58     lat = theOscMessage.get(0).floatValue();
  59     println("lat:"+ lat);
  60   }
  61   if(theOscMessage.checkAddrPattern("/kismet/gps/lon")==true){
  62     lon = theOscMessage.get(0).floatValue();
  63     println("lon:"+ lon);
  64   }
  65 
  66   if(theOscMessage.checkAddrPattern("/kismet/gps/alt")==true){
  67     alt = theOscMessage.get(0).floatValue();
  68     println("alt:"+ alt);
  69   }
  70 }
  71 
  72 //Funcion que guarda las variables de posicion en el xml.
  73 void xmlData(){
  74   XMLElement wp = new XMLElement("wp");
  75   waypoints.addChild(wp);
  76   wp.addAttribute("lat",lat);
  77   wp.addAttribute("lon",lon);
  78   wp.addAttribute("alt", alt);
  79   xmlInOut.saveElement(waypoints, "waypoints.xml");
  80 }

Este es el archivo xml creado, cada 10 segundos se agrega un nuevo waypoint:

   1 <?xml version="1.0" encoding="ISO-8859-1"?>
   2 <waypoints>
   3   <wp lat="0.0" alt="0.0" lon="0.0"/>
   4   <wp lat="0.0" alt="0.0" lon="0.0"/>
   5   <wp alt="8731.47" lat="4.632837" lon="-74.06216"/>
   6   <wp alt="8772.06" lat="4.632893" lon="-74.06216"/>
   7   <wp alt="8790.54" lat="4.63292" lon="-74.062164"/>
   8   <wp alt="8809.02" lat="4.632942" lon="-74.06218"/>
   9   <wp alt="8826.51" lat="4.632972" lon="-74.062195"/>
  10   <wp alt="8838.39" lat="4.632995" lon="-74.06219"/>
  11   <wp alt="8831.79" lat="4.632987" lon="-74.06219"/>
  12 </waypoints>

V.02 guarda datos recibidos desde arduino, k20 en un xml

   1 import processing.serial.*;
   2 import proxml.*;
   3 import oscP5.*;
   4 import netP5.*;
   5 
   6 OscP5 oscP5;
   7 NetAddress myRemoteLocation;
   8 
   9 //------------XML 
  10 //elemento xml que va a guardar los datos
  11 XMLElement waypoints;
  12 XMLInOut xmlInOut;
  13 float lat = 0.0;
  14 float lon = 0.0;
  15 float alt = 0.0;
  16 
  17 String essid="no_ssid";
  18 
  19 Serial puerto;                        
  20 int[] datosEntrantes = new int[2];   // arreglo para recibir los tres datos
  21 int cuantosDatos = 0;                // contador
  22 boolean hayDatos = false;            // control de verdad
  23 int mic, foto ;
  24 
  25 
  26 ////fecha y hora
  27 int dia = day();    
  28 int mes = month();
  29 int seg = second();  
  30 int minuto = minute();  
  31 int hora = hour();      
  32 
  33 
  34 void setup() {
  35   // asuntos seriales
  36   println(Serial.list());
  37   puerto = new Serial(this,"/dev/ttyUSB1", 9600);
  38   puerto.write(65);    // Envia el primer dato para iniciar el toma y dame
  39   
  40   ///////////////XML
  41     oscP5 = new OscP5(this,54321);
  42   //Carga el archivo xml
  43   xmlInOut = new XMLInOut(this);
  44   try{
  45     xmlInOut.loadElement("waypoints.xml"); 
  46   }
  47   catch(Exception e){
  48     //si no existe el archivo, crea un elemento xml nuevo
  49     xmlEvent(new XMLElement("waypoints"));
  50   }
  51 }
  52 
  53 void xmlEvent(XMLElement element){
  54   waypoints = element;
  55 }
  56 
  57 void draw() {
  58   
  59   xmlData();
  60   delay(10000);
  61   
  62     if (hayDatos == false) { //si no hay datos envia uno
  63     puerto.write(65);
  64   }
  65 }
  66 
  67 void oscEvent(OscMessage theOscMessage) {
  68   /* compara las direcciones y si encuentra la correcta imprime el valor */
  69 
  70   if(theOscMessage.checkAddrPattern("/kismet/gps/lat")==true){
  71     lat = theOscMessage.get(0).floatValue();
  72     println("lat:"+ lat);
  73   }
  74   if(theOscMessage.checkAddrPattern("/kismet/gps/lon")==true){
  75     lon = theOscMessage.get(0).floatValue();
  76     println("lon:"+ lon);
  77   }
  78 
  79   if(theOscMessage.checkAddrPattern("/kismet/gps/alt")==true){
  80     alt = theOscMessage.get(0).floatValue();
  81     println("alt:"+ alt);
  82   }
  83   if(theOscMessage.checkAddrPattern("/kismet/network/XX/ssid")==true){
  84     essid = theOscMessage.get(0).stringValue();
  85     println("essid:"+ essid);
  86   }
  87   
  88 }
  89 
  90 // esta función corre cada vez que llega un dato serial
  91 void serialEvent(Serial puerto) {
  92   if (hayDatos == false) { 
  93     hayDatos = true;    // de ahora en adelante el dato de envío se dará por el toma y dame
  94   }
  95   // Lee el dato y lo añade al arreglo en su última casilla
  96   datosEntrantes[cuantosDatos] = puerto.read();
  97   cuantosDatos++;
  98 
  99   if (cuantosDatos > 1 ) { // Si ya hay tres datos en el arreglo
 100     mic = datosEntrantes[0];
 101     foto = datosEntrantes[1];
 102    // println("Valores de los potenciometros: " + mic+ "," + foto );
 103     puerto.write(65); // y envía para pedir más
 104     cuantosDatos = 0; // y todo empieza de nuevo
 105   }
 106 }
 107 
 108 //Funcion que guarda las variables de posicion en el xml.
 109 void xmlData(){
 110   XMLElement wp = new XMLElement("wp");
 111   waypoints.addChild(wp);
 112   wp.addAttribute("hora", hora);
 113   wp.addAttribute("minuto", minuto);
 114   wp.addAttribute("segundo", seg);
 115   wp.addAttribute("lat",lat);
 116   wp.addAttribute("lon",lon);
 117   wp.addAttribute("alt", alt);
 118   wp.addAttribute("mic", mic);
 119   wp.addAttribute("foto", foto);
 120   wp.addAttribute("essid", essid);
 121   xmlInOut.saveElement(waypoints, "waypoints.xml");
 122 }
 123 

xml data:

   1 <?xml version="1.0" encoding="ISO-8859-1"?>
   2 <waypoints>
   3   <wp lon="0.0" segundo="16" hora="15" essid="no_ssid" foto="165" alt="0.0" lat="0.0" minuto="8" mic="14"/>
   4   <wp lon="0.0" segundo="16" hora="15" essid="no_ssid" foto="161" alt="0.0" lat="0.0" minuto="8" mic="13"/>
   5   <wp lon="0.0" segundo="16" hora="15" essid="no_ssid" foto="165" alt="0.0" lat="0.0" minuto="8" mic="12"/>
   6   <wp lon="0.0" segundo="16" hora="15" essid="no_ssid" foto="166" alt="0.0" lat="0.0" minuto="8" mic="13"/>
   7   <wp lon="0.0" segundo="16" hora="15" essid="no_ssid" foto="167" alt="0.0" lat="0.0" minuto="8" mic="13"/>
   8   <wp lon="0.0" segundo="16" hora="15" essid="no_ssid" foto="165" alt="0.0" lat="0.0" minuto="8" mic="13"/>
   9 </waypoints>

wardriving log: log.xml

v.02.1

changeLog>> arregle la actualización y escritura del tiempo, dividí el código en scripts independientes para organizarlo un poco.

k20p5_02.1.tar.gz

TODO:

* Aniadir datos de sensores en cada wp

* Orgnizar los datos en una estructura de arbol en el archivo xml.

* h:m:s de cada uno de los wps.

Bere.Bere: BereBere/k2o2p5 (last edited 2007-05-03 02:07:44 by zea)