Arduino Forum

International => Italiano => Software => Topic started by: Matteino on Jul 19, 2012, 08:10 pm

Title: Arduino Web Server(WiFi) + Processing
Post by: Matteino on Jul 19, 2012, 08:10 pm
Buonasera forum,
Vorrei inviare i valori di temperatura raccolti da Arduino+modulo wifi a Processing per poi rielaborarli graficamente o altro.
Avevo pensato di configurare Arduino+Wifi come web server (e fin qui tutto ok).
Processing, dovrebbe tramite una GET, richiedere il valore al server, ma non saprei come.
Qualcuno mi saprebbe aiutare?
Grazie in anticipo
Matteino
Title: Re: Arduino Web Server(WiFi) + Processing
Post by: pictux on Jul 19, 2012, 10:36 pm
Ciao,

Quote
Avevo pensato di configurare Arduino+Wifi come web server (e fin qui tutto ok).
Processing, dovrebbe tramite una GET, richiedere il valore al server, ma non saprei come.


parti da qui:
http://processing.org/reference/libraries/net/
Title: Re: Arduino Web Server(WiFi) + Processing
Post by: Matteino on Jul 19, 2012, 10:47 pm
Ciao,
grazie per la risposta. Avevo già letto il reference della libreria, ma non riesco a capire come leggere il dato dal web server.
Magari c'è un modo più semplice...
A me basterebbe inviare dall'Arduino/Wifi per esempio: VALORE1 = 20°C
A questo punto leggerlo da processing e convertirlo in un int.
Title: Re: Arduino Web Server(WiFi) + Processing
Post by: pictux on Jul 19, 2012, 11:32 pm
Ciao,
puoi seguire questo esempio:
http://processing.org/learning/library/httpclient.html
che di fatto fa una richiesta GET.

Dovrai poi all'interno della stringa data recuperare il valore che cerchi.

Per la conversione poi della stringa a int, considera che qui si utilizza java, quindi, di base:

Code: [Select]
String stringa_da_convertire;
int valore_integer;

stringa_da_convertire = "42";
valore_integer = Integer.parseInt(stringa_da_convertire);


Quale è il tuo obiettivo?
Avevi già considerato l'utilizzo di altri strumenti, per es. php + mysql, o soluzioni cloud tipo google docs... ?
Title: Re: Arduino Web Server(WiFi) + Processing
Post by: Matteino on Jul 21, 2012, 11:49 am
Ciao pitusso,
ecco il codice che ho scritto con le tue indicazioni:

import processing.net.*;
Client c;
String data;
int tempval;
String temp;

void setup() {
  size(200, 200);
  background(50);
  fill(200);
  c = new Client(this, "192.168.2.177", 80); // Connect to server on port 80
  c.write("GET / HTTP/1.0\r\n"); // Use the HTTP "GET" command to ask for a Web page
  c.write("\r\n");
}

void draw() {
  if (c.available() > 0) { // If there's incoming data from the client...
    data = c.readString(); // ...then grab it and print it
    temp = data.substring(49,53);
    tempval = Integer.parseInt(temp);
  }
}

in risposta però ottengo un errore:

Exception in thread "Animation Thread" java.lang.NumberFormatException: For input string: "27.7"
   at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
   at java.lang.Integer.parseInt(Integer.java:458)
   at java.lang.Integer.parseInt(Integer.java:499)
   at HTTPClient.draw(HTTPClient.java:57)
   at processing.core.PApplet.handleDraw(PApplet.java:1977)
   at processing.core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:187)
   at processing.core.PApplet.run(PApplet.java:1855)
   at java.lang.Thread.run(Thread.java:662)

Per il momento vorrei riuscire a leggere un valore di temperatura e visualizzarlo con un grafico in processing. Interessante anche Google docs, hai già sperimentato qualcosa?
Title: Re: Arduino Web Server(WiFi) + Processing
Post by: Matteino on Jul 21, 2012, 12:12 pm
Sono un p.... ! trovato l'errore. Essendo il dato con una cifra decimale, devo usare float. Quindi diventa:
tempval = Float.parseFloat(temp);
Adesso funziona.
Ho scoperto poi che può essere fatto anche con:
tempval = float(temp);
Title: Re: Arduino Web Server(WiFi) + Processing
Post by: DevonMiles on Jul 21, 2012, 01:07 pm

Interessante anche Google docs, hai già sperimentato qualcosa?

Ciao,
se vuoi passare i dati a Google docs ti consiglio di leggere qui:
http://www.open-electronics.org/how-send-data-from-arduino-to-google-docs-spreadsheet/
e un thread che avevo aperto:
http://arduino.cc/forum/index.php?topic=52321.0
Title: Re: Arduino Web Server(WiFi) + Processing
Post by: pictux on Jul 21, 2012, 03:13 pm
Ciao

Quote
Sono un p.... ! trovato l'errore. Essendo il dato con una cifra decimale, devo usare float. Quindi diventa:
tempval = Float.parseFloat(temp);


infatti, inizialmente parlavi di int.

Quote
Adesso funziona.
Ho scoperto poi che può essere fatto anche con:
tempval = float(temp);


certo, di base è la stessa cosa; puoi trovare esempi di conversione (cast) anche tra gli esempi dell'IDE di Processing, in particolare: Example -> Data -> DatatypeConversion

Quote
Interessante anche Google docs, hai già sperimentato qualcosa?


i link che ha postato DevonMiles sono i migliori che si possano trovare.