NodeMCU esp8266 è una scheda controllore con wifi a bordo del costo di pochi dollari/euro programmabile con IDE di Arduino ( e quindi in linguaggio C) con la quale possiamo eseguire programmi e gestirli con la wifi. Possiamo eseguire un programma che legge i valori di un sensore di temperatura e leggere i risultati tramite la rete wifi su uno smartphone e realizzare così un piccolo server (servizio) per il monitoraggio delle temperature. Dal omento che esistono modi per accedere alla rete locale anche da remoto, anche senza aver acquistato IP statici dal nostro provider, possiamo fare una lettura dei dati del server anche da remoto, ed implementare servizi di controllo umidità, temperatura, apertura chiusura porte e cancelli, accensione e spegnimento dispositivi ecc.

 

Accensione e spegni,mento di un led da remoto.

In questo video tutorial si vede come realizzare un servizio su IP che accenda e spenga un led da pagina web (server di accensione/spegnimento led).

Lo schema del collegamento è elementare e lo trovate a questo indirizzo e il link allo sketch https://drive.google.com/open?id=0B3E…  

 

 

 

 

 

 

 

 

 

 

il client:

 

 

 

 

Di seguito lo scketch (server) da caricare sul NodeMCU esp 8266: 

#include <ESP8266WiFi.h>// libreria

const char* ssid = “…….”; // scrivi nome del tuo wifi
const char* password = “……..”; // scrivi pass wifi

int ledPin = 13; // perno D7 rimappato in 13
WiFiServer server(80);

void setup() {
Serial.begin(115200);
delay(10);

pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);

// connettersi alla rete wifi
Serial.println();
Serial.println();
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”);

// avvia il server
server.begin();
Serial.println(“Server started”);

// stampa l’indirizzo wifi
Serial.print(“Use this URL to connect: “);
Serial.print(“http://”);
Serial.print(WiFi.localIP());
Serial.println(“/”);

}

void loop() {
// verifica se un cliente è connesso
WiFiClient client = server.available();
if (!client) {
return;
}

// attendere fino a quando il client invia alcuni dati
Serial.println(“new client”);
while(!client.available()){
delay(1);
}

// legge la prima riga della richiesta
String request = client.readStringUntil(‘\r’);
Serial.println(request);
client.flush();

// partita la richiesta

int value = LOW;
if (request.indexOf(“/LED=ON”) != -1) {
digitalWrite(ledPin, HIGH);
value = HIGH;
}
if (request.indexOf(“/LED=OFF”) != -1) {
digitalWrite(ledPin, LOW);
value = LOW;
}

// inposta led secondo la richiesta
//digitalWrite(ledPin, value);

// restituisce la risposta
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println(“”); // non dimenticare questo
client.println(“<!DOCTYPE HTML>”);
client.println(“<html>”);

client.print(“Led pin is now: “);

if(value == HIGH) {
client.print(“On”);
} else {
client.print(“Off”);
}
client.println(“<br><br>”);
client.println(“<a href=\”/LED=ON\”\”><button>Turn On </button></a>”);
client.println(“<a href=\”/LED=OFF\”\”><button>Turn Off </button></a><br />”);
client.println(“</html>”);

delay(1);
Serial.println(“Client disonnected”);
Serial.println(“”);

}