NodeMCU Lua Wifi getUrl

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

NodeMCU Lua WiFi

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:

NodeMCU Lua Wifi get mauroalfieri hader

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.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/informatica/nodemcu-lua-wifi-geturl.html

14 commenti

Vai al modulo dei commenti

    • lorenzo il 3 Dicembre 2016 alle 16:41
    • Rispondi

    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

    1. Ciao Lorenzo,
      si è una scheda davvero interessante.

  1. 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

    1. 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.

      1. 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 😉

        1. Ciao Marco,
          puoi sostituire il nome del domino ma introduci la latenza di risoluzione dns.

    • Marco Rizzi il 25 Marzo 2019 alle 13:03
    • Rispondi

    Ciao io dovrei fare una richiesta HTTPS ma non ci riesco, puoi aiutarmi?

    1. Ciao Marco,
      ho testato le funzionalità https solo con la MKR1000 se usi quella posso aiutarti.

        • Marco Rizzi il 26 Marzo 2019 alle 09:46
        • Rispondi

        Purtroppo sono limitato per la mia tesi all’uso di nodemcu programmato in lua. Non c’è nessun modo? Grazie mille

        1. Ciao Marco,
          in Lua puoi verificare nella documentazione, mi sembra fosse completa e chiara.

            • Marco Rizzi il 26 Marzo 2019 alle 10:33

            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

          1. Ciao Marco,
            purtroppo ho sperimentato poco con la NodeMCU e LUA per poterti dare il corretto supporto.

    • Marco il 26 Marzo 2019 alle 07:48
    • Rispondi

    Purtroppo devo farla con nodemcu, come potrei fare ?

    1. Ciao Marco,
      hai provato a leggere la documentazione della scheda, o a cercare qualche esempio sul web?

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.