PitESP8266 - 01 - LED control WEB
L'utilizzo del modulo ESP8266 versione 01 - LED control WEB.
Fonte principale maffucci.it.
Prova del modulo ESP-01
Cosa serve:
- ESP-01
- modulo alimentazione
- led
- reistenze
- cavetti
Codice sorgente:
/*
* Prof. Michele Maffucci
* 12.05.2017
* accensione/spegnimento LED da pagina web
* con ESP8266
* per maggiori informazioni:
* https://www.arduino.cc/en/Reference/WiFi
* https://github.com/esp8266
* introdotte piccole modifiche per controllo collegamento wifi tramite led
*/
#include "ESP8266WiFi.h"
// La connessione dell'ESP8266 al un network WiFi viene
// realizzata usando un personal encryption WEP e WPA2
// Per poter sapere a quale rete connettersi bisogna
// effettuare un broadcast dell'SSID (nome del network)
// definizione di due array di caratteri
// in cui memorizzare nome della rete WiFi e password
const char ssid[] = "MioSSID"; // inserire l'ssid della rete
const char pass[] = "MIAPASSW"; // password della rete
// Creazione di un server web in ascolto sulla porta 80
// attende contenuti (pagine html, immagini, css, ecc...)
WiFiServer server(80);
int pinLed = 2; // LED connesso tra pin 2 e ground
int pinCtr = 0;
void setup() {
Serial.begin(115200); // inizializzazione Serial Monitor
delay(10);
pinMode(pinCtr, OUTPUT);
pinMode(pinLed, OUTPUT);
digitalWrite(pinLed, LOW); // LED inizialmente spento
// Connessione alla rete WiFi
Serial.println();
Serial.println();
Serial.println("------------- Avvio connessione ------------");
Serial.print("Tentativo di connessione alla rete: ");
Serial.println(ssid);
/*
* Viene impostata l'impostazione station (differente da AP o AP_STA)
* La modalità STA consente all'ESP8266 di connettersi a una rete Wi-Fi
* (ad esempio quella creata dal router wireless), mentre la modalità AP
* consente di creare una propria rete e di collegarsi
* ad altri dispositivi (ad esempio il telefono).
*/
WiFi.mode(WIFI_STA);
/*
* Inizializza le impostazioni di rete della libreria WiFi e fornisce lo stato corrente della rete,
* nel caso in esempio ha come parametri ha il nome della rete e la password.
* Restituisce come valori:
*
* WL_CONNECTED quando connesso al network
* WL_IDLE_STATUS quando non connesso al network, ma il dispositivo è alimentato
*/
WiFi.begin(ssid, pass);
/*
* fino a quando lo non si è connessi alla WiFi
* compariranno a distanza di 250 ms dei puntini che
* evidenziano lo stato di avanzamento della connessione
*/
while (WiFi.status() != WL_CONNECTED) {
delay(125);
Serial.print(".");
digitalWrite(pinCtr, HIGH);
delay(125);
digitalWrite(pinCtr, LOW);
}
// se connesso alla WiFi stampa sulla serial monitor
// nome della rete e stato di connessione
Serial.println("");
Serial.print("Sei connesso ora alla rete: ");
Serial.println(ssid);
Serial.println("WiFi connessa");
// Avvia il server
server.begin();
Serial.println("Server avviato");
// Stampa l'indirizzo IP
Serial.print("Usa questo URL : ");
Serial.print("http://");
Serial.print(WiFi.localIP()); // Restituisce i'IP della scheda
Serial.println("/");
}
void loop() {
// Verifca se il client e' connesso
WiFiClient client = server.available();
if (!client) {
return;
}
// Aspetta fino a quando il client invia dei dati
Serial.println("Nuovo client");
while (!client.available()) {
delay(1);
}
// Legge la prima richiesta
/*
* readStringUntil() legge i caratteri dal buffer seriale
* all'interno di una stringa fino a quando non riceve il
* carattere di terminazione in questo cas \r
* oppure si verivica un time out
*/
String request = client.readStringUntil('\r');
Serial.println(request);
client.flush(); // flush() elimina il buffer una volta che
// tutti i caratteri in uscita sono stati inviati.
// Verifica quale richiesta e' stata fatta
/*
* Individua un carattere o una stringa all'interno di un'altra stringa (nell'esempio la strina è request).
* Per impostazione predefinita, ricerche dall'inizio della stringa,
* ma è possibile effettuare la ricerca partendo da un dato indice,
* permettendo di individuare tutte le istanze del carattere o della stringa.
* Se il valore restituito è -1 allora la stringa non è stata trovata.
*/
int valore = LOW;
if (request.indexOf("/LED=ON") != -1) {
digitalWrite(pinLed, HIGH);
valore = HIGH;
}
if (request.indexOf("/LED=OFF") != -1) {
digitalWrite(pinLed, LOW);
valore = LOW;
}
// Restituisce la risposta
/*
* La pagina web dovrà essere formattata con la sua intestazione html
* e variando il messaggio che identifica lo stato del LED
*/
// intestazione pagina html
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println(""); // non dimenticare questa linea
client.println("");
client.println("");
// titolo della pagina
client.println("Intefaccia di controllo LED mediante ESP8266
");
// includiamo tutto il testo in un div in cui il font è impostato a 20 px
// N.B. ricorda che per poter considerare le " come stringa e' necessario farle precedere da uno \
client.print("");
client.print("Il LED e': ");
if (valore == HIGH) {
// stampa ON di colore verde
client.print("ON");
} else {
// stampa OFF di colore rosso
client.print("OFF");
}
// stampa una riga separatrice
client.println("
");
// lista puntata
client.println("");
client.print("");
client.println("");
// chiusura connessione
delay(1);
Serial.println("Client disconnesso");
Serial.println("");
}
Scarica tutto quello che serve:
ZappocoS, 17 febbraio 2018