Pages: [1]   Go Down
Author Topic: Serial proxy  (Read 1012 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti,
per fare economia ho deciso di trovare/fare/compilare un programma che mi consenta di richiedere dalla seriale il codice HTML di una pagina risiedente in internet.
Ho provato a cercare nell'arduino playground(http://arduino.cc/playground/Interfacing/SerialNet) ma purtroppo non ho trovato nulla che faccia al caso mio, o meglio:
  • Ho provato la Javaproxy ma in java non so proprio programmare e non sono riuscito neanche a compilare il codice  smiley-sad-blue
  • Ho provato Serialnet.pde ma come anche con il programma prima di lui nella lista richiede una connessione su una porta TCP/IP e sinceramente io chiedevo che l'arduino richiedesse quella connessione
  • Ho provato la SerialIP library ma non ha funzionato il codice di esempio sull'ultimo IDE arduino

se qualcuno riesce a trovare un programma che faccia al caso mio o riesce a risolvere/spiegare i miei problemi, scriva qui sotto smiley
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10465
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sicuramnte non basta il codice arduino, devi avere un "demone", ovvero un programma in ascolto di qualcosa (la seriale in questo caso), elabori le richieste e le ritrasmetta in rete.

Il programma Processing si occupa di fare da server, ovvero rimane in ascolto di una porta sul PC per connessioni in entrata, e ritrasmette tutto (in 2 direzioni) via seriale.

Da quello che ho capito invece tu vuoi fare da client: in questo caso, per rimanere su processing (che poi è un dialetto java) guarda i vari esempi che usano la classe Socket.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21494
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ho capito per cosa serve?
Con la complessitá delle pagine internet di oggi il trasferimento attraverso la seriale servirá perecchi secondi se non minuti.
Ciao Uwe
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per l'indirizzamento a lesto.
Beh serve per connettermi a una pagina di un mio server che ovviamente sarà scritta in php. Facendo richiedere all'arduino la pagina http://xxx.xxx.x.x/index.php?sen1=768&sen2=987 php restituirà un pagina bianca(e quindi l'arduino non dovrà "scaricare" nulla) e nel frattempo inserirà i valori in un database per poi mostrarli all'utente in un'altra pagina php che ha il semplice compito di mostrare l'array del database.
Se avete altre domande fatele pure smiley Io nel frattempo vedo Socket...
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ho trovato la classe Socket in compenso però sono riuscito a trovare alcuni codici di example che messi insieme potrebbero fare al caso mio. Ho creato questi due codici:
ARDUINO:
Code:
String website = "www.google.it";
int result;

void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
pinMode(3, INPUT);
Serial.println(website);
}

void loop()
{
if (Serial.available() > 0) {
result = Serial.read();
if (result == 1) { digitalWrite(13, HIGH); }
else { digitalWrite(13, LOW); }
}

if (digitalRead(3) == HIGH) { Serial.print(website); delay(5000); }

}

PROCESSING:
Code:
import processing.serial.*;

Serial arduino;

String[] lines;

void setup() {
  //Inizializzo la seriale collegata all'arduino
arduino = new Serial(this, "COM3", 9600);
}

void draw()
{
//Metto lo sfondo verde per indicare che il server è in esecuzione
background(10,170,0);
//Finchè l'arduino mi da caratteri
 while (arduino.available() > 0) {
   //Creo una stringa che li contenga tutti
    String inBuffer = arduino.readString();   
    //Se la stringa non è vuota
    if (inBuffer != null) {
      //Stampa la stringa
      println(inBuffer);
      //Mette lo sfondo a giallo
      background(230,230,0);
      //Prende la linea da internet
      lines = loadStrings(inBuffer);
      println(lines);
      //Stampa 1 se la prima linea è OK altrimenti 0
      if (lines[0] == "OK") { arduino.write(1); }
      else { arduino.write(0); }
     
    }
    //Altrimenti metti lo sfondo rosso e aspetta 5 secondi
    else { background(180,0,0); delay(5000); }
 }
 
 
}

Il problema è che processing non riesce a ricevere la stringa dall'arduino, o meglio ne riceve solamente una parte. Nel primo caso in cui l'arduino scriveva a seriale nel caso non ricevesse OK da processing, esso riceveva caratteri incomprensibili e un pezzo di stringa. così ho aggiunto un pulsante in modo che srivesso dopo un po' solo all'input dell'utente in quanto pensavo che il problema fosse che processing non sapeva dove finiva la stringa ma anche qui ne predne solo un pezzo e poi ovviamente mi dice che il documento non è raggiungibile.
Qualche idea per fixare il problema?

per altro l'output di processing è questo:
Code:

WARNING:  RXTX Version mismatch
Jar version = RXTX-2.2pre1
native lib Version = RXTX-2.2pre2
www.g
null
The file "www.g" is missing or inaccessible, make sure the URL is valid or that the file has been added to your sketch and is readable.
Exception in thread "Animation Thread" java.lang.NullPointerException
at sketch_apr22b.draw(sketch_apr22b.java:51)
at processing.core.PApplet.handleDraw(Unknown Source)
at processing.core.PApplet.run(Unknown Source)
at java.lang.Thread.run(Thread.java:662)
Logged

BZ (I)
Offline Offline
Brattain Member
*****
Karma: 258
Posts: 21494
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non ho ancora capito a cosa serve Arduino in tutto questo. Non puoi farlo col PC e spedire dati letti del Arduino via USB/seriale al PC?
Ciao Uwe
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10465
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

allora, partiamo dalla fine. Il WARNING non è assolutamente un problema, non te ne preoccupare.

Quote
Il problema è che processing non riesce a ricevere la stringa dall'arduino, o meglio ne riceve solamente una parte
certo, leggi quella che è arrivata fino a quel momento. la stessa cosa ti capiterà con internet, anzi addirittura in modo più evidente.


Usa un carattere per indicare che la stringa di arrivo è finita, e il processing dovrà concatenare le stringhe finché non rileva quel carattere: a quel punto può inviare la richiesta. di solito come carattere si usa il '\n', che poi vuol dire "a capo" (invio, per intenderci)

se vuoi fare una richiesta HTTP, allora in java (e quindi probabilmente anche in processing) puoi usare la classe "HttpURLConnection", ed ecco un esempio (in java, ma portarlo in processing dovrebbe essere poco più di un copi-incolla) http://digiassn.blogspot.it/2008/10/java-simple-httpurlconnection-example.html
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo scopo si tutto questo è poter accedere ai valori dell'arduino semplicemente connettendomi al mio server casalingo... lesto, non ho capito molto bene come mettere in atto questa cosa, ho capito che processing deve trovare lo /n e mettere in coda la stringa ma nulla più di altro.. Un esempio  smiley?
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10465
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

l'esempio chge ti ho postato fa la stessa cosa, però con il "carattere" null...
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

effettivamente processing riconosce il codice con una sola modifica smiley-grin
il problema è che mi da un errore:
Code:
Usage: PApplet <appletname>
For additional options, see the Javadoc for PApplet
Cercando su internet ho visto che questo errore significa una mancata inizializzazione del PApplet, appunto, e che quensto succede in processing quando non si importa una libreria quando si usa la porta seriale(cosa ovviamente relazionata al mio "progetto"), come potete leggere in inglese qui http://processing.org/discourse/beta/num_1225493511.html.
ho trovato anche un'altro link che sembra aver trovato un pezzo di codice funzionante. Questo:
Code:
http://forum.processing.org/topic/papplet-loaded-in-junit4-eclipse-does-nt-work
ma utilizza eclipse e per fare tutt'altro che seriale da quello che ho capito.

EDIT:  viene dato questo errore quando non si specifica l'apertura di nessuna finestra e quindi processing da l'errore. Rimettendo nel codice la solita strittura:
Code:
void setup()
{
size(200,200);

//INIZIO CODICE

//FINE CODICE
}
void draw()
{

}

mi da altri errori quindi il PApplet non è più il problema.
Se qualcuno mi aiuta a collegare le soluzioni mi fa un favore smiley
« Last Edit: April 25, 2012, 05:18:03 am by aleale97 » Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10465
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ma ce l'hai la java JDK? se no installala. poi reinstalla processing. Se anche gli esempi base non compilano, è per forza un'errore di installazione o dipendenze.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Jr. Member
**
Karma: 0
Posts: 84
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Interessante, ora gli errori cambiano:
  • Se copio e incollo il codice mi sa semplicemente processing.app.SketchException: unexpected token: package
  • Se rimuovo package com.digiassn.blogspot; l'errore diventa Usage: PApplet <appletname>, ma se includo il codice nella prassi(void setup, void draw) mi restituisce Illegal modifier for the local class SimpleHTTPRequest, only abstract or final is permitted

Purtroppo qui non posso neanche tentare di risolverli gli errori perchè non capisco dove stanno gli stessi... Ancora chiedo a voi sommi smiley-grin... Grazie mille ancora.
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10465
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non hai un'installazione fatta bene, non arriverai mai a risolverli
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Pages: [1]   Go Up
Jump to: