La Libreria WiFi101 permette di utilizare l’MKR1000 come Web Server, in grado di fornire ai client un contenuto HTML attraverso il quale interagire con l’Arduino, passando valori in GET al server per il controllo di dispositivi (accensione/spegnimento led) oppure che visualizzi valori di variabili gestite dal programma Arduino (valore distanza sensore ultrasuoni).
-
WEB SERVER Controllo Accensione /Spegnimento Led
/* WiFi Web Server per il Controllo accensione LED Questo sketch realizza un semplice Web Server con MKR1000. Il programma dopo la connessione wifi stampa sul Monitor Seriale l'IP Address dell'Arduino in rete. Inserendo questo IP nel browser è possibile controllare la accensione/spegnimento del Led da Web. */ #include <WiFi101.h> char ssid[] = "xxxxxxxxxxxxxxxxxxxxx"; char pass[] = "xxxxxxxxxxxxxxxxxxxxx"; const int pinLED_CONNECTION = 6; const int pinLED_OUT = 12; int status = WL_IDLE_STATUS; WiFiServer server(80); void setup() { pinMode(pinLED_OUT, OUTPUT); pinMode(pinLED_CONNECTION, OUTPUT); digitalWrite(pinLED_CONNECTION, LOW); Serial.begin(9600); while (!Serial) { ; // attende la apertura del Monitor Seriale } // attende il collegamento alla rete WiFi: while ( status != WL_CONNECTED) { Serial.print("In attesa del collegamento alla rete WiFi: "); Serial.println(ssid); //stampa a Monitor Seriale l'SSID di rete status = WiFi.begin(ssid, pass); // connette alla rete WiFi con protocollo WPA/WPA2 delay(10000); // attende 10 secondi che la connessione si realizzi } server.begin(); // inizializza il web Server digitalWrite(pinLED_CONNECTION, HIGH); printWiFiStatus(); // stampa lo stato della connessione sul Monitor Seriale } void loop() { WiFiClient client = server.available(); // crea il client ed attende la loro connessione in rete if (client) { // se c'è richiesta da parte di un client Serial.println(); Serial.println("----------------------------------------------"); Serial.println("new client"); // stampa un messaggio sul Monitor Seriale String currentLine = ""; // creo una Stringa entro la quale memorizzare i dati del client while (client.connected()) { // da qui le cose che farà mentre il client è connesso if (client.available()) { // se ci sono dati in arrivo (richieste del client) char c = client.read(); // leggo un byte Serial.write(c); // li stampo sul Monitor Seriale if (c == '\n') { // se il byte è "nuova linea" significa che sono terminati i dati del client // essendo finita la HTTP request del client, invio una risposta html: if (currentLine.length() == 0) { // HTML Header per far capire al client che tipo di dati restituisco: client.println("<!DOCTYPE html>"); client.println("<html>"); client.println("<head>"); client.println("<title>Controllo accensione/spegnimento LED con Arduino MKR1000</title>"); client.println("</head>"); client.println(); client.println("<body>"); client.println("<table width='100%' border='0' cellspacing='0' cellpadding='0' align='center'>"); client.println("<tr height='200'><td></td><td></td><td></td></tr>"); client.print("<tr><td></td><td>"); client.print("Clicka <a href=\"/H\">QUI</a> per accendere il LED<br>"); client.print("Clicka <a href=\"/L\">QUI</a> per spegnere il LED"); client.println("</td><td></td></tr>"); client.println("</table>"); client.println("</body>"); client.println("</html>"); client.println(); break; // essendo terminata la trasmissione della pagina Html esco dal while } else { // se il byte è una "nuova linea" resetto la Stringa currentLine = ""; } } else if (c != '\r') { // se la risposta è il carattere di Ritorno a capo (e non Nuova linea), currentLine += c; // lo aggiungo in coda alla stringa } // verifico se la richiesta del client fu /H o /L: if (currentLine.endsWith("GET /H")) { digitalWrite(pinLED_OUT, HIGH); // se /H accendo il LED } if (currentLine.endsWith("GET /L")) { digitalWrite(pinLED_OUT, LOW); // se /L spengo il LED } } } client.stop(); // chiudo la connessione Serial.println("client disconnesso"); } } void printWiFiStatus() { // stampo l'SSID della rete a cui sono collegato: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // stampo l'IP Address assegnato alla scheda wifi: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // stampo la potenza del segnale wifi: long rssi = WiFi.RSSI(); Serial.print("Potenza segnale (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); // stampo l'indirizzo da copiare/incollare nel browser per visualizzare la pagina: Serial.print("Per visualizzare la pagina web in azione inserire nel browser il seguente indirizzo: http://"); Serial.println(ip); }
-
WEB SERVER Visualizzazione Distanza Sensore Ultrasuoni SR04
/* WiFi Web Server per la Misurazione della Distanza di un oggetto Questo sketch realizza un semplice Web Server con MKR1000. Il programma dopo la connessione wifi stampa sul Monitor Seriale l'IP Address dell'Arduino in rete. Inserendo questo IP nel browser è possibile visualizzare il valore acquisito dall'Arduino. Il sensore di Distanza ad Ultrasuoni è l'SR04. I pin utilizzati in Arduino sono: Echo -> 6 Trigger -> 7 */ #include <WiFi101.h> char ssid[] = "xxxxxxxxxxxxxxxxxxxxx"; char pass[] = "xxxxxxxxxxxxxxxxxxxxx"; const int pinLED_CONNECTION = 6; const int pinEcho = 7; const int pinTrigger = 8; unsigned long lunghezzaImpulso = 0; unsigned long distanza = 0; int status = WL_IDLE_STATUS; WiFiServer server(80); void setup() { pinMode(pinEcho, INPUT); pinMode(pinTrigger, OUTPUT); pinMode(pinLED_CONNECTION, OUTPUT); digitalWrite(pinLED_CONNECTION, LOW); Serial.begin(9600); while (!Serial) { ; // attende la apertura del Monitor Seriale } // attende il collegamento alla rete WiFi: while ( status != WL_CONNECTED) { Serial.print("In attesa del collegamento alla rete WiFi: "); Serial.println(ssid); //stampa a Monitor Seriale l'SSID di rete status = WiFi.begin(ssid, pass); // connette alla rete WiFi con protocollo WPA/WPA2 delay(10000); // attende 10 secondi che la connessione si realizzi } server.begin(); // inizializza il web Server digitalWrite(pinLED_CONNECTION, HIGH); printWiFiStatus(); // stampa lo stato della connessione sul Monitor Seriale } void loop() { digitalWrite(pinTrigger, HIGH); delayMicroseconds(10); digitalWrite(pinTrigger, LOW); lunghezzaImpulso = pulseIn(pinEcho, HIGH); distanza = lunghezzaImpulso/58; WiFiClient client = server.available(); // crea il client ed attende la loro connessione in rete if (client) { // se c'è richiesta da parte di un client Serial.println(); Serial.println("----------------------------------------------"); Serial.println("nuovo client"); String currentLine = ""; // creo una Stringa dove memorizzare i dati del client connesso while (client.connected()) { // entro in un ciclo while dal quale usciremo solo a termine connessione del client if (client.available()) { // se ci sono dati in arrivo (richieste del client) char c = client.read(); // leggo un byte Serial.write(c); // lo stampo sul Monitor Seriale if (c == '\n') { // se il byte è "nuova linea" significa che sono terminati i dati del client // essendo finita la HTTP request del client, invio una risposta html: if (currentLine.length() == 0) { client.println("<!DOCTYPE html>"); client.println("<html>"); client.println("<head>"); client.println("<meta http-equiv='refresh' content='1'>"); client.println("<title>Lettura valori SR04 con Arduino MKR1000</title>"); client.println("</head>"); client.println(); client.println("<body>"); client.println("<table width='100%' border='0' cellspacing='0' cellpadding='0' align='center'>"); client.println("<tr height='200'><td></td><td></td><td></td></tr>"); client.print("<tr><td></td><td align='center'>"); client.print("Il valore della Distanza é di: <strong>"); client.print(distanza); client.print("</strong>cm"); client.println("</td><td></td></tr>"); client.println("</table>"); client.println("</body>"); client.println("</html>"); client.println(); break; // essendo terminata la trasmissione della pagina Html esco dal while } else { // se il byte è una "nuova linea" resetto la Stringa currentLine = ""; } } else if (c != '\r') { // se la risposta è il carattere di Ritorno a capo (e non Nuova linea), currentLine += c; // lo aggiungo in coda alla stringa } } } client.stop(); //chiudo la connessione Serial.println("client disconnesso"); } } void printWiFiStatus() { // stampo l'SSID della rete a cui sono collegato: Serial.print("SSID: "); Serial.println(WiFi.SSID()); // stampo l'IP Address assegnato alla scheda wifi: IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // stampo la potenza del segnale wifi: long rssi = WiFi.RSSI(); Serial.print("Potenza segnale (RSSI):"); Serial.print(rssi); Serial.println(" dBm"); // stampo l'indirizzo da copiare/incollare nel browser per visualizzare la pagina: Serial.print("Per visualizzare la pagina web in azione inserire nel browser il seguente indirizzo: http://"); Serial.println(ip); }
Link correlati: