Buongiorno,
vorrei chiedere se magari qualcuno ha già riscontrato il problema. Ho un arduino Mega con Ethernet Shield. Connesso, caricato il software, tutto funziona correttamente, dalla pagina web ai comandi tramite client. Dopo un po di tempo, alcuni giorni, non riesco piu ad accedere alla pagina web, e mi viene rilasciato l'errore Connessione in timeout. Devo resettare l'arduino e quindi riparte tutto da zero. Vorrei capire come mai succede ciò, e se magari qualcuno ha una soluzione..
Grazie mille.
@Ame90: ... non capisco, cosa c'è di poco chiaro nel primo post della sezione dove hai aperto questo tuo thread ? :o :o :o C'è chiaramente scritto di NON POSTARE NULLA ! La prossima volta cortesemente fai più attenzione. Grazie.
Guglielmo
P.S.: Il tuo post è stato spostato nell'opportuna sezione del forum.
Ma il tuo sketch, a parte la connessione, continua a funzionare regolarmente?
Qui non hai detto che con l'originale ci sono stati miglioramenti?
https://forum.arduino.cc/index.php?topic=396399.msg2729635#msg2729635
Per "con quella originale effettivamente miglioramenti ce ne sono stati" cosa intendi? che si inchioda un po' meglio?
Comunque va specificato l'hardware in uso (modelli ecc), il programma che hai caricato, modalità di connessione, browser, percorsi di rete ..... così non hai detto niente e finisci nel dimenticatoio.
Mi accodo a Pablos, servono piu info
Cosi a tirare a indovinare, é un problema di ip dinamico
Avete ragione: mi scuso in anticipo....
Miglioramenti ci sono stati per quel che riguarda il fatto che con quella non originale non andava proprio. Quella originale funziona. Per quanto riguarda i modelli e l'hardware ho un arduino MEga 2560 piu shield Ethernet Piu shield RTC, tre sonde DHT22, e una shield relè.
Per quel che riguarda il discorso rete: Indirizzo IP statico, dns, gatway, subnet fisse. collegamento diretto cablato, regole su router per connessione da remoto tramite DDNS tramite router. Funziona correttamente tutto, ma dopo alcuni giorni si pianta lo shetch perche non gira piu correttamente. I comandi manuali che dovrebbero eseguire, alcuni li esegue alcuni no, la pagina client non viene piu caricata per timeout connessione... vorrei capire come mai...
E' possibile che sia un problema di esaurimento progressivo della memoria.
Ciò accade, ad esempio, se hai usato oggetti String senza aver allocato la memoria con l'istruzione reserve().
O, molto meglio, come cento volte abbiamo detto su questo forum ... NON usare la classe String ...
NON sei su un PC dove c'è un sistema operativo ed un "garbage collector", sei su una piccola MCU con solo 2KBytes di SRAM, dove devi fare tutto tu e dove usare la classe "String", a causa dell'allocazione e riallocazione dinamica della memoria, porta quasi sempre ... a grossi problemi e sicuri mal di testa !!!
Impara ad usare le stringhe classiche del C ... ovvero semplici array di char terminati dal carattere null (0x00) e le funzioni che trovai nella libreria standard (... che, oltretutto, è automaticamente inclusa dal IDE) AVR libc ed, in particolare, quanto è in <string.h>
Guglielmo
Allora credo proprio che sia una questione come dite voi di memoria visto che la pagina client funziona grazie alla lettura di una stringa; dichiarazione: "String readString;" alla fine dello sketch del client, c'è l'istruzione "readString = "";" però non so se serva allo scopo di salvaguardare la memoria. Come funzionerebbe la funzione di reserve()?? mi potrreste spiegare?? grazie mille..
Pubblica anche lo sketch che usi così ci diamo un'occhiata E magari specifica quanta RAM in percentuale usi sul tuo Arduino con il tuo sketch. Potrebbe essere come dice Guglielmo quello il problema. In più se hai anche diversi client.print o serial.print, potresti utilizzare la macro F per risparmiare RAM. La macro F può applicarsi solo sulle costanti, tipo scritte e cose così, non su variabili di dati.
Non ti spaventare con il nome, è una cavolata usarla:
Questo è il codice... è un po lunghetto...
lo sketch usa l'11% dello spazio per i programmi e il 70% di memoria dinamica
Domos3.ino (33.8 KB)
Allora a come vedo, puoi usare la macro F a dir si voglia Usandola forse già così risparmi da 70 fino a 40. Tutti quei client.print, ovviamente quelli in cui dentro non ci sia una variabile, possono essere scritte con la macro F
Ad esempio:
client.println(F("HTTP/1.1 200 OK"));
client.println(F("Content-Type: text/html"));
client.println();
client.println(F("<!DOCTYPE HTML>"));
client.println(F("<html>"));
Comunque se all'inizio gli dichiari un ip forse è meglio
IPAddress ip(192, 168, 1, 22);
Chiedo scusa ho visto ora.. perche ho fatto una modifica e mi si sono cancellate le righe.. scusa.. cmq ok ora provo a usare la funzione. Ma devo dichiarare qualche libreria all'inizio???
Domos3.ino (34.1 KB)
Ame90:
Chiedo scusa ho visto ora.. perche ho fatto una modifica e mi si sono cancellate le righe.. scusa.. cmq ok ora provo a usare la funzione. Ma devo dichiarare qualche libreria all'inizio???
No è già inclusa nel "core" di Arduino
Ok ora provo a riscriverlo con la funzione applicata e vediamo gli sviluppi... Grazie mille.
inoltre dai un occhiata ai pin che hai messo nei #define
poi, tutte quelle variabili INT che possono diventare BYTE
aggiungerei anche pinMode(10, OUTPUT);
ed eviterei di usare il pin 4
DHT dht_1(DHTPIN_1, DHTTYPE_1);
usi il pin 1 per il DHT e hai un Serial.begin(9600);
Grazie mille dei consigli.
Rispondo solo ora perche ho preferito attendere per testare le modifiche.
I Pin devo ancora verificarli. L'inserimento della funzione ha migliorato di parecchi giorni la stabilita del sistema ma ad oggi, il sistema si è ribloccato. quindi può essere anche qualche altro problema. Vorrei capire le variabili INT che posso mettere come Byte quali sono in maniera da cambiarle.
ho notato cmq che con l'inserimento della funzione F è nato un rallentamento nel caricamento della pagina.Penso cmq sia normale.
Questa sera vedo di verificare i pin e sistemarli.
Ringrazio tutti per il supporto.
La macro F non dovrebbe farti rallentare in nessun modo... anzi ti fa risparmiare molta RAM, non ci hai detto quanto, ma ti sarà diminuita sensibilmente. Per le variabili semplicemente ti devi fare questa domanda: dove ti servono numeri che arrivano fino a -32768 e 32767? Se ti serve arrivare sulle migliaia allora ti serve INT. Dove invece ti servono numeri che vanno da 0 fino a 255 senza negativi? Allora usi byte. Semplice no? Poi i pin quando li definisce, non fare l'errore di tutti gli esempi di Arduino, non definirli con INT, ma definiscili sempre con #define pin 3 (ad esempio). Zero consumo di ram e flash (sì, Arduino è uno sfaticato )
Non so come mai il sistema ti si sia ribloccato ma dai un'occhiata anche a quello che ha detto pablos sui pin.
Per pablos: comunque scrive dhtpin1, ma in realtà sopra c'è
#define DHTPIN_1 6
Salve,
sistemati i pin e verificato il cambiamento di variabili da int a byte. Riferisco che lo sketch usa il 12% di spazio disponibile e le variabili globali usabo il 14%.
Sono a chiedervi ora un'aiuto su di una cosa. vorrei inserire delle Textbox per l'inserimento da browser dell'orario di accensione e spegnimento. Vorrei capire come usare queste perche ho letto un po di post nel forum ma non riesco a capire come funzionano. io praticamente dovrei assegnare il valore che viene scritto nella text ad una variabile nello sketch. come si può fare???
Grazie mille...
Vorrei comunque sottolineare che il problema inizialmente avevo riscontrato per cui dopo alcuni giorni di funzionamento, non viene piu caricata la pagina web, rimane. Non è stato risolto... forse non era nemmeno il fatto di poca memoria. potrebbe essere che il processore vada in crash?