Da qualche tempo utilizzo un arduino come webserver per la gestione di cancello,porte, etc.., tutto ok fino a quando non decido di aggiornare il mio router con un
NetGear DGN2200 che ovviamente funziona perfettamente ma non ne vuole sapere di "dialogare" con l'arduino programmato come web server.
Se programmo arduino come web client viene visto e funziona regolarmente se carico qualsiasi sketch come web server( ho provato diversi esempi), c'è il link ma non viene visto.
Premetto che se prima collego un web client e poi riprogrammo la scheda come web server utilizzando lo stesso indirizzo del client allora funziona perfettamente fino al riavvio del router.
Che sia possibile fare in modo che la scheda parta prima come client e poi diventi server?
Ciao
Se usi Arduino come client con libreria DHCP certo che il router lo vede, perchè è arduino il primo a cominciare un dialogo e si va a prendere i parametri della rete, quindi nella lista ip client del router lo troverai con tanto di ip e mac.
neanche il mio router vede arduino se usato come come server, ma cio' non toglie che opportunamente settando i forwarding lo raggiungo da esterno su ip pubblico statico oppure dalla rete locale assegnando anche una porta
da fuori faccio 86.xxx.xxx.xxx:8500
da lan 192.168.2.200 internamente uso la porta 80
Se collego arduino al vecchio router funziona perfettamente lo utilizzo da un anno, il problema è che con le stesse impostazioni non viene visto con il nuovo router, sembra che sia molto più restrittivo ma non capisco dove stà l'inghippo :(.
Come client ho usato la libreria con ip statico e lo vede regolarmente.
Se collego arduino come client, poi giusto il tempo di ricaricare lo sketch come server utilizzando lo stesso indirizzo del client allora lo vede.
Non è un problema di forwarding in quanto una volta che il router lo rileva allora lo raggiungo anche da esterno senza problemi.
Attendo nella speranza che qualcuno abbia già avuto e risolto questo problema.
L'arduino configurato come server è collegato direttamente alla lan con indirizzo ip statico 192.168.0.xxx , risponde al ping con il mio vecchio Netgear 834gt, funziona anche con un Alice gate.
Collegato ad un Netgear DGN2200 ovviamente configurato allo stesso modo non risponde al ping.
Se carico uno sketch qualsivoglia che lo configuri come CLIENT allora risponde al ping.
Sucessivamente se ricarico il mio sketch come server (l'importante è che abbia lo stesso ip che aveva prima il client) , da quel momento risulterà "pingabile" ed ovviamente accessibile sia da lan che wlan.
Se riavvio il router torno al problema iniziale =(.
il fatto che non lo pinga è piuttosto grave, al ping deve rispondere. Probabilmente c'e' qualche opzione da impostare, qualche restrizione che impedisce al router di rivolgersi a ip sconosciuti. Contrariamente come dici tu se è arduino a cercare il router con sketch client sembrerebbe che lo metta in lista degli ip autorizzati.
Prova a mettere l'ip e il mac (quello che usi negli sketch) di arduino nella lista Address Reservation, questo resterà anche in caso di reset o assenza di tensione. Spesso questa funzione si usa per Wake-on-LAN (accendere un pc da remoto) dato che il pc da spento non ha un ip, ma bensì un mac. Comunque ci sono diversi forum che parlano del tuo NetGear, cerca su google, altro non so dirti, mi spiace
Scusa la mia ignoranza, ma praticamente hai rinunciato a usare arduino come Web server ma lo usi come Client ?
Io ho lo stesso problema con lo stesso modello di router.
Nel limite delle mie conoscenze ho provato di tutto usando anche il gateway e il subnet nelle dichiarazioni globali e usando in setup il comando Ethernet.begin(mac, ip,gateway,subnet) ma niente.
Facendo il ping all'indirizzo 192.168.1.21 non lo vede.
E' un vero peccato perchè il router è buono ma mi scade di parecchio se non riesce a gestire nella porta LAN l'arduino della modalità Web server.
Aggiungo che se collego Arduino + Ethernet shield al computer tutto va alla grande.
Qualcuno può dirmi qualcosa in più?
Aggiungo di seguito le prime righe del programma
Grazie
No ora utilizzo il mio Web server esattamente come prima però ho dovuto modificare il programma inserendo una richiesta ad un indirizzo ip qualsiasi come client.
Devi solo aggiundere la richiesta HTTP come ho indicato nel post precedente.
A me invece è capitata una cosa strana, prima collegavo ethernet+arduino configurato in web server a una porta lan del router e provavo a chiamarlo in modalità wireless con l'indirizzo assegnato al gruppo ethernet+arduino.
Non funzionava.
Nel gruppo ethernet+arduino ho anche una pagina in html che il pc carica quando faccio la chiamata all'indirizzo ip
Poi ho collegato direttamente una porta lan del router al computer con un cavo ethernet e stranamente il router vedeva anche la scheda ethernet+arduino (anche con la chiamata usando il ping).
La cosa curiosa è che anche togliendo il cavo ethernet e tornando alla modalità wireless chiamando l'ip della ethernet+arduino la pagina web viene caricata direttamente senza problema.
Il tutto naturalmente funziona finchè non spengo il router.
Lo trovo un comportamento anomalo.
Quindi nel tuo caso al programma che consente il funzionameto come web server dell'arduino hai aggiunto quelle righe indicate nel tuo post.
Ma byte server[] = { 173,194,33,104 }; ha a che fare con l'ip address di google immagino....
In pratica "inganni" il router iniziando con una richiesta a google????
Scusa ma cerco di capire.....
Ziopic:
Dopo vari tentativi sul router senza successo, ho deciso di modificare leggermente il programma inserendo anche una richiesta HTTP come client.
Probabilmente è una soluzione empirica dovuta ai miei limiti ma ora funziona perfettamente!
Ciao e Buon Natale a tutti.
Prova a digitare nel tuo browser l'ip 173.194.33.104 noterai che non carica la pagina, mentre se provi con un altro ip, ad esempio 173.194.35.48 la pagina di google viene caricata subito. Se inserisci questo ip nel tuo sketch vedrai il risultato comparire sul monitor seriale senza dover aggiungere altre righe di codice.
gli ip legati al dns www.google.com li puoi trovando digitanto su un terminale :
nslookup www.google.com
il servizio nslookup deve essere installato sul tuo pc, però quasi sicuramente lo è.
Quindi nel tuo caso al programma che consente il funzionameto come web server dell'arduino hai aggiunto quelle righe indicate nel tuo post.
Ma byte server[] = { 173,194,33,104 }; ha a che fare con l'ip address di google immagino....
In pratica "inganni" il router iniziando con una richiesta a google????
Scusa ma cerco di capire.....
Puoi mettere qualsiasi indirizzo, ho provato anche con 192.168.0.1 che è quello del router e non cambia nulla funziona lo stesso .
Penso sia un problema del firmware del router che riconosche una periferica solo se la richiesta parte prima dallaperiferica stessa.