Reset Ethernet Shield

Buona sera a tutti

Avendo problemi con il freeze della mia ethernet shield w5100 montata su arduino UNO rev 3, ho seguito il suggerimento trovato qui sul forum, di un reset tramite software. Così ho staccato il pin di reset da sotto la scheda, e collegato tramite jumper quest'ultimo ad un pin dell'arduino (come si vede in foto), e tramite un timer ho gestito il reset. Tuttavia, invece di resettare solo la scheda ethernet come dovrebbe, viene resettato tutto quanto l'arduino. Qualcuno puo avere idea del perchè e come poter ovviare il problema? Grazie mille per la disponibilità

FC

|281x500

La foto non si vede, comunque non ho capito, prova a spiegare meglio cosa intendi esattamente con "freeze" della tua scheda Ethernet, quali prove hai fatto, e con quali risultati.

Ciao docdoc e grazie della risposta!

Per "freeze" intendo uno stato di congelamento della scheda ethernet (e solo della scheda ethernet) che capita ad intervalli irregolari. In pratica carico il codice, e per un paio di giorni riesco a fare tutto ciò che voglio entrando all'interno del serverino che ho creato. Dopo 1 o 2 o 3 giorni, la scheda ethernet si imbambola (mentre l'arduino continua a funzionare) non permettendomi di fare nulla, a meno che non resetto il tutto. Ed ho letto che questo problema è assai frequente sulla scheda W5100. Così da un bel po di ricerche è emerso che essendo uno stato di freeze della sola scheda ethernt, pare che sia possibile gestire, mediante software, il reset della shield, ed una delle soluzioni è proprio quella di piegare il pin della ethernet in modo che non entri nell'arduino, collegarlo ad una delle uscite e gestirne lo stato (nella foto si vede un lo shield ethernet sull'arduino, con il pin del reset della ethernet che ahimè si è spezzato -ho piegato troppo energicamente- e sopra di esso un jumper che collega il pin del reset con l'uscita digitale numero 7).

Nonostante queste testimonianze xo, a me non succede esattamente quello che è emerso dalle ricerche (e che mi è stato suggerito sul forum), ma il reset avviene per tutto quanto l'hardware, cosa che non posso accettare dato che il tutto mi controlla le luci di una stanza!

Di seguito linko alcune discussioni che ho letto e che mi hanno portato a tale soluzione: https://forum.arduino.cc/index.php?topic=35867.msg263819#msg263819

Qui il codice base che ho usato per gestire il reset: http://forum.arduino.cc/index.php?topic=28175.30#41 (messaggio #41)

Augurandomi di essere stato chiaro colgo l'occasione per augurarti una buona notte.

FC

Mah, ho letto i link ma non so dirti perché a te si resetti comunque tutto Arduino quando cerchi di fare il reset della shield.

A parte questo, il blocco della shield come l’hai determinato? Questo serve per cercare di farmi capire meglio la causa, prima di cercare una soluzione. Fai queste prove e dammi l’esito passo-passo.

Ossia, tu avrai un codice per fargli fare da (diciamo) web server, quindi risponde sulla porta 80 TCP: col browser provi a collegarti (dopo quel paio di giorni di attività) e cosa ottieni come errore sul browser? Quando si blocca prova ad aprire un prompt comandi e tenta una connessione manuale con telnet sulla porta 80, ad esempio:

C:>telnet 192.168.1.100 80

(assumo che l’Ip sia 192.168.1.100 e che sia un IP statico -confermi?)-; inoltre se non hai il Telnet client, attivalo andando in programmi e funzionalità, Attivazione e disattivazione funzionalità di Windows, e seleziona Telnet)

Se la connessione non avviene, comparirà un messaggio tipo:

Connessione a 192.168.1.100…Impossibile aprire una connessione con l’host. sulla porta 80
: Connessione non riuscita

In questo caso prova a vedere se almeno al ping risponde:

Esecuzione di Ping 192.168.1.100 con 32 byte di dati:
Risposta da 192.168.1.100: byte=32 durata<1ms TTL=63
Risposta da 192.168.1.100: byte=32 durata=1ms TTL=63

Se risponde al ping, è il server web che si è “incartato” e vedremo quindi cosa provare. Se non risponde neanche al ping, prova a staccare e riattaccare il cavo Ethernet e ricomincia i test (tutti, dal browser).

Se invece il Telnet si connette, lo schermo si svuota e presenta il cursore in alto, tu scrivi (non vedrai cosa digiti ma fallo attentamente perché non puoi correggere):

GET / HTTP/1.1

e premi due volte Invio.
Se vedi una risposta (anche di errore tipo Bad Request), il server risponde e funziona correttamente.
Se invece non vedi alcuna risposta, allora la connessione TCP avviene ma è il web server che non risponde.

Fammi sapere, ma se possibile posta anche il tuo codice così capisco meglio cosa fai.

Grazie per l'aiuto.

Intanto il progetto ed il codice li trovi qui:

http://forum.arduino.cc/index.php?topic=471729

Aggiornamenti sul codice postato in questo messaggio sono che sono tornato all'IDE 1.0.5 che risulta molto più ricettivo ed immediato nell'elaborazione dei segnali, e che ho implementato il codice per poter controllare gli interruttori anche tramite porta seriale.

La mia volontà era quella di controllare tramite voce lo stato degli interruttori, quindi attraverso un programma di riconoscimento vocale invio una serie di dati alla porta seriale che mi accende / spegne gli interruttori.

Ho implementato quindi nel loop questa parte di codice:

if (Serial.available ())  {
   byte lettura = Serial.read();
    switch (lettura) {
      case 'a':
       setLedEnabled(true);
      break;

      case 'b':
       setLedEnabled(false);
      break;

      case 'c':
       setLed2Enabled(true);
      break;

      case 'd':
       setLed2Enabled(false);
      break;

      case 'e':
       setLed3Enabled(true);
      break;

      case 'f':
       setLed3Enabled(false);
      break;

      case 'g':
       setLed4Enabled(true);
      break;

      case 'h':
       setLed4Enabled(false);
      break;

      case 'i':
       setLed5Enabled(true);
      break;

      case 'l':
       setLed5Enabled(false);
      break;

      case 'z':
      setLed6Enabled(true);
      zero = millis();
      if(millis() - zero > citofono)
        setLed6Enabled(false);
      break;
      
      delay(30);
    }
     }

Ringrazio

FC

Qualcuno puo avere idea del perchè e come poter ovviare il problema?

Perchè sono due le connessioni del reset

|460x460

brunello22: Perchè sono due le connessioni del reset

Beh nei topics letti di altre pesrsone, non hanno mai parlato di questo altro pin da manomettere :S

Ad essere sincero, mi hai un po confuso XD

Ad ogni modo grazie per l'interessamento, è sicuramente una informazione preziosissima!! Hai qualche idea anche sulla seconda parte della domanda?! :)

FC

fikkiovarrikkio:
Beh nei topics letti di altre pesrsone, non hanno mai parlato di questo altro pin da manomettere :S

Dipende, se la shield ha il connettore femmina che va verso Arduino, è altamente probabile che sia anche questo pin da scollegare, immagino.

Ma sinceramente non ho capito il discorso del downgrade all’IDE 1.0.5 (sicuro sia questo??), al limite perché non verifichi la versione della libreria Ethernet?

Hai fatto le prove che ti ho chiesto (nel post #3)?

docdoc: Ma sinceramente non ho capito il discorso del downgrade all'IDE 1.0.5 (sicuro sia questo??), al limite perché non verifichi la versione della libreria Ethernet?

Ciao doc.

Come libreria uso la Tinywebserver, e non la libreria Ethernet dell'IDE. La versione dell'IDE è la 1.0.5 rev2. Questo downgrade è dovuto al fatto che, con l'upgrade dell'IDE, il codice gira in maniera macchinosa e ci mette un po di tempo a caricare la pagina web dalla SD, cosa che invece con la vecchia versione dell'IDE non succede. Anzi unica pecca dello sketch che gira con la vecchia versione dell'IDE è proprio il freeze della scheda.

docdoc: Hai fatto le prove che ti ho chiesto (nel post #3)?

Ancora non ho fatto le prove perchè sto aspettando il freeze :cold_sweat: A causa di lavori in casa è saltata diverse volte la corrente, e quindi essendosi resettato l'arduino il codice è ripartito funzionando correttamente!

Appena freeza faccio lo screen di quello che mi dice il broswer e poi procedo passo passo come mi hai suggerito.

Io utilizzo la Tinywebserver che non mi chiede la dichiarazione della porta TCP. E' automatica l'assegnazione di quella porta, o è possibile che non avendola dichiarata non sia quella ?

fikkiovarrikkio: Come libreria uso la Tinywebserver, e non la libreria Ethernet dell'IDE. La versione dell'IDE è la 1.0.5 rev2.

Te lo sconsiglio CALDAMENTE, la 1.0x dell'IDE è una delle versioni non più supportate. Non so perché usi la TinyWebserver che non ho mai usato, e da qualche giretto in rete non mi sembra sia così entusiasmante né priva dibug... Comunque sia scusa, ma è assurdo fare un downgrade dell'intero IDE per una libreria, e non mi risultano "strani rallentamenti" nell'esecuzione di nulla.

Per queste ragioni, io imputerei il problema soprattutto alla libreria, vai sul sito GitHub della libreria e vedi se trovi una versione più recente della libreria (magari quella che usi non è l'ultimissima, ed era buggata o incompatibile), o nella sezione "Issues" se qualcuno ha segnalato un problema simile, ed eventualmente inserisci tu una issue indicando tutte le informazioni utili agli sviluppatori. Oppure cerca un'altra libreria :-)

Io utilizzo la Tinywebserver che non mi chiede la dichiarazione della porta TCP. E' automatica l'assegnazione di quella porta, o è possibile che non avendola dichiarata non sia quella ?

Stando a quanto vedo su GitHub, QUATTRO ANNI FA c'è stata una modifica per consentire la customizzazione della porta (da 80 a quella specificata a parametro) per cui io CREDO che tu stia usando una VECCHIA libreria, buggata, e che usare una versione stra-obsoleta di Arduino IDE è una grossa sciocchezza...

docdoc: Te lo sconsiglio CALDAMENTE, la 1.0x dell'IDE è una delle versioni non più supportate. Non so perché usi la TinyWebserver che non ho mai usato, e da qualche giretto in rete non mi sembra sia così entusiasmante né priva dibug... Comunque sia scusa, ma è assurdo fare un downgrade dell'intero IDE per una libreria, e non mi risultano "strani rallentamenti" nell'esecuzione di nulla.

Utilizzo questa libreria perchè al momento è l'unica che mi ha permesso di fare qualcosa del genere: https://www.youtube.com/watch?v=qZXKk6nCYuM

Cmq farò ricerche più approfondite su altre librerie, e ti aggiorno su ciò che accade all'arduino quando va in freeze.

Intanto ti ringrazio per la tua disponibilità =)!

FC

Beh ... NON è che ti ha permesso poi chissà che eh ... fa ON/OFF di un LED ... ::)

Prova a studiarti QUESTA di libreria, gira [u]sull'ultima versione dellIDE/u, funziona con svariate board di rete (sia Ethernet che WiFi), è manuenuta e supportata da un utente attivo del forum e ... sicuramente ti permette di più in modo più articolato ;)

Guglielmo

Ah vero, grazie Guglielmo, mi ero dimenticato di Webbino del nostro sukkopera, che avevo pure scaricato (la libreria, non sukko :smiley: ) per provarla!

Credo che questo fine settimana inizio a farci qualcosa, sto “litigando” per capire come fare la gestione di una centralina di irrigazione (so che ce ne sono tante in giro, ma voglio “farla io” e “a modo mio”, sai, c’ho 'na certa età e sò “de coccio” 8) ), tra pulsanti+LCD, Bluetooth, file di configurazione nella SD, e WiFi (in quest’ultimo caso, che preferirei, ha però il problema che non so se una WeMos D1 riesce a governare correttamente le shield che ho già preso, attualmente controllate da una UNO, e non mi va di appiccicare una ESP con i relativi problemi di alimentazione… Ma tranquillo, ne farò un thread a parte, non cazziarmi :wink: ).

gpb01: Beh ... NON è che ti ha permesso poi chissà che eh ... fa ON/OFF di un LED ... ::)

Ciao Guglielmo.

Ovviamente non è mia pretesa fare chissà cosa non avendo (ancora) una completa preparazione :-[ , xo ho costruito il tutto in modo che, anche accendendo / spegnendo questo led tramite un semplice bottone, istantaneamente sul web ti mostra lo stato di quella luce (in pratica ho una doppia possibilità di accendere e spegnere).

Se mi dici che posso fare la stessa identica e precisa cosa (so che puo sembrare qualcosa di "banale", ma per qualcuno come me non lo è affatto :stuck_out_tongue: ) - ovvero pilotando in maniera analogica il led, lo stato sulla pagina web si aggiorna - puoi star sicuro che mi studierò la libreria e mi metterò alla ricerca di codici adatti allo scopo :grinning:

fikkiovarrikkio: Se mi dici che posso fare la stessa identica e precisa cosa ...

Puoi fare molto di più ... avere più pagine HTML, gestirle sia in memoria che su SD, ecc. ecc.

Non è banale, ma studiandola, guardando tutti gli esempi e, all'occorrenza, chiedendo all'autore, vedri che farai belle cose ;)

Guglielmo