[RISOLTO] Ethernet Shield: host locale raggiungibile da browser (multicastDNS)

Ciao a tutti e rieccomi che scrivo per risolvere un dubbio che mi ha assalito in questi giorni…
Prendiamo in esame lo sketch d’esempio WebServer e supponiamo di avere come hardware un arduino Uno con collegata ovviamente la Ethernet shield…
Lo sketch così com’è fa si che arduino si collega tramite DHCP e stampa su seriale una stringa contenente l’indirizzo IP che gli è stato assegnato.

Sarebbe una cosa possibile solo via SOFTWARE quindi utilizzando una libreria esistente (o facendo un porting o realizzandola da 0 per chi ne ha le capacità) far si che arduino sulla rete locale sia raggiungibile digitando un hostname anziché il suo indirizzo IP?
Esempi pratici di oggetti che già fanno queste cose sono i vari access point/repeater che in genere appena acquistati, per la prima configurazione si collegano alla rete locale e tramite DHCP ricevono l’ip, poi digitando ad esempio: http://netgear.local (è solo un esempio eh?!) si accede al loro indirizzo e quindi alla configurazione senza bisogno di sapere che ip è stato assegnato!

Ho un progetto in via di sviluppo con un Arduino Mini Pro collegato alla rete tramite shield ethernet.
Al primo avvio lo sketch tenta di collegarsi tramite DHCP dando poi la possibilità tramite le pagine html che lo sketch restituisce all’utilizzatore di configurare un ip statico (salvando su eprom e riutilizzando queste opzioni dall’ immediato riavvio in poi).
Nel mio progetto non ho (non voglio) introdurre la connessione al pc quindi niente possibilità di passare i dati sulla seriale e non ho (non voglio) mettere dispositivi di output come lcd…
Volevo quindi aggiungere in qualche modo la possibilità di collegarsi alla board digitando qualcosa tipo http://arduinomini.local senza dover passare da programmi (che tramite ping o altri sistemi) scandagliano la rete alla ricerca del nuovo dispositivo… Un utente con buone conoscenze ha tanti modi per individuare l’ip che è stato assegnato, ma un utente alle prime armi No.

Ho trovato una libreria per esp8266 che si chiama mDNS che se ho ben capito fa quel che mi serve ma fa uso di alcuni che non saprei nemmeno cosa sono!
Vorrei sapere se prima di provarci ancora è comunque una cosa possibile o no.

(link alla libreria trovata)

Ti serve un DNS in grado di risolvere i nomi locali e di lavorare insieme al server dhcp. E' una cosa complessa, se ti interessa cerca le guide per BIND o dnsmasq. Oppure cerca i router che hanno già implementata questa funzionalità.

Semplificando: un host (che può essere un pc, arduino, ecc) richiede un indirizzo ip al server dhcp e nel farlo comunica il suo hostname. il server dhcp rilascia un ip al richiedente e comunica ip e hostname al server dns. il server dns aggiunge un record alle sue mappe.

ciao e grazie per l'interessamento e i consigli..

I modem/router, quelli comunemente in uso in ambito domestico, in genere fanno da server dns per i dispositivi a loro collegati (pc, telefoni, ecc) e visto che nei prodotti da me descritti nel primo post, hanno inserito la possibilità di essere raggiungibili tramite il loro hostname, suppongo che il router/modem facendo appunto da server dns siano già in grado di reindirizzare per la rete locale le richieste arrivate verso l'hostname di quei prodotti verso il loro ip cosi da permettere la visualizzazione e configurazione collegandosi ad esempio da un pc nella stessa rete ma senza conoscere l'ip del dispositivo appunto.

Riamane il dubbio che il dispositivo penso debba in qualche modo dire al modem al momento del rilascio dell'ip che "vuole" essere raggiungibile tramite un certo hostname...

Se guardi la libreria che ho trovato, sembra fare questo, comunicare tramite la porta 5353 la propria "presenza"

aggiornamento, cercando con altre parole chiave ho trovato su questo stesso forum un topic vecchiotto con tutto quello che sembra proprio fare quello che desidero.

(LINK ALLA DISCUSSIONE)

soltanto che prelevando la libreria messa a disposizione da questo utente, e provando a compilare uno degli sketch di esempio sempre da lui forniti, ricevo errori di compilazione. Il primo errore era dovuto a:

extern "C" {
   #include "wiring.h"
   #include <utility/EthernetUtil.h>
}

ma googlando ho visto che altre librerie che portavano questo errore si risolveva modificando in :

/extern "C" {
   #include "wiring_private.h"
   #include <utility/EthernetUtil.h>
}[code]

ed effettivamente la compilazione è andata avanti ma restituisce altri errori.. qualcuno saprebbe aiutarmi a risolvere ? così tutti potremmo godere di una libreria funzionante per l'IDE aggiornato !

OUTPUT ERRORE:
link su pastebin

Sperando di fare cosa gradita pubblico la soluzione ai miei stessi problemi :slight_smile:
Non sarà un lavoro “pulito” ma funziona !

Ho modificato solo una riga nella libreria che l’utente gck aveva condiviso, ho incluso il file “wiring.h” tra i file della libreria stessa (preso dalla vecchia versione 0.17 di Arduino IDE, che era la versione per la quale era stata sviluppata appunto la libreria) e ho leggermente modificato gli sketch di esempio per aggiornarli e renderli compatibili con l’attuale libreria Ethernet.

Allego il tutto qui precisando, che riesco a compilare soltanto utilizzando l’IDE versione 1.6.10 con il gestore delle schede aggiornato alla versione 1.6.12 !

Ho provato personalmente e con successo sono riuscito a raggiungere la pagina web del mio Arduino digitando http://arduino.local nel mio browser

Preciso inoltre che per funzionare il sistema deve integrare il servizio Bonjour della Apple. Lo si trova integrato in tutti i sistemi Apple già nativamente, oppure è possibile scaricare ed installare il suddetto servizio anche per sistemi Windows.
Link al sito ufficiale:

EthernetBonjour.zip (28.7 KB)