Go Down

Topic: Ethernet Shield mi blocca tutto ! (Read 10092 times) previous topic - next topic

lesto

no, io seguo gli issue, quindi magari son pull-request che non sono state ancora accettate/respinte.
occhio che molte modifiche non sono fatte sul branch principale ma su rami secondari (esempio: ide-1.5.x-pull115) che poi vengono mergiati.
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

gpb01


urca, riesci a wiresharcare il traffico e vedere cosa succede? magari tenendo anche d'occchio la RAM disponibile?


Posso provarci ...
... però attenzione, come per la ethernet, anche per la WiFi, credo che l'HW continui a funzionare regolarmente, solo che da SW, non si ricevono più le connessioni (... problema della libreria). Il codice però continua a girare e il memoryFree riporta ancora alcune centinaia di byte di RAM libera (sull'UNO).

Ora sto facendo una prova inserendo nel loop, ogni N secondi, uno statement che, di per se è messo nel punto sbagliato e con la logica sbagliata (... è una server.write('0') senza alcuna connessione attiva), ma che mi ha dato l'idea eviti il blocco (... data la casualità del problema, non sei mai sicuro se l'hai risolto o meno).

Guglielmo
Search is Your friend ... or I am Your enemy !

Janos


no, io seguo gli issue, quindi magari son pull-request che non sono state ancora accettate/respinte.
occhio che molte modifiche non sono fatte sul branch principale ma su rami secondari (esempio: ide-1.5.x-pull115) che poi vengono mergiati.


Però allora è inutile scaricare, almeno per il momento, la 1.0.5 da git...  ;)

PaoloP

Non ci sono molte modifiche
--> https://github.com/arduino/Arduino/blob/master/build/shared/revisions.txt

lesto

non guardare i revision .txt che sono solo il sunto del riassunto, e fatto a mano, cioè fallibile... molto meglio guardare l'elnco di tutte le modifiche effettuate :)

https://github.com/arduino/Arduino/commits/master

notare il 28 un "Merge branch 'wifishield-bugfix'"

Quote
... però attenzione, come per la ethernet, anche per la WiFi, credo che l'HW continui a funzionare regolarmente, solo che da SW, non si ricevono più le connessioni


come l'ethernet? allora basta vedere se l'ip risponde ai ping. Se si il problema è solo lato libreria
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

acik

#35
Apr 02, 2013, 11:00 pm Last Edit: Apr 03, 2013, 12:21 am by acik Reason: 1
Eccomi qua.
Appena tornato a casa ;-)

Per ora Arduino sta ancora funzionando...

Ho fatto una piccolissima modifica allo sketch originale WebServer della IDE 1.0.4:
Dopo if (client) ho aggiunto digitalWrite(3, HIGH); //appena un client http si connette, accende il LED sul PIN 3

Dopo client.println("</html>"); ho aggiunto digitalWrite(3, LOW); //quando ha finito di mandare la pagina html, spegne il LED sul PIN 3


Oltre a questo, alla fine dello sketch dentro loop() ho aggiunto:
Code: [Select]
if (dir == 0) {
   loops ++;
   if (loops > 10000) { dir = 1; loops = 1; digitalWrite(6, HIGH);}
 }
 if (dir == 1) {
   loops --;
   if (loops < 1) { dir = 0; digitalWrite(6, LOW);}
 }

Che mi conta quante volte e' stato eseguito loop() ed ogni 10.000 esecuzioni, mi fa un breve blink al LED collegato al PIN 6.

In questa maniera, se il LED al PIN 3 smette di lampeggiare, so che la EthernetShield ha smesso di dialogare con la UNO.
Se il LED al PIN 6 smette di lampeggiare, so che la loop() ha smesso di loopare  :D


acik

#36
Apr 02, 2013, 11:13 pm Last Edit: Apr 02, 2013, 11:15 pm by acik Reason: 1

Guarda sono diventato pazzo come te con sta scheda ......... l'unico modo che fino ad ora non ha mai fallito è questo
Code: [Select]
Ethernet.begin(mac,ip);
prova così però non fare come altri che poi spariscono e non sappiamo mai se ha migliorato la condizione o meno ci interessa sapere come è andata :)


Tranquillo, non sparisco !

Io in realta' pensavo di eseguire ethernet begin, ad ogni richiesta http, dopo che ho finito di mandare i dati al client.... Convinto che si trattasse di un blocco dovuto a troppe connessioni (quando quell' Arduino era raggiungibile via WEB)

Mettere un ethernet begin ogni tot minuti, non mi piace, in quanto potrebbe resettarmi la scheda proprio nel momento in cui sto trasferendo dati... non mi piace.

Torna l' idea di far fare a quell' Arduino una richiesta ad un server http esterno, in caso di mancata risposta, faccio un ethernet begin.



to be continued ...

lesto

ok, ho riesaumato una eth shield v1.1, vediamo cosa succede. Mettiamoci d'accordo sullo sketch: prima di tutto dobbiamo rendere il problema riproducubile.

prima di tutto che IDE usiamo? io dire la 1.0.4 finchè non esce la 1.0.5 ufficialmente nella pagina download
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Janos

#38
Apr 02, 2013, 11:27 pm Last Edit: Apr 02, 2013, 11:51 pm by Janos Reason: 1
La butto li, ma se fosse semplicemente che, con la librerie standard, non si riesce a gestire più connessioni simultaneamente?
Mi spiego meglio: continuando quanto scritto qui http://arduino.cc/forum/index.php/topic,154157.0.html potrebbe essere che facendo così
Code: [Select]
EthernetClient client = server.available()
Si vada a prendere sempre la stessa connessione, quindi in caso di connessioni simultanee se ne gestirebbe una sola.

Un'altra idea potrebbe essere che il protocollo TCP, per come è fatto (se non erro, altrimenti smentitemi pure...  ;)) non prevede un timeout di connessione, quindi se un client non chiude la connessione questa rimane attiva e facendo sempre la server.available() la classe tornerà sempre la connessione "morta".

Per test provate a collegarvi via HyperTerminal all'IP di Arduino sulla porta 80, magari ad inviare anche qualcosa per farvi rispondere (tipo HTTP POST, non conosco le sintassi HTML) ma senza chiudere la connessione, se ho ragione non dovrebbe più rispondervi da browser...

EDIT: Ho allegato la mia libreria EthernetServer modificata, e una libreria che mi sono fatto per gestire più agevolmente le connessioni simultanee in quanto avevo l'esigenza di assegnare determinati socket ad un server ed altri ad un altro server. Provate a dargli un'occhiata se può farvi comodo...

lesto

come non detto, i mie shield farlocchi sono ENC28J60, non wiznet  :smiley-roll-blue:
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

acik

#40
Apr 03, 2013, 12:11 am Last Edit: Apr 03, 2013, 10:54 pm by acik Reason: 1

ok, ho riesaumato una eth shield v1.1, vediamo cosa succede. Mettiamoci d'accordo sullo sketch: prima di tutto dobbiamo rendere il problema riproducubile.

prima di tutto che IDE usiamo? io dire la 1.0.4 finchè non esce la 1.0.5 ufficialmente nella pagina download

Dopo mio primo post in questo 3D, ho iniziato subito a usare solo la IDE 1.0.4 e lo sketch di esempio "WebServer" presente nella stessa.

Janos

Ho provato a modificare l'esempio della connessione mettendo un timeout sulla connessione, provate questo per vedere se si blocca ancora...

pablos

#42
Apr 03, 2013, 12:41 pm Last Edit: Apr 03, 2013, 01:42 pm by pablos Reason: 1
Quote
Mettere un ethernet begin ogni tot minuti, non mi piace, in quanto potrebbe resettarmi la scheda proprio nel momento in cui sto trasferendo dati... non mi piace.


Non penso proprio possa accadere se utilizzi una funzione standard
Code: [Select]
if (client.available())
   {  
      while ((c = client.read())>0)
      {
         readString += (char)c;
        ...
        ...
      }
  }
client.stop();

Come fa a reinizializzarsi se non esce dall' if e dall' while?
Comunque lo sto usando da mesi e a me va bene, non ho rallentamenti e ne perdite di dati (e sono tanti i byte che trafficano)
Se lasci il client aperto può succedere, ma se lo fai allora te li vai proprio a cercare i problemi :)

Quote
Torna l' idea di far fare a quell' Arduino una richiesta ad un server http esterno, in caso di mancata risposta, faccio un ethernet begin.

ho già provato non funziona quando te ne accorgi è troppo tardi. Se riesci a trovare il punto in cui la situazione sta diventando critica allora si, ma in mesi di test su sto maledetto chip non ho trovato il punto, ogni volta sembrava aver riprodotto l'errore e poi subito smentito.

Metti un led lampeggiante tipo "Blink without Delay" e vedi come si comporta arduino quando la ethernet non risponde... se fai esperimenti le visualizzazioni ottiche sono obbligatorie.
no comment

acik


Non penso proprio possa accadere se utilizzi una funzione standard
Code: [Select]
while ((c = client.read())>0)client.stop();

Ops !  Non ho notato quel "while"
Ero distratto !
Ho caricato lo sketch d'esempio senza nemmeno guardare come e' fatto  :P




Metti un led lampeggiante tipo "Blink without Delay" e vedi come si comporta arduino quando la ethernet non risponde... se fai esperimenti le visualizzazioni ottiche sono obbligatorie.

Ma anche tu sei distratto !  XD
L'ho fatto. L' ho scritto 6 o 7 post indietro...

acik

#44
Apr 07, 2013, 11:29 pm Last Edit: Apr 07, 2013, 11:32 pm by acik Reason: 1
EVVAI !   Ethernet Shield bloccata !!!

Ho fatto le seguenti prove/scoperte (nella condizione di Shield bloccata):

A) Dal PC posso pingare. (la shield risponde sempre)

B) Qualsiasi richiesta faccio via Ethernet, non arriva all' Arduino (evidentemente la Ethernet Shield non manda nulla)

C) Rifare Ethernet.begin non serve a nulla. (La Ethernet Shield non si riprende)

D) Il tasto RESET non serve a nulla. (Arduino si riavvia, esegue lo sketch, rifa' Ethernet.begin, dialoga con la seriale, accende i LED... ma la Ethernet Shield non si riprende)


Spegnendo tutto per pochi secondi, la shield ha ricominciato a funzionare perfettamente.



Go Up