/********* IZ5FCY Roberto (iz5fcy@gmail.com) *********/ // Caricare la libreria Wi-Fi #includere // Sostituire con le credenziali di rete const char* ssid = "REPLACE_WITH_YOUR_SSID"; const char* password = "REPLACE_WITH_YOUR_PASSWORD"; // Impostare il numero di porta del server web su 80 WiFiServer server(80); // Variabile per memorizzare la richiesta HTTP String header; // Variabili ausiliarie per memorizzare lo stato corrente dell'uscita String output5State = "off"; String output4State = "off"; // Assegnazione delle variabili di uscita ai pin GPIO const int output5 = 5; const int output4 = 4; // Ora corrente unsigned long currentTime = millis(); // Ora precedente unsigned long previousTime = 0; // Definire il tempo di timeout in millisecondi (esempio: 2000ms = 2s) const long timeoutTime = 2000; void setup() { Serial.begin(115200); // Inizializzare le variabili di uscita come uscite pinMode(output5, OUTPUT); pinMode(output4, OUTPUT); // Impostare le uscite su LOW digitalWrite(output5, LOW); digitalWrite(output4, LOW); // Connettersi alla rete Wi-Fi con SSID e password Serial.print("Connessione a "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { ritardo(500); Serial.print("."); } // Stampa l'indirizzo IP locale e avvia il server Web Serial.println(""); Serial.println("WiFi connesso."); Serial.println("Indirizzo IP: "); Serial.println(WiFi.localIP()); server.begin(); } void loop(){ WiFiClient client = server.available(); // Ascolta i client in arrivo if (client) { // Se un nuovo client si connette, Serial.println("Nuovo cliente."); // stampa un messaggio nella porta seriale String currentLine = ""; // crea una stringa per contenere i dati in arrivo dal client currentTime = millis(); previousTime = currentTime; while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop mentre il client è connesso currentTime = millis(); if (client.available()) { // se ci sono byte da leggere dal client, char c = client.read(); // legge un byte, quindi Serial.write(c); // lo stampa sul monitor seriale header += c; if (c == '\n') { // se il byte è un carattere di newline // se la riga corrente è vuota, ci sono due caratteri newline di fila. // è la fine della richiesta HTTP del client, quindi inviare una risposta: if (currentLine.length() == 0) { // Le intestazioni HTTP iniziano sempre con un codice di risposta (ad esempio HTTP/1.1 200 OK) // e un tipo di contenuto, in modo che il client sappia cosa sta per arrivare, poi una riga vuota: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connessione: chiusa"); client.println(); // attiva e disattiva i GPIO if (header.indexOf("GET /5/on") >= 0) { Serial.println("GPIO 5 on"); output5State = "on"; digitalWrite(output5, HIGH); } else if (header.indexOf("GET /5/off") >= 0) { Serial.println("GPIO 5 off"); output5State = "off"; digitalWrite(output5, LOW); } else if (header.indexOf("GET /4/on") >= 0) { Serial.println("GPIO 4 on"); output4State = "on"; digitalWrite(output4, HIGH); } else if (header.indexOf("GET /4/off") >= 0) { Serial.println("GPIO 4 off"); output4State = "off"; digitalWrite(output4, LOW); } // Mostra la web page HTML client.println(""); client.println(""); client.println(""); // CSS per lo stile dei pulsanti di accensione e spegnimento // Sentitevi liberi di modificare gli attributi background-color e font-size per adattarli alle vostre preferenze. client.println(""); // Web Page Heading client.println("

ESP8266 Web Server

"); // Visualizzazione dello stato attuale e pulsanti ON/OFF per GPIO 5 client.println("

GPIO 5 - State " + output5State + "

"); // Se l'uscita5State è disattivata, viene visualizzato il pulsante ON. if (output5State=="off") { client.println("

"); } else { client.println("

"); } // Mostra lo stato corrente e bottone ON/OFF per GPIO 4 client.println("

GPIO 4 - State " + output4State + "

"); // If the output4State is off, it displays the ON button if (output4State=="off") { client.println("

"); } else { client.println("

"); } client.println(""); // La risposta HTTP termina con un'altra riga vuota client.println(); // Uscire dal ciclo while break; } else { // se si ottiene un newline, cancellare currentLine currentLine = ""; } } else if (c != '\r') { // se si ottiene qualcosa di diverso da un carattere di ritorno a capo, currentLine += c; // aggiungerlo alla fine di CurrentLine } } } // Azzeramento della variabile header header = ""; // Chidi la connessione client.stop(); Serial.println("Client disconnected."); Serial.println(""); } }