Ciao a tutti, sono entrato da poco in questo bellissimo perchè vorrei realizzare un impianto di domotica a livello personale. Vi spiego quello che sto facendo e vi chiedo un consiglio in merito, cercando di essere breve.
Il mio progetto prevede l'uso di Arduino con Ethernet Shield, un web server gestito da un pc sulla stessa rete con server PHP per gestire l'interfaccia web e un DB MySQL per registrare i vari stati degli interruttori (ed altro).
Ho già realizzato il tutto in maniera molto semplice, vi spiego il funzionamento e il mio problema.
Se pigio un pulsante fisico si accende un led e subito dopo invio i dati a una pagina PHP che provvede ad aggiornarmi il DB, contemporaneamente nella pagina web il codice AJAX provvede ad aggiornare lo stato del LED. Viceversa se premo il pulsante da WEB si aggiorna lo stato del led nel DB e nel loop di arduino controllo ogni 300ms i valori nel DB e se sono cambiati provvedo ad accendere o spegnere il LED.
Il mio problema è che se il server web va giù (simulato semplicemente spegnendo il server PHP o staccando il cavo di rete dall'ES) arduino mi rimane bloccato sulla connect (precisamente sul Serial Monitor rimane qui Serial.println("connected") e non accende il led, neanche se premo il pulsante fisico.
Vi posto dei pezzi di codice:
Nel loop ho questo:
void loop(){
if (digitalRead(BUTTON)==1) {
AccendiDaPulsante();
}
String pageValue = connectAndRead();
if ((pageValue == "0") or (statoled == "0")) {
Serial.println("LOW");
digitalWrite(LED, LOW);
}
else if ((pageValue == "1") or (statoled == "1"))
{
digitalWrite(LED, HIGH);
Serial.println("HIGH");
}
delay(200);
}
String connectAndRead(){
if (client.connect(server, 80)) {
Serial.println("connected");
client.print("GET ");
client.println(location);
client.println();
return readPage();
}else{
return "connection failed read";
}
}
Nella readPage non faccio altro che assegnare 0 o 1 e valorizzare pageValue.
Dove Sbaglio? E' giusto secondo voi il sistema che sto utilizzando?
grazie dell'aiuto
Simone