Go Down

Topic: Arduino nano, Web server e Wake on lan (Read 2572 times) previous topic - next topic

Smicuz96

Dec 22, 2012, 09:36 pm Last Edit: Dec 22, 2012, 09:43 pm by Smicuz96 Reason: 1
Ciao a tutti, è il mio primo post su questo forum quindi perdonatemi se ho sbagliato qualcosa.
Da un po' di tempo sono rimasto affascinato dalle potenzialità di Arduino. Tuttavia, non mi sono ancora apprestato a comprare una scheda Arduino, in quanto nella mia mente non si è ancora prefigurato un preciso progetto.
Da qualche giorno, però, sto sistemando la rete informatica di casa per sfruttare la funzionalità Wake on Lan presente sui PC (2 portatili e un fisso). Tutti i PC sono connessi via cavo ad un router Netgear DG834Gv4 (con firmware modificato, ma questo non c'entra niente). Il suddetto router, tuttavia, dopo un po' svuola la ARP cache e non mi è più concesso svegliare i pc da remoto.
Premesso che ho già fatto tutti i possibili tentativi possibili e immaginabili per creare un valore statico nella ARP table, ma ho constatato che tutto ciò non mi è possibile e mi è inoltre vietato fare un port forward sull'indirizzo di broadcast (192.168.0.255). In ogni caso, sfruttando qualsiasi altro software sui pc, mi è permesso di mandare pacchetti UDP verso l'indirizzo di broadcast, i quali raggiungono tutti i PC e svegliano solo i PC interessati.

La mia ultima idea sarebbe quella di dotarmi di un Arduino Nano (con relativo ethernet shield), collegarlo alla rete e usarlo come web server. Tramite un'apposita applicazione per Android (il cui sviluppo non è un problema), vorrei essere in grado di mandare tramite Internet una richiesta alla piattaforma Arduino, la quale si occuperà di far girare, tramite broadcast, un Magic Packet contenente uno specifico indirizzo MAC. Inoltre, non mi dispiacerebbe se Arduino riuscisse anche a comunicare all'applicazione lo stato on/off di un determinato PC.

Dite che si può fare?
Scusate per la lunga spiegazione, ma desidero essere il più chiaro possibile.

Michele

Testato

non vedo problemi nel fare quello che chiedi via arduino, il progetto e' interessante. Mi viene in mente un solo problema per ora, che la versione nano non e' compatibile con la ethernet shield meccanicamente. Io prenderei direttamente una Arduino Ethernet, che ingloba su un unica scheda, quindi senza shield, la sezione micro e la sezione ethernet.
mi sono ripromesso piu' volte di affrontare il wake on lan, ma non l'ho mai fatto. Non credevo ci fossero questi problemi. scusa ma quindi normalmente come si gestisce la cosa ? nelle aziende con tanti pc come fanno a non avere problemi con la arp table ?
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Smicuz96

Ciao Testato, grazie innanzitutto per avermi risposto :)
Come progetto avevo preso in considerazione la scheda Arduino Nano perchè su Ebay ho trovato un modulo ethernet fatto apposta per la versione Nano e, a conti fatti, mi converrebbe. Che tu sappia ci sono dei problemi? (Suppongo che questo tipo di ethernet shield non sia ufficiale)
Non so come si comportino le grandi aziende, ma suppongo che prendano dei router che supportino il port forward verso l'ip di broadcast o, altrimenti, permettano di controllare la ARP table. Purtroppo il mio Netgear non permette nessuno dei due..

Già che ci sei potresti darmi una dritta per iniziare ad inquadrare il progetto? Così poi, se tutta la parte teorica fila lascio, posso provare la parte pratica acquistando Arduino :)

Grazie in anticipo,
Michele

pablos

#3
Dec 23, 2012, 01:32 am Last Edit: Dec 23, 2012, 02:58 am by pablos Reason: 1
Quote
Tutti i PC sono connessi via cavo ad un router Netgear DG834Gv4 (con firmware modificato, ma questo non c'entra niente). Il suddetto router, tuttavia, dopo un po' svuola la ARP cache e non mi è più concesso svegliare i pc da remoto.


Questo succede perchè il tuo ruter non ti permette di salvare i MAC su eeprom, il router resetta la flash o una mancata alimentazione mentre le macchine sono spente svuotano la lista ARP. Ho avuto tempo fa una necessità come la tua su 4 macchine collegate via cavo ti serve un router che abbia la funzione Bind ovvero salvare i mac e abbinarli ad un indirizzo ip locale.
Quando una delle 4 macchine viene avviata, il router vede il mac e gli assegna l'ip da me stabilito, questo mi serviva perchè col vnc potevo cercare con certezza il pc giusto da remoto conoscendo l'ip (lasciando su windows/rete "ip automatico") e risvegliarlo conoscendo il mac.
Con il forward completi l'operazione quando chiami il pc da ip pubblico:
programmi una porta es 1234 all'ip 192.168.2.100 protocollo da usare ... per WOL
programmi una porta es 5678 all'ip 192.168.2.100 protocollo da usare ... per VNC


lista delle macchine attualmente accese
ARP List
ID   MAC Address   IP Address   Status    Configure   
1   74-E5-0B-xx-xx-xx    192.168.2.100   Unbound   Load Delete
2   BC-AE-C5-xx-xx-xx   192.168.2.112   Unbound   Load Delete
3   64-A7-69-xx-xx-xx   192.168.2.180   Unbound   Load Delete

lista delle macchine con i rispettivi MAC e gli ip (stabiliti da me) che devono assumere quando si accendono (configurati su eeprom)
ARP Binding:    Disable Enable  
ID    MAC Address             IP Address     Bind         Modify    
1   A4-C0-E1-xx-xx-xx   192.168.2.101    y   Modify Delete   
2   BC-AE-C5-xx-xx-xx   192.168.2.112    y   Modify Delete   
3   64-A7-69-xx-xx-xx   192.168.2.180    y   Modify Delete   
4   1C-6F-65-xx-xx-xx   192.168.2.114    y   Modify Delete   
5   54-9B-12-xx-xx-xx   192.168.2.190    n   Modify Delete
6   74-E5-0B-xx-xx-xx   192.168.2.100    n   Modify Delete

prendi un router che abbia questa funzione

se poi vuoi sapere quali macchine sono ON da web server allora aggiungi un arduino con 4 ingressi, ma i modi sono molti per saperlo da remoto senza un particolare sistema.

Il primo che mi viene in mente è google drive (se possiedi un account google) inviando gli eventi su un foglio elettronico tipo excel con uno script
il secondo una mail lanciata da ciascuna macchina con un file.bat allo start, magari messo su esecuzione automatica all'avvio

es:
crea un file bach  automail.bat modificando i tuoi parametri e mettilo su esecuzione automatica all'accensione del pc
bmail -s smtp.fastwebnet.it -t nomecognome@gmail.com -f nome.cognome@fastwebnet.it -h -a "Da ufficio" -b "Computer N°1 ACCESO"

Ottimo per sapere quando la segretaria arriva in ufficio visto che la prima cosa che fa è accendere il pc e poi togliere la giacca  :D :D

bmail -s smtp.fastwebnet.it -t nomecognome@gmail.com -f nome.cognome@fastwebnet.it -h -a "Da casa" -b "Computer moglie ACCESO"

Ottimo per sapere quando la moglie ti dice "amore oggi non ho avuto un minuto libero" ahahahahahha
....



ciao
no comment

Smicuz96

Questo succede perchè il tuo ruter non ti permette di salvare i MAC su eeprom, il router resetta la flash o una mancata alimentazione mentre le macchine sono spente svuotano la lista ARP. Ho avuto tempo fa una necessità come la tua su 4 macchine collegate via cavo ti serve un router che abbia la funzione Bind ovvero salvare i mac e abbinarli ad un indirizzo ip locale.
Quando una delle 4 macchine viene avviata, il router vede il mac e gli assegna l'ip da me stabilito, questo mi serviva perchè col vnc potevo cercare con certezza il pc giusto da remoto conoscendo l'ip (lasciando su windows/rete "ip automatico") e risvegliarlo conoscendo il mac.
Con il forward completi l'operazione quando chiami il pc da ip pubblico:
programmi una porta es 1234 all'ip 192.168.2.100 protocollo da usare ... per WOL
programmi una porta es 5678 all'ip 192.168.2.100 protocollo da usare ... per VNC


lista delle macchine attualmente accese
ARP List
ID   MAC Address   IP Address   Status    Configure   
1   74-E5-0B-xx-xx-xx    192.168.2.100   Unbound   Load Delete
2   BC-AE-C5-xx-xx-xx   192.168.2.112   Unbound   Load Delete
3   64-A7-69-xx-xx-xx   192.168.2.180   Unbound   Load Delete

lista delle macchine con i rispettivi MAC e gli ip (stabiliti da me) che devono assumere quando si accendono (configurati su eeprom)
ARP Binding:    Disable Enable  
ID    MAC Address             IP Address     Bind         Modify    
1   A4-C0-E1-xx-xx-xx   192.168.2.101    y   Modify Delete   
2   BC-AE-C5-xx-xx-xx   192.168.2.112    y   Modify Delete   
3   64-A7-69-xx-xx-xx   192.168.2.180    y   Modify Delete   
4   1C-6F-65-xx-xx-xx   192.168.2.114    y   Modify Delete   
5   54-9B-12-xx-xx-xx   192.168.2.190    n   Modify Delete
6   74-E5-0B-xx-xx-xx   192.168.2.100    n   Modify Delete

prendi un router che abbia questa funzione

se poi vuoi sapere quali macchine sono ON da web server allora aggiungi un arduino con 4 ingressi, ma i modi sono molti per saperlo da remoto senza un particolare sistema.

Il primo che mi viene in mente è google drive (se possiedi un account google) inviando gli eventi su un foglio elettronico tipo excel con uno script
il secondo una mail lanciata da ciascuna macchina con un file.bat allo start, magari messo su esecuzione automatica all'avvio

es:
crea un file bach  automail.bat modificando i tuoi parametri e mettilo su esecuzione automatica all'accensione del pc
bmail -s smtp.fastwebnet.it -t nomecognome@gmail.com -f nome.cognome@fastwebnet.it -h -a "Da ufficio" -b "Computer N°1 ACCESO"

Ottimo per sapere quando la segretaria arriva in ufficio visto che la prima cosa che fa è accendere il pc e poi togliere la giacca  :D :D

bmail -s smtp.fastwebnet.it -t nomecognome@gmail.com -f nome.cognome@fastwebnet.it -h -a "Da casa" -b "Computer moglie ACCESO"

Ottimo per sapere quando la moglie ti dice "amore oggi non ho avuto un minuto libero" ahahahahahha
....



ciao   

Ciao, grazie pervla spiegazione, sicuramente mi tornerà utile :)
Tuttavia, non vedo perchè dovrei comprare un nuovo router quando potrei fare tutto tramite Arduino. Sostituire il mio Netgear, che funziona perfettamente, potrebbe sì risolvere il problema ARP, ma poi dovrei prendere comunque Arduino per controllare lo stato dei PC. Spesa doppia per lo stesso risultato xD.
Potreste piuttosto darmi qualche dritta per iniziare a progettare il sistema web server-wake on lan? :)

Grazie ancora,
Michele

pablos

Ahh forse non avevo capito, pensavo che con arduino volevi solo controllare quali pc sono accesi, invece vuoi mandare il packet usando la ethernet shield e controllare lo stato ON/FF delle macchine ..... mmm mi incuriosisce sta cosa, al momento non ho la minima idea di come farlo ci devo pensare.....

ciao
no comment

Smicuz96

Esatto, io vorrei effettuare il Wake on Lan proprio attraverso Arduino, quando quest'ultimo riceve da internet un determinato segnale da me mandato.
Avevo preso in considerazione la scheda Arduino Nano perchè su Ebay ho trovato un modulo ethernet fatto apposta per la versione Nano e, a conti fatti, mi converrebbe. Che sappiate ci sono dei problemi? (suppongo che questo tipo di ethernet shield non sia ufficiale)

pablos

#7
Dec 23, 2012, 09:03 pm Last Edit: Dec 23, 2012, 09:13 pm by pablos Reason: 1
Di quale scheda eth parli? hai un link da farci vedere?

Bisogna usare la libreria UDP e creare il messaggio in base ai parametri prestabiliti

I pacchetti Ethernet che attivano la "sveglia" sono detti Magic Packet ("pacchetti magici"). Il Magic Packet è in sostanza un frame multicast, composto da una prima parte di sincronizzazione costituita da sei bytes di valore FF esadecimale, seguiti dall'Indirizzo MAC del nodo bersaglio ripetuto 16 volte, per un totale di 96 bytes, e da un campo password opzionale che può essere assente, lungo 4 bytes o 6 bytes[1].

non è la soluzione ma un inizio :)

guarda qui http://www.logicaprogrammabile.it/wol-accendere-computer-arduino-wake-on-lan/

ciao
no comment

Smicuz96

Sì, ecco qui. Avevo trovato 2 articoli riguardanti l'ethernet shield per Arduino Nano.
http://www.ebay.it/itm/ENC28J60-Webserver-module-Ethernet-Shield-for-Arduino-Nano-/181030427495?pt=LH_DefaultDomain_0&hash=item2a26411b67
http://www.ebay.it/itm/Ethernet-Shield-for-Arduino-Nano-work-as-ENC28J60-RJ45-Webserver-/281006055332?pt=LH_DefaultDomain_0&hash=item416d441fa4
Saranno validi?

Grazie per lo spunto di inizio :)
Il punto dolente più che altro riguarda la parte Internet. Come si potrebbe fare ad instaurare una connessione tra Arduino e applicazione Android (da me sviluppata), senza passare per un'interfaccia web? Devo utilizzare i socket? Avete per caso una guida in merito?

Michele

Testato

#9
Dec 23, 2012, 11:13 pm Last Edit: Dec 23, 2012, 11:22 pm by Testato Reason: 1
Per il discorso hardware la differenza tra questa ethernet shield e l'originale e' nel chip, l'originale usa un wiz, mentre queste ecnomiche usano un enc.
La libreria ufficiale arduino non funziona e quindi ne devi usare una terze parti, ma la differenza principale e' che queste enc non hanno il tcp-ip integrato e quindi lo si fa via sw, appesantendo il tutto.

Se non hai ancora comprato ne' il nano ne' lo shield io ti riconsiglio sempre l'arduino ethernet, hai tutto in una sola scheda, ed hai anche lo slot per una scheda SD, utile se vuoi aggiungere qualche immagine per il webserver
http://store.arduino.cc/it/index.php?main_page=product_info&cPath=11_12&products_id=197

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Smicuz96

Ok, grazie. Allora mi prenderò l'Arduino Ethernet così sto tranquillo :). Aspettavo a fare acquisti proprio per sentire la vostra opinione!
Per quanto riguarda la connessione diretta tra Arduino e dispositivo remoto (Android)? Devo usare i socket? Avete qualche piccola guida in merito?

Grazie ancora,
Michele

PaoloP

Per programmare l'Arduino Ethernet ti serve un convertitore seriale-usb. --> http://arduino.cc/en/Main/USBSerial

Testato

oppure un programmatore esterno, oppure (non l'ho mai fatto) in TFTP. Ho letto in giro qualcosa, in questo caso non spenderesti altri soldi.
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Smicuz96

Allora tanto vale che prenda direttamente Arduino uno e poi ci metta sopra lo shield ethernet...
Arduino uno + Ethernet shield (senza PoE) = 49€
Arduino ethernet (senza PoE) + adattatore seriale-usb = 49.9€
Poi, aggiungendo un set di base (senza arduino), giusto per avere qualche dispositivo da controllare e un po' di cavi, raggiungo la bellezza di 78€

Mah... probabilmente rimanderò il progetto. Per ora mi sembra un po' troppo costoso per 2 schede... peccato...

Brunello

si puo' spendere molto di meno.

innanzi tutto per gestire il Wol si puo' usare una ethernet alternativa, basata sul chip enc28j60
c'e' anche un articolo di Luca Dentella http://www.lucadentella.it/2012/02/22/enc28j60-e-arduino-4/
completo di sketch https://github.com/lucadentella/enc28j60_tutorial

per la scheda ethernet, questa funziona benissimo http://www.ebay.it/itm/1pcs-ENC28J60-Network-Module-/261004876528?pt=LH_DefaultDomain_0&hash=item3cc51a5af0 e il fornitore e' affidabile ( se non hai fretta )
Per la Uno, puoi benissimo fare con uno standalone, o se proprio non vuoi saldare e rimanere su prodotti locali, usa una Luigino


Go Up