Protolight: prototipo per gestire l'illuminazione da remoto

Salve a tutti,
ho creato un piccolo prototipo per gestire l'illuminazione da remoto grazie ad arduino, Java e android.

  1. Su arduino ho sviluppato tutta la parte server che riceve le richieste dai client che si connettono, gestisce gli eventi dei client (accendi e spegni i relè) e invia in tempo reale, a tutti i client connessi, lo stato di tutti i relè quando subiscono un aggiornamento.

  2. In Java ho realizzato l'applicazione cross-platform che mi permette di accendere e spegnere le luci e visualizzarne lo stato in tempo reale.

  3. Come per Java anche in android ho creato un'app che permette di accendere e spegnere le luci e visualizzarne lo stato in tempo reale.

Un video dimostrativo

anche se progetti simili si son già visti in tutte le salse, spero possa cmq essere di vostro gradimento e che possa, nel suo piccolo, essere da spunto per altre persone ;-).
Grazie

Ciao, come fai a parlare con i client connessi? Lasci tipo aperti dei socket o i client periodicamente mandano una richiesta chiedendo dati?
Perchè nel primo caso l'eth shield mi sembra non ne regga più di 4; nel secondo sarebbe molto lento, immagino...

Si, il server tiene aperta una socket... L'applicazione client cerca in automatico l'ip che risponde ad una determinata porta (quella del server) e una volta trovata, memorizza l'ip del server e resta in ascolto di ogni sua comunicazione...
ogni volta che un client invia al server un pacchetto per interagire con i relè, il server esegue il comando e invia il cambiamento di stato a tutti i client connessi.

All'inizio la comunicazione l'avevo fatta alla spiccia, il server non memorizzava gli ip dei client che si connettevano a lui, quindi ogni volta che doveva comunicare un cambiamento a tutti i client, lo faceva inviando un pacchetto all'ip di broadcast... in quel caso era il router a preoccuparsi di recapitare il pacchetto a tutti gli host della rete e in ascolto su quella porta...
con il tempo però ho cambiato questa soluzione perché era molto limitata, specie per interazioni esterne alla rete lan... Adesso, ogni volta che un client si connette, il server memorizza il suo ip in una lista dedicata... a questo punto, ogni volta che avviene un cambiamento nei relè, il server invia la comunicazione a tutti i client che lui conosce in quel preciso istante.
Non ho notato mai alcun rallentamento di comunicazione, ho provato il tutto con 10 client connessi e, ad ogni variazione di stato, la comunicazione client/server e' praticamente istantanea

Mi riferivo alla frase nella descrizione dell' ethernet:
"It supports up to four simultaneous socket connections."

il codice è visibile? Son curioso di vedere come invii a tutti i client connessi i dati