Pages: [1]   Go Down
Author Topic: Come utilizzare la ethernet?  (Read 549 times)
0 Members and 1 Guest are viewing this topic.
Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non riesco a far funzionare correttamente una connessione ethernet. Dove devo fare?
Quello che deve fare il programma è la seguente procedura: controllo se dalla ethernet mi è arrivato qualche dato, se si processo la risposta e rispondo. Io ho fatto così:

Code:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x97, 0xFB };
IPAddress ip(10,10,10, 157);

EthernetServer MbServer(502);

byte ByteSendReceiveArray[100];

void setup() {
  Ethernet.begin(mac, ip);
  MbServer.begin();
};

void loop() {
  EthernetClient client = MbServer.available();

  if (!client) return;

  while (client.available()) {
    ByteSendReceiveArray[ByteRicevuti++] = client.read();
  }

  /*
  quello che devo fare...
  */

};


Il tutto funziona per un po di cicli e poi smette di rispondere... Perché?
Logged

0
Online Online
Shannon Member
****
Karma: 136
Posts: 10528
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

se non chiudi la connessione al clinet, allora arrivi al limite di 4 connessioni contemporanee.

Sarebbe carino che creassi un sketch che testi SOLOla etenet, per capire se il problema è nella libreria o nel tuo codice, un esempio come quello che hai poststao ma funzionante
Logged

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

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Intanto, come si chiude la connessione? Con client.stop()?
Logged

0
Online Online
Shannon Member
****
Karma: 136
Posts: 10528
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Logged

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

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Fatto, ma ancora non va. Per un po va (e più di 4 cicli) e poi smette di rispondere. Inoltre se aumento la frequenza delle richieste diminuisce anche il numero di volte (non il tempo) dopo il quale smette di funzionare...
Logged

0
Online Online
Shannon Member
****
Karma: 136
Posts: 10528
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ok, ci siamo. Assicurati di avere l'ultima versione di IDE (1.0.4) che risolve un BUG con la malloc(), e poi metti una serie di scritte seriali per capire dove si blocca il codice
Logged

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

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

 smiley-eek-blue Stamani non c'era la 1.0.4...
Logged

0
Online Online
Shannon Member
****
Karma: 136
Posts: 10528
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

lo so  smiley-razz
Logged

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

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per i posteri, ho risolto. Io problema era come utilizzavo la Ethernet. Mi spiego meglio: io facevo una cosa così strutturata:

Code:
void loop() {
  EthernetClient client = server.available()
  if (!client) {
    client.stop();
    return;
  }
  else {
    while (client.available()) {
      //leggo i dati
    }
    //elaboro i dati
    client.write(//dati da rispedire);
  }
}

Il problema di fondo è che questa cosa va bene se alla fine della comunicazione il client chiude la connessione, tipo un browser html, ma non nel mio caso, quindi ho fatto così:

Code:
EthernetClient client;
boolean alreadyConnect;
boolean datoRicevuto;
void loop() {
  if (!alreadyConnect) {
    client = server.available()
    if (!client) {
      datoRicevuto = false;
      client.stop();
      return;
    }
    else {
      alreadyConnect = true;
    }
  if (alreadyConnect) {
    if (!datoRicevuto) {
      while (client.available()) {
        //leggo i dati
      }
      //Verifico di aver ricevuto tutto il dato
      //nel mio caso la lunghezza del dato è contenuta nel dato stesso
      if (//condizione sul dato ricevuto) datoRicevuto = true;
    }
    if (datoRicevuto) {
      //Elaboro i dati
      client.write(//dati da spedire);
      datoRicevuto = false;
    }
    if (!client.connected()) {
      client.stop();
      alreadyConnect = false;
    }
  }
}

In pratica devo controllare se ho già una connessione aperta, nel qual caso di non riaprirla.
Logged

0
Online Online
Shannon Member
****
Karma: 136
Posts: 10528
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

mai fidarsi dei client...

anche i browser se usano il protocollo HTTP/1.1 non chiudono la connessione..
Logged

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

Pages: [1]   Go Up
Jump to: