Impariamo a configurare la ESP32 in modo che funzioni come un Access Point e permetta a dispositivi dotati di connessione WiFi di connettersi ad essa
Tra le diversi applicazioni della ESP32 vediamo quella che ci permette di creare un Access Point a cui connettersi da PC o smartphone e interagire con la dev-board. A differenza del Web Server, creeremo uno nostra rete WiFi senza accesso a Internet.
Componenti
Oltre alla ESP32-WROOM-32 che abbiamo già visto QUI, avremo bisogno di un comunissimo LED, una resistenza da 220OHM e una breadboard per i collegamenti. Configureremo la ESP32 come Access Point a cui connetterci tramite WiFi e gestire tramite un browser, in modo da accendere e spegnere il led. Vi ricordiamo che per caricare lo sketch su questa ESP32 sarà necessario adoperare un condensatore da 10μF che utilizzeremo per ponticellare il pin GND e il pin EN. Questa accortezza servirà per entrare nella Program Mode.
Lista componenti su Amazon:
- ESP32: https://amzn.to/2QD2fNG
Lista componenti su Aliexpress:
Collegamenti
Oltre al collegamento tra la ESP32 e il condensatore elettrolitico, non si richiedono collegamenti, ad eccezione del collegamento al led con il pin digitale 2. Quando configuriamo la ESP32 come Access Point, i collegamenti a sensori o attuatori sono solo relativi alle finalità del progetto che vogliamo realizzare.
Codice
La ESP32 richiede alcune librerie per funzionare come Access Point, che troviamo già incluse nella IDE a non ci sarà bisogno di scaricarle. Potete scaricare lo sketch completo a questo LINK. Le prime due librerie sono la WiFi.h e la WiFiClient.h per abilitare la connessione WiFi e permettere ai Client di adoperarla, mentre la terza libreria è la WiFiAP.h per abilitare tale funzionalità alla ESP32. Definiamo poi il pin a cui è connesso il LED, impostiamo il nome della rete WiFi che stiamo creando e la relativa password. Concludiamo con la porta 80 per il protocollo HTTP.
#include <WiFi.h> #include <WiFiClient.h> #include <WiFiAP.h> #define LED 2 // Il led è collegato al pin D2 const char *ssid = "ESP32-WiFi"; const char *password = "fattelodasolo"; WiFiServer server(80);
Nel VOID SETUP indichiamo la direzione del pin 2, avviamo il monitor seriale e procediamo avviando la modalità AP, ottenendo poi l’indirizzo IP (192.168.4.1) che sarà stampando a monitor seriale e avviamo il server.
pinMode(LED, OUTPUT); // direzione del pin 2 Serial.begin(9600); WiFi.softAP(ssid, password); IPAddress myIP = WiFi.softAPIP(); // ottengo IP Serial.print("AP IP address: "); Serial.println(myIP); // stampo su seriale l'IP dell'access point server.begin(); // avvio server
Nel VOID LOOP il nostro Access Point ormai configurato ascolterà se ci sono richieste da nuovi client e, se ne trova una stampa su monitor seriale, creando una stringa vuota chiamata currentLine. Si apre un ciclo While alla connessione del client. Si controlla se arrivano byte dal client che poi vengono letti e stampati su monitor seriale. Se il byte ricevuto corrisponde alla nuova linea (\n) e se la linea successiva contiene è vuota, entrambe vengono interpretate come la fine della richiesta e si attende a questo punto la risposta.
WiFiClient client = server.available(); if (client) { Serial.println("Nuovo Client!"); String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n') { if (currentLine.length() == 0) <wp-p style="text-align: justify;">
La risposta si apre con l’intestazione HTTP e con il contenuto della risposta, che creerà due righe di testo contenti un collegamento ipertestuale per accendere e spegnere il LED al pin 2.
client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.print("Clicca <a href=\"/H\">qui</a> per accendere il LED.<br>"); client.print("Clicca <a href=\"/L\">qui</a> per spegnere il LED.<br>");
La risposta si conclude con una nuova linea e si interrompe il ciclo While aperto pocanzi. Inoltre, se si riceve un carattere di fine linea (\r) si aggiunge alla fine della stringa currentLine che nel frattempo è stata ripulita.
client.println(); break; } else { currentLine = ""; } } else if (c != '\r') { currentLine += c;
Controlliamo ora la risposta del Client che provvederà ad accendere o spegnere il LED.
if (currentLine.endsWith("GET /H")) { digitalWrite(LED, HIGH); // GET /H LED on } if (currentLine.endsWith("GET /L")) { digitalWrite(LED, LOW); // GET /L LED off }
Chiudiamo poi la connessione con il Client.
client.stop();
Finalmente è giunto il momento di caricare il codice sulla ESP32. Riavviamola e apriamo lo smartphone, dove comparirà la rete ESP32-WiFi. Inseriamo la password scelta per il nostro Access Point e apriamo il browser all’indirizzo 192.168.4.1.
Clicchiamo su una delle due opzioni per accendere o spegnere il LED.