Il nodeMCU Lua Wifi getUrl è un esempio di come poter usare il tuo ESP8266 per connetterti ad un sito web in modalità client get http
dopo l’articolo in cui hai imparato a connettere il node mcu al wifi con lua è il momento di iniziare a sfruttare la connessione wifi e provare qualche esempio di connessione.
Prima di passare alla realizzazione di un server e di iniziare a programmare pagine e pagine web per visualizzare sul browser come accendere e spegnere il classico led è bene prendere confidenza con i comandi del modulo net e le connessioni http.
NodeMCU Lua WiFi getUrl
Il primo esperimento che ti propongo è quello di connetterti ad un sito web, nello specifico ho scelto www.mauroalfieri.it, e chiedere gli header della homepage ( se non sai cosa sono gli header http puoi leggere il seguente link ) ecco come ho fatto:
conn=net.createConnection(net.TCP, 0) conn:on("connection",function(conn, payload) conn:send("HEAD / HTTP/1.1\r\n".. "Host: www.mauroalfieri.it\r\n".. "Accept: */*\r\n".. "User-Agent: Mozilla/4.0 (compatible; esp8266 Lua;)".. "\r\n\r\n") end) conn:on("receive", function(conn, payload) print( payload ) end) conn:dns('www.mauroalfieri.it',function(conn,ip) ipaddr=ip end) conn:connect(80,ipaddr)
il risultato su node mcu lua wifi getUrl è stato:
leggendo lo sketch puoi notare facilmente i comandi:
linea 01: crei una connessione di tipo TCP in cui il parametro “0” significa “Non SSL” ( vedi manuale node mcu module )
linee 02-08: imposta l’evento “connection” della connessione associandogli la funzione che invia la richiesta della sola parte HEAD al sito www.mauroalfieri.it ( HEAD / HTTP/1.1\r\n Host: www.mauroalfieri.it\r\n )
linee 10-12: imposta l’evento “receive” della connessione associando la funzione che scriverà sul monitor seriale le informazioni ricevute in risposta dalla chiamata precedente;
linea 13: crea la query DNS per ricevere l’IP corrispondente all’url impostato;
linea 14: esegui la connessione all’IP ricavato dalla riga precedente sulla porta 80 ( http standard non ssl )
Nota la semplicità di questa chiamata con sole 14 righe hai interrogato un webserver e ricevuto gli HEADER della pagina interrogata.
Warning!
Ricorda che i comandi di connessione funzionano solo se hai già eseguito la connessione wifi all’SSID.
14 commenti
Vai al modulo dei commenti
Anche io ho scoperto questa board in settimana e ne sono affascinato,
a meno di 3 EURO ti porti a casa un modulo wifi in una scheda programmabile.
ho visto che esistono almeno altre due versioni 0.1 e 0.9 perciò prima di comprarla aspetto un altro pochino per capire quello che compro.
complimenti per tutto il sito e resto in attesa di vedere sviluppi per questa board sui tuoi post 😉
un saluto
Lorenzo
Autore
Ciao Lorenzo,
si è una scheda davvero interessante.
ciao Mauro, intanto grazie per i tuoi tutorial ben spiegati e documentati,
ho un dubbioi sulle ultime 2 righe dell’esempio:
conn:dns(‘www.mauroalfieri.it’,function(conn,ip) ipaddr=ip end)
conn:connect(80,ipaddr)
se risolvo l’IP del nome del mio dominio e poi lo navigo non vengo indirizzato sulla pagina principale del mio dominio ma genericamente sulla webmail, stessa cosa accade con il tuo dominio https://www.mauroalfieri.it che corrisponde al’IP 213.165.88.116 ma che rimanda a https://webmail.1and1.it/
la domanda è: a cosa serve risolvere e puntare l’IP se poi devo fare la GET di una pagina che si trova altrove?
Grazie ancora e saluti
Marco
Autore
Ciao Marco,
non ho compreso il tuo dubbio. Se usi l’IP di un server via getUrl il server ti rimanderà al DefaultDomain impostato nel server, puoi verificare con chi gestisce il tuo server perché l’Ip punti ad una webmail, nel mio caso l’ho impostato io.
Ciao Mauro,
grazie per la precisazione, il mio dubbio era proprio il caso dell’impossibilità di configurare il DefaultDomain per far puntare l’ip del sito web e che velocizza le chiamate rest in quanto si elimina il tempo di elaborazione del dns.
Comunque navigando ho trovato altri utenti con lo stesso problema di non conoscere o poter risolvere l’ip del proprio dominio, alla fine ho scoperto che banalmente basta sostituire l’ip con l’url nella chiamata connect, es.:
conn:connect(80,’mauroalfieri.it’)
Grazie ancora e saluti
Marco
p.s. ho visto che abbiamo qualche amico in comune, come Costantino e Zoe di WeMake 😉
Autore
Ciao Marco,
puoi sostituire il nome del domino ma introduci la latenza di risoluzione dns.
Ciao io dovrei fare una richiesta HTTPS ma non ci riesco, puoi aiutarmi?
Autore
Ciao Marco,
ho testato le funzionalità https solo con la MKR1000 se usi quella posso aiutarti.
Purtroppo sono limitato per la mia tesi all’uso di nodemcu programmato in lua. Non c’è nessun modo? Grazie mille
Autore
Ciao Marco,
in Lua puoi verificare nella documentazione, mi sembra fosse completa e chiara.
I moduli che implementa la documentazione(http e net) non funzionano purtroppo. Il primo mi dà errore di Dns failed mentre il secondo dà errore 301
Autore
Ciao Marco,
purtroppo ho sperimentato poco con la NodeMCU e LUA per poterti dare il corretto supporto.
Purtroppo devo farla con nodemcu, come potrei fare ?
Autore
Ciao Marco,
hai provato a leggere la documentazione della scheda, o a cercare qualche esempio sul web?