Tra i bug-fix all'IDE di Arduino proposti su github, ho trovato una patch che sembra risolvere o perlomeno migliorare il comportamento del chip Wiznet. Tra le situazioni in cui il chip sembra freezarsi e una delle cause potrebbe essere che quando si trova nella condizione di lasciare una connessione, si mette nello stato di CLOSE_WAIT, quindi sta lì ad aspettate una risposta che di fatto non riceve perchè qualcosa è andato storto nella trasmissione precedente.
Questa cosa è tra quelle che succedono più frequentemente la patch proposta mira ad aggiungere alle condizioni per cui chiudere la connessione anche quella lo stato di CLOSE_WAIT. Quindi, come citavate qualche post fa, sembra essere l'implementazione di un workaround che migliora parecchio la situazione di freeze della Ethernet Shield.
Il lavoro da fare per applicare questa patch è davvero minimo perchè basta aprire il file EthernetClient.cpp che trovate nella directory della libreria Ethernet e nel metodo int EthernetClient::connect(IPAddress ip, uint16_t port)
aggiungere la condizione || s == SnSR::CLOSE_WAIT
all'interno del dell' if (s == SnSR::CLOSED || s == SnSR::FIN_WAIT)
quindi viene fuori così:
if (s == SnSR::CLOSED || s == SnSR::FIN_WAIT || s == SnSR::CLOSE_WAIT)
Se riceverà un buon numero di feedback positivi, questa patch verrà introdotta nella prossima release dell'IDE. A voi testarla, secondo me funziona!