Questo sito si serve dei cookie tecnici di Google per l'erogazione dei servizi e ospita cookie di profilazione di terze parti, utilizzati per la personalizzazione degli annunci pubblicitari. Cliccando su "OK" o proseguendo nella navigazione si acconsente tacitamente al loro uso.
Informativa estesa

Cookie Policy
Uso dei cookie

Il "Sito" (www.vincenzocaputo.com) utilizza i Cookie per rendere i propri servizi semplici e efficienti per l’utenza che visiona le pagine di www.vincenzocaputo.com. Gli utenti che visionano il Sito, vedranno inserite delle quantità minime di informazioni nei dispositivi in uso, che siano computer e periferiche mobili, in piccoli file di testo denominati “cookie” salvati nelle directory utilizzate dal browser web dell’Utente. Vi sono vari tipi di cookie, alcuni per rendere più efficace l’uso del Sito, altri per abilitare determinate funzionalità.

Analizzandoli in maniera particolareggiata i nostri cookie permettono di:

  • memorizzare le preferenze inserite;
  • evitare di reinserire le stesse informazioni più volte durante la visita quali ad esempio nome utente e password;
  • analizzare l’utilizzo dei servizi e dei contenuti forniti da www.vincenzocaputo.com per ottimizzarne l’esperienza di navigazione e i servizi offerti.
Tipologie di Cookie
Cookie tecnici

Questa tipologia di cookie permette il corretto funzionamento di alcune sezioni del Sito. Sono di due categorie: persistenti e di sessione:

  • persistenti: una volta chiuso il browser non vengono distrutti ma rimangono fino ad una data di scadenza preimpostata
  • di sessione: vengono distrutti ogni volta che il browser viene chiuso

Questi cookie, inviati sempre dal nostro dominio, sono necessari a visualizzare correttamente il sito e in relazione ai servizi tecnici offerti, verranno quindi sempre utilizzati e inviati, a meno che l’utenza non modifichi le impostazioni nel proprio browser (inficiando così la visualizzazione delle pagine del sito).

Cookie analitici

I cookie in questa categoria vengono utilizzati per collezionare informazioni sull’uso del sito. www.vincenzocaputo.com userà queste informazioni in merito ad analisi statistiche anonime al fine di migliorare l’utilizzo del Sito e per rendere i contenuti più interessanti e attinenti ai desideri dell’utenza. Questa tipologia di cookie raccoglie dati in forma anonima sull’attività dell’utenza e su come è arrivata sul Sito. I cookie analitici sono inviati dal Sito Stesso o da domini di terze parti.

Cookie di analisi di servizi di terze parti

Questi cookie sono utilizzati al fine di raccogliere informazioni sull’uso del Sito da parte degli utenti in forma anonima quali: pagine visitate, tempo di permanenza, origini del traffico di provenienza, provenienza geografica, età, genere e interessi ai fini di campagne di marketing. Questi cookie sono inviati da domini di terze parti esterni al Sito.

Cookie per integrare prodotti e funzioni di software di terze parti

Questa tipologia di cookie integra funzionalità sviluppate da terzi all’interno delle pagine del Sito come le icone e le preferenze espresse nei social network al fine di condivisione dei contenuti del sito o per l’uso di servizi software di terze parti (come i software per generare le mappe e ulteriori software che offrono servizi aggiuntivi). Questi cookie sono inviati da domini di terze parti e da siti partner che offrono le loro funzionalità tra le pagine del Sito.

Cookie di profilazione

Sono quei cookie necessari a creare profili utenti al fine di inviare messaggi pubblicitari in linea con le preferenze manifestate dall’utente all’interno delle pagine del Sito.

www.vincenzocaputo.com, secondo la normativa vigente, non è tenuto a chiedere consenso per i cookie tecnici e di analytics, in quanto necessari a fornire i servizi richiesti.

Per tutte le altre tipologie di cookie il consenso può essere espresso dall’Utente con una o più di una delle seguenti modalità:

  • Mediante specifiche configurazioni del browser utilizzato o dei relativi programmi informatici utilizzati per navigare le pagine che compongono il Sito.
  • Mediante modifica delle impostazioni nell’uso dei servizi di terze parti

Entrambe queste soluzioni potrebbero impedire all’utente di utilizzare o visualizzare parti del Sito.

Siti Web e servizi di terze parti

Il Sito potrebbe contenere collegamenti ad altri siti Web che dispongono di una propria informativa sulla privacy che può essere diverse da quella adottata da www.vincenzocaputo.com e che che quindi non risponde di questi siti.

Ultimo aggiornamento 8 marzo 2016

<Come disabilitare i cookie mediante configurazione del browser

Se desideri approfondire le modalità con cui il tuo browser memorizza i cookies durante la tua navigazione, ti invitiamo a seguire questi link sui siti dei rispettivi fornitori.

Mozilla Firefox https://support.mozilla.org/it/kb/Gestione%20dei%20cookie
Google Chrome https://support.google.com/chrome/answer/95647?hl=it
Internet Explorer http://windows.microsoft.com/it-it/windows-vista/block-or-allow-cookies
Safari 6/7 Mavericks https://support.apple.com/kb/Pstrong7191?viewlocale=it_IT&locale=it_IT
Safari 8 Yosemite https://support.apple.com/kb/Pstrong9214?viewlocale=it_IT&locale=it_IT
Safari su iPhone, iPad, o iPod touch https://support.apple.com/it-it/HT201265

Nel caso in cui il tuo browser non sia presente all'interno di questo elenco puoi richiedere maggiori informazioni inviando una email all'indirizzo info@nibirumail.com. Provvederemo a fornirti le informazioni necessarie per una navigazione anonima e sicura.

Questa pagina è stata generata ed è ospitata sul portale nibirumail.com - Il contenuto di questa pagina è stato generato 08 marzo 2016 attraverso il servizio Cookie Policy Generator. Il marchio Nibirumail e le aziende ad esso collegate non sono responsabili per informazioni erronee o non più aggiornate. Se desideri ricevere una versione aggiornata di questi contenuti contatta il proprietario di dalla pagina precedente.

OK

Coding

Impariamo ad usare il WiFi del NodeMCU Parte 1 - mai più schiavi del cavo

Data: 17 giugno 2018

In questo nuovo articolo della serie dedicata al coding impariamo ad utilizzare il WiFi integrato nel NodeMCU.

Apriremo una connessione server all'interno di una LAN interagendo con questo tramite una app per Android che vi metto gratuitamente a disposizione qui.

L'app a vostra  disposizione è una sorta di terminale "moderno" sottoforma di chat che vi permetterà di interagire con il NodeMCU inviando comandi e ricevendo risposte ai comandi inviati.

Vincenzo vi spiegherà nel video il funzionamento dell'app.

Comanderemo ancora una volta un led e riceveremo una risposta sullo stato del led.

Nel corso di questa serie dedicata al coding, oltre a mostrarvi nuove features del NodeMCU, aggiungerò anche nuove funzioni all'app.

Ingredienti necessari:

Preparazione.

Prendete dell'hardware e collegatelo così:

Prendete del software, ancora una volta l'IDE di Arduino, e scrivete così:

#include <ESP8266WiFi.h> 

const char *SSID = "tim-12345678";
const char *PASSWORD = "12341234";
const int PORT = 8080;

//inizializzo un nuovo oggetto server della classe WiFiServer 
//passando come argomento la porta su cui si mettera' in ascolto
WiFiServer server(PORT);

const int ledPinRed = D0; 
const int ledPinGreen = D1; 

void startWiFi() {
  Serial.print("Connecting to ");
  Serial.println(SSID);
   
  WiFi.begin(SSID, PASSWORD);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  
  Serial.println();
  Serial.println("WiFi connected");
}

void setup() {
  
  Serial.begin(115200);
  
  delay(25); 
  pinMode(ledPinRed, OUTPUT);
  pinMode(ledPinGreen, OUTPUT);

  //mi collego all'hotspot
  startWiFi();

  //avvio il server
  server.begin();
  Serial.println("Server started");
  Serial.println(WiFi.localIP());
}

void loop() {

  //inizializzo un nuovo oggetto client della classe WiFiClient
  WiFiClient client = server.available();   //NON bloccante

  //entra se un nuovo client si e' connesso
  if(client) {
    String reply = "comando non trovato";
    
    String request = client.readStringUntil('\r');    //la richiesta da parte del client deve contenere "\r\n", timeout di defaul di 1000ms altrimenti setTimeout()
    Serial.println(request);   

    if(request.equals("accendi led rosso")) {  
      digitalWrite(ledPinRed, HIGH);   
      reply = "led rosso acceso";      
    }
    else if(request.equals("spegni led rosso")) {  
      digitalWrite(ledPinRed, LOW);    
      reply = "led rosso spento"; 
    } 
    else if(request.equals("accendi led verde")) {  
      digitalWrite(ledPinGreen, HIGH);   
      reply = "led verde acceso";
    } 
    else if(request.equals("spegni led verde")) {  
      digitalWrite(ledPinGreen, LOW);     
      reply = "led verde spento";  
    }
    
    client.println(reply);            
    client.stop();
  }
  else {
    delay(500);
  }
}

Carichiamo lo sketch.

Descrizione dello sketch:

La prima riga di codice dice al compilatore che utilizzeremo la libreria ESP8266WiFi includendo il file header ESP8266WiFi.h

Le stringhe SSID e PASSWORD sono ovviamente il nome e la password della rete a cui il NodeMCU si collegherà.

La variabile PORT di tipo intero è la porta su cui il server si metterà in ascolto in attesa che i client si colleghino.

WiFiServer è una classe inclusa nella libreria ESP8266WiFi che ci permetterà di utilizzare il NodeMCU come server. Istanziamo uno oggetto server della classe WiFiServer passando al costruttore la porta su cui il server si metterà in ascolto in attesa che un nuovo client si colleghi.

Avviamo lo sketch e come al solito sarà chiamata la funzione setup().

Nella funzione setup() troviamo la funzione startWiFi() scritta da noi.

Nella funzione startWiFi() troviamo la funzione statica begin() della classe WiFi che ci permetterà di connetterci alla rete. Il prototipo della funzione begin() è:

wl_status_t WiFi::begin(const char* ssid, const char* password);

wl_status_t è un tipo di dato definito tramite enum che può assumere i seguenti valori:

typedef enum {
        WL_NO_SHIELD = 255,
        WL_IDLE_STATUS = 0,
        WL_NO_SSID_AVAIL,
        WL_SCAN_COMPLETED,
        WL_CONNECTED,
        WL_CONNECT_FAILED,
        WL_CONNECTION_LOST,
        WL_DISCONNECTED
} wl_status_t;

Subito dopo troviamo un ciclo while che itera finchè lo stato della connessione non diventi WL_CONNECTED cioè finche la funzione statica status() della classe WiFi non restituisca WL_CONNECTED. Il prototipo di questa funzione è:

wl_status_t WiFi::status();

Dopo che la connessione alla rete del NodeMCU sarà effettuata possiamo avviare il server chiamando la funzione begin della classe WiFiServer tramite l'oggetto server.

Terminata la funzione setup() il NodeMCU invocherà la funzione loop().

Nella funzione loop() troviamo per prima cosa l'oggetto client della classe WiFiClient. Questo oggetto sarà inizializzato con il primo client in ordine di tempo che si collega al server tramite la funzione available() dell'oggetto server.

WiFiClient WiFiServer::available();

La funzione available() è di tipo NON bloccante cioè nel momento in cui viene invocata, se non ci sono client in attesa, allora la funzione ritorna NULL.

La funzione readStringUntil() della classe WiFiClient ci permetterà di leggere una sequenza di caratteri dallo stream fino al teminatore di stringa, che siamo liberi di scegliere, e di inserirla in un oggetto della classe String. Il prototipo della funzione readStringUntil() è:

String WiFiClient::readStringUntil(const char terminatore);

Per terminare la connessione con il client utilizzeremo la funzione stop() della classe WiFiClient.

Risultato:
 
Carichiamo lo sketch e attendiamo che il NodeMCU si colleghi alla rete.
 
Avviamo l'app e diamo il permesso di leggere e scrivere file (si tratta della cache dei messaggi).
 
Nella Toolbar, in alto a destra, troviamo il bottone a forma di +. Premiamo il bottone per aggiungere un nuovo dispositivo fornendo un nome al dispositivo a vostra scelta, l'indirizzo ip e la porta.
 
 
L'indirizzo ip del NodeMCU lo trovate aprendo il Monitor Seriale nel momento in cui parte lo sketch. Infatti la riga Serial.println(WiFi.localIP()) nella funzione setup() assolve a questo compito. Notate bene che se aprite il Monitor Seriale durante il caricamento dello sketch allora il caricamento potrebbe non andare a buon fine quindi per ovviare potete eseguire prima il caricamento e al termine di questo avviare il Monitor Seriale infine premere il tasto di reset del NodeMCU.
 
La porta è il valore inserito nella variabile intera PORT che nel nostro caso è 8080 ma voi siete liberi di cambiarla a patto che siano uguali sia sull'app sia nello sketch.
 
Premendo sul bottone "Salva ed Esci" vi comparirà in lista il vostro dispositivo. Se vi siete accorti di aver fatto un errore potete premere a lungo sul dispositivo appena inserito per eliminarlo altrimenti premendo una sola volta entrate nella pagina della chat con il vostro dispositivo.
 
 
Nella pagina della chat potete inviare i comandi al vostro dispositivo.
 
 
Le stringhe "accendi led rosso", "spegni led rosso", etc..., presenti nella funzione loop() dello sketch, sono i comandi che voi potete fornire al NodeMCU tramite l'app mentre le stringhe "led rosso acceso", "led rosso spento", etc..., sono le risposte che il NodeMCU vi fornirà ai vostri comandi.
 
Potete divertirvi utilizzando questi comandi o creandone di vostri personalizzando la sequenza di istruzioni all'interno degli if().
 
Se tutto questo non avviene scrivetemi nei commenti e cercherò di aiutarvi il prima possibile.

Ho scritto l'app in pochissimo tempo quindi se avete problemi anche sull'app scrivetemi nei commenti. Ho intenzione di proseguire parallelamente nello sviluppo dell'app, aggiungendo sempre nuove funzionalità, e nella scrittura di nuovi tutorial in modo tale da fornirvi sempre qualcosa che sia gia pronto all'uso e su cui potete sperimentare.
 
Nota Bene:
 
Questo è solo un esempio in quanto non è stata utilizzata alcuna cifratura dei messaggi (quindi all'interno della vostra LAN chiunque potrebbe leggere i messaggi scambiati tra l'app e il NodeMCU) e non è stato validato l'input cioe non è stato controllato ne il case (upper e lower dei caratteri, ricodatevi che il C++ è case-sensitive) ne eventualmente i caratteri riservati (es. & #).
 
Nel prossimo tutorial...
 
Useremo ancora il WiFi NodeMCU per inviare comandi ad una elettrovalvola con un occhio di riguardo alla sicurezza.
 
Se avete suggerimenti su nuovi tutorial attinenti il NodeMCU non esitate a scrivere nei commenti.

Produrre e aggiornare contenuti su vincenzocaputo.com richiede molto tempo e lavoro. Se il contenuto che hai appena letto è di tuo gradimento e vuoi supportarmi, clicca uno dei link qui sotto per fare una donazione.

domotica
android
Arduino
C
C++
NodeMCU

Seguimi su Youtube

Seguimi su Youtube

Seguimi su Youtube

Seguimi su Telegram

Seguimi su Youtube

Seguimi via RSS

Consigliati da noi
Categorie
Domotica
123 articoli
Info
16 articoli
L'angolo dei lettori
15 articoli
Auto-Moto
13 articoli
Audio-Video
12 articoli
Promo
9 articoli
Post piu letti
Funzionamento Relè eMylo come deviatore
Riprogrammare Sonoff Smart Switch Basic con Firmware Tasmota
Come integrare Sonoff switch in Home Assistant tramite IFTTT
Autoradio Android ATOTO A61721P - La Prova
Comandiamo un Relè RF eMylo tramite Broadlink RM PRO

Supportami