Guide · 16 min di lettura

Percorso didattico IoT con ESP32: modulo di 8 settimane

Percorso didattico IoT con ESP32: tabella di 8 settimane, rete della scuola e hotspot, codice web server Wi-Fi, sicurezza, materiali per 8 gruppi e rubrica.

Per costruire un percorso didattico IoT con ESP32 alle superiori o in un istituto professionale, dividi il modulo in quattro livelli: prima la scheda percepisce l'ambiente (GPIO e sensori), poi si collega a una rete (Wi-Fi), poi condivide i dati (web server, client HTTP, messaggi) e infine impara a funzionare a batteria e a proteggersi (deep sleep e sicurezza). Con due ore di lezione a settimana questi quattro livelli stanno comodamente in otto settimane: due settimane di hardware, due di rete e server, due di scambio di dati, una di energia e sicurezza e l'ultima per il progetto finale. Alla fine gli studenti consegnano un dispositivo che legge un sensore, mostra la misura su una pagina aperta dal telefono o invia un messaggio al telefono quando succede qualcosa, con l'autonomia calcolata e senza la password in chiaro nel codice.

Questo articolo prosegue il piano della prima lezione con ESP32; installazione, driver, pulsante BOOT e primo LED sono spiegati lì e qui non si ripetono. Qui trovi una tabella settimana per settimana con obiettivo, vero progetto BlueGrays, concetto e risultato, una struttura settimanale di 80 minuti, perché la rete della scuola quasi mai fa entrare l'ESP32 e come risolvere, cinque domande per l'ufficio tecnico, il codice compilabile di un web server Wi-Fi, una sezione su sicurezza ed etica, una lista dei materiali per 8 gruppi e i criteri del progetto finale. Gli esempi partono da questa ipotesi: hai 24 studenti in 8 gruppi da tre e due ore di lezione a settimana (2 × 40 minuti di lavoro effettivo). Se la tua classe è diversa, adatta i tempi in proporzione.

Fotoresistenza LDR per misurare la luce in una lezione di IoT con ESP32
Il sensore comune del modulo: la LDR letta nella settimana 2 compare nella settimana 4 su una pagina web aperta dal telefono.

La logica del modulo: percepire, collegare, condividere, risparmiare

Una lezione sull'Internet delle cose (IoT) non insegna Internet in sé, ma come un dispositivo parla con gli altri dispositivi di una rete. Per questo serve prima qualcosa da misurare: una scheda che si collega al Wi-Fi ma non misura nulla non ha niente da dire in rete. Per questo le prime due settimane sono volutamente senza Wi-Fi: gli studenti lavorano con un pulsante, una LDR e un sensore di temperatura e umidità e consolidano la scelta dei pin e l'intervallo di lettura. Nella terza settimana la scheda entra in rete, nella quarta diventa server, nella quinta diventa un client che chiede dati a un altro server, nella sesta segnala un evento con un messaggio. La settima settimana è dedicata a due temi che la maggior parte dei laboratori IoT brevi salta: l'autonomia della batteria e la sicurezza. Ogni livello poggia sul precedente, quindi non cambiare l'ordine; se la settimana del Wi-Fi va male, risolvi il problema di connessione prima di andare avanti.

Prerequisito: prima di iniziare il modulo ogni gruppo dovrebbe aver caricato codice su un ESP32 almeno una volta. Se la tua classe non è ancora a quel punto, fai prima la prima lezione con ESP32; tenere fuori dalla settimana del Wi-Fi i problemi di driver, pacchetto schede e porta è il più grande risparmio di tempo di tutto il modulo.

Il percorso IoT con ESP32 in 8 settimane

Ogni progetto della tabella è pronto in BlueGrays con schema, elenco dei componenti e codice. I progetti delle prime quattro settimane, compresi quelli di connessione Wi-Fi e web server, sono completamente gratuiti; i progetti di client HTTP, Telegram, WebSocket e deep sleep usati dalla settimana 5 sono Premium. Quindi nel primo mese nessuno studente ha bisogno di Premium; cosa fare quando serve lo trovi alla fine dell'articolo.

SettimanaObiettivoProgetto BlueGraysConcettoRisultato
1Leggere un ingresso e comandare un'uscitaControllo LED ESP32 con pulsante (Push), Controllo LED ESP32 con pulsante (Toggle) (Gratis)GPIO, INPUT_PULLUP, ingresso e uscita digitali, variabile di statoUn LED acceso e spento con un pulsante e la mappa dei pin del gruppo
2Misurare l'ambienteLettura dell'intensità luminosa con il modulo LDR ESP32, ESP32 DHT22 Temperatura e umidità (con display LCD) (Gratis)Lettura analogica (12 bit, 0–4095), ADC1 e ADC2, I2C, librerie, intervallo di letturaTabella di 10 letture di luce nel monitor seriale, temperatura e umidità sul display LCD
3Collegare la scheda alla reteConnessione Wi-Fi STA con ESP32 (con display LCD) (Gratis)Modalità stazione (STA), SSID, indirizzo IP, RSSI (dBm), WiFi.status(), riconnessioneIP, indirizzo MAC e intensità del segnale annotati nel registro di rete
4Trasformare la scheda in serverServer web asincrono ESP32 (con indicazione dell'IP sul display LCD) (Gratis) e il codice di questo articoloWeb server, richiesta e risposta HTTP, porta 80, percorsi (/, /on, /off)Una pagina che accende un LED dal telefono e mostra il valore di luce
5Trasformare la scheda in clientESP32 HTTPClient + API meteo (con schermo LCD), ESP32: ora reale da Internet tramite NTP (Premium)Client HTTP, richiesta GET, codici di stato (200, 404), JSON, ora con NTPMeteo o ora presi da Internet; lettura della misura del gruppo vicino
6Segnalare un evento con un messaggioSistema di Allarme Movimento ESP32 (PIR + Buzzer + LED + Telegram), Contatore WebSocket ESP32 (2 pulsanti + LCD + Web in tempo reale) (Premium)Notifiche, token del bot, HTTPS, WebSocket, l'idea di publish-subscribe (MQTT)Un messaggio sul telefono quando viene rilevato un movimento o una pagina che si aggiorna da sola
7Funzionare a batteria e proteggere il dispositivoESP32 Deep Sleep — Risparmio della batteria (OLED + contatore in RTC RAM) (Premium)Deep sleep, sorgenti di risveglio, memoria RTC, corrente media, password in un file separatoCalcolo dell'autonomia e progetto con la password spostata in secrets.h
8Progetto finaleScelta del gruppo, per esempio ESP32 DHT22 Temperatura e umidità (con display LCD) con la pagina web della settimana 4Unire i concetti, documentare, presentareDispositivo funzionante, presentazione di 3 minuti, registro di rete

Tre note sulla tabella. Primo, nell'app non c'è un progetto MQTT pronto; nella settimana 6 spiega MQTT come concetto alla lavagna (i dispositivi non si parlano direttamente, ma pubblicano messaggi con un argomento, il topic, su un server intermediario, il broker, e chi è interessato si iscrive a quell'argomento) e fai la parte pratica con la notifica Telegram e la pagina WebSocket. I dettagli su Telegram sono nell'articolo bot Telegram con ESP32. Secondo, il progetto Async Web Server della settimana 4 richiede le librerie AsyncTCP ed ESPAsyncWebServer; installale su ogni computer prima della lezione, altrimenti la compilazione si ferma alla prima riga. Terzo, l'esercizio con il gruppo vicino della settimana 5 non richiede Internet: l'ESP32 del gruppo A legge l'indirizzo /deger sul server che il gruppo B ha costruito nella settimana 4. Se la scuola non ha accesso a Internet, quella settimana funziona lo stesso.

Quando scegli il pin del sensore nella settimana 2, pensa già alle settimane del Wi-Fi. I pin dell'ESP32 sul canale ADC2 (GPIO0, 2, 4, 12–15 e 25–27) non possono fare letture analogiche con il Wi-Fi attivo; un potenziometro che funziona benissimo su GPIO4 nella settimana 2 darà sempre lo stesso valore sbagliato nella settimana 4. Collega i sensori analogici ai pin ADC1 (GPIO32–39) fin dall'inizio; è anche il motivo per cui il progetto LDR dell'app usa GPIO34.

La struttura settimanale: 80 minuti

Seguire ogni settimana la stessa struttura fa sì che gli studenti spendano energia sul concetto nuovo e non per abituarsi a una nuova routine. Se puoi mettere le due ore una dopo l'altra, il flusso qui sotto funziona in un unico blocco; altrimenti in due metà da 40 minuti, e in quel caso non smontare il circuito alla fine della prima ora, riponilo montato nella scatola. Il registro di rete è una scheda di una pagina tenuta da ogni gruppo: data, indirizzo IP della scheda, indirizzo MAC, intensità del segnale, errore incontrato e come è stato risolto. Dalla settimana 3 in poi metà del debug si fa guardando questo registro.

MinutiFaseCosa si fa?
0–10RiscaldamentoSi discute la domanda di uscita della settimana precedente, i gruppi aprono il registro di rete, si distribuiscono le scatole.
10–20ConcettoL'unico concetto della settimana si disegna alla lavagna: nella settimana 4 un telefono, un ESP32 e le frecce di richiesta e risposta tra i due.
20–30Lettura del codiceSi proietta il progetto della settimana, si leggono insieme il riassunto e la spiegazione passo dopo passo della scheda Capire il codice, gli studenti prevedono l'output.
30–55Montaggio e caricamentoI gruppi montano il circuito, caricano il codice e vedono il primo output nel monitor seriale. Il gruppo bloccato da più di 3 minuti riceve un kit di ricambio.
55–70Cambiare una cosaOgni gruppo cambia una sola cosa: intervallo di aggiornamento, testo della pagina, soglia o durata del sonno. La modifica si annota nel registro di rete.
70–80ChiusuraSi risponde per iscritto alla domanda di uscita, il circuito si smonta o si ripone montato nella scatola, si contano i pezzi.

La realtà della rete scolastica: perché l'ESP32 non entra nel Wi-Fi della scuola

La maggior parte dei moduli IoT si blocca per la rete, non per il codice. L'ESP32 classico funziona solo sulla banda dei 2,4 GHz; un access point che trasmette solo a 5 GHz non lo vede mai. Le reti scolastiche spesso non usano una password condivisa come a casa, ma un'autenticazione aziendale con nome utente e password (WPA2-Enterprise); l'ESP32 può gestirla con codice aggiuntivo, ma bisognerebbe scrivere nel codice la password personale di uno studente o di un insegnante, cosa inaccettabile in classe. Le reti ospiti aprono una pagina di accettazione nel browser dopo la connessione (captive portal); l'ESP32 non ha schermo né browser, non può superare quella pagina e sembra connesso ma non raggiunge mai Internet. Alcune scuole accettano solo dispositivi con l'indirizzo MAC registrato in anticipo. L'ultima trappola è la meno nota: le reti ospiti di solito isolano i dispositivi tra loro (isolamento dei client). In quel caso l'ESP32 si collega e mostra perfino il suo indirizzo IP, ma il telefono sulla stessa rete non riesce a raggiungerlo e il web server della settimana 4 non si apre mai.

Tipo di reteL'ESP32 si collega?Per la settimana del web serverNota
Rete a 2,4 GHz con una sola password (WPA2-PSK)SìAdattaCome a casa; a scuola raramente è aperta agli studenti
Rete che trasmette solo a 5 GHzNo, non la vedeNon adattaSe non compare nell'elenco delle reti, controlla prima la banda
Rete aziendale con nome utente e password (WPA2-Enterprise)Tecnicamente possibile con codice aggiuntivoSconsigliataUna password personale finisce nel codice
Rete ospiti con pagina di accettazione (captive portal)Si collega ma non esce su InternetDi solito non adattaSpesso ha attivo anche l'isolamento dei client
Hotspot personale di un telefonoSì, se i 2,4 GHz sono attiviAdattaNumero limitato di dispositivi contemporanei
Router dedicato a 2,4 GHz non collegato alla rete della scuolaSìLa più adattaSe serve Internet, il collegamento si concorda con l'ufficio tecnico

La soluzione: hotspot del telefono o router dedicato

La soluzione più rapida è l'hotspot personale del tuo telefono. Su iPhone, attivando Massimizza compatibilità nelle impostazioni dell'Hotspot personale la trasmissione passa a 2,4 GHz; su Android scegli la banda a 2,4 GHz nelle impostazioni dell'hotspot. Così hai anche Internet, ma i telefoni accettano solo un numero limitato di dispositivi alla volta, e con 8 gruppi più i telefoni degli studenti il limite si riempie in fretta. Regola pratica: se gli 8 ESP32 si collegano al telefono dell'insegnante, gli 8 telefoni che apriranno il browser non devono collegarsi a un secondo telefono, perché telefono ed ESP32 devono stare sulla stessa rete. Per questo nelle settimane 3 e 4 collega 4 gruppi a un hotspot e gli altri 4 a un secondo hotspot, e fai provare ogni gruppo con un solo telefono.

Se ripeterai il modulo ogni anno, la soluzione stabile è un router a 2,4 GHz dedicato solo a queste lezioni. Il router funziona anche senza essere collegato alla rete della scuola; le settimane 3 e 4 e l'esercizio con il gruppo vicino si possono fare senza Internet, perché ESP32 e telefono sono sulla stessa rete locale. Internet serve solo nelle settimane 5 e 6 (meteo, NTP, Telegram); per quelle due settimane usa un hotspot o pianifica con l'ufficio tecnico il collegamento del router alla rete della scuola. Cambia nome e password della rete ogni anno scolastico e la password di amministrazione del router il primo giorno. Se non c'è alcuna rete fisica, nel codice dei progetti Wi-Fi dell'app il nome di rete predefinito è Wokwi-GUEST; lo stesso codice si può provare con questa rete nel simulatore Wokwi, dal browser. Fai all'ufficio tecnico queste cinque domande almeno due settimane prima dell'inizio:

  1. A scuola c'è una rete che trasmette a 2,4 GHz con una sola password condivisa (WPA2-PSK), e i dispositivi della classe possono usarla?
  2. La rete ospiti ha captive portal e isolamento dei client? Due dispositivi sulla stessa rete riescono a raggiungersi?
  3. I dispositivi vanno registrati in anticipo con il loro indirizzo MAC? Se sì, entro quando vi serve l'elenco delle 9 schede?
  4. Il regolamento della scuola consente di usare in laboratorio un router dedicato non collegato alla rete della scuola, o l'hotspot del telefono dell'insegnante?
  5. Se nelle settimane 5 e 6 gli ESP32 devono andare su Internet, quali connessioni lascia passare il firewall (siti web, server dell'ora, servizi di messaggistica)?

Il codice: un ESP32 che si collega al Wi-Fi e mostra un valore su una pagina

Il codice qui sotto è il cuore della settimana 4 e usa solo le librerie WiFi.h e WebServer.h incluse nel pacchetto schede ESP32, quindi non serve installare altro. Il circuito è quello della settimana 2: VCC del modulo LDR a 3V3, GND a GND, AO a GPIO34. GPIO34 è sull'ADC1, quindi si legge anche con il Wi-Fi attivo. Prima di caricarlo, sostituisci i due segnaposto AG_ADI (nome della rete) e AG_SIFRESI (password) con i dati della tua rete a 2,4 GHz, oppure sposta queste due righe in un file separato chiamato secrets.h, come farai nella settimana 7; se il codice trova quel file, lo usa.

C++ (Arduino IDE)
1// ESP32 Wi-Fi + web sunucu: LDR değerini tarayıcıda göster / ESP32 Wi-Fi + web server: show the LDR value in a browser
2#include <WiFi.h>
3#include <WebServer.h>
4
5// Ağ bilgileri: secrets.h varsa oradan gelir / Network credentials: taken from secrets.h if it exists
6#if __has_include("secrets.h")
7#include "secrets.h"
8#else
9const char* WIFI_SSID = "AG_ADI";       // 2,4 GHz ağın adı / Name of the 2.4 GHz network
10const char* WIFI_PASS = "AG_SIFRESI";   // Ağ şifresi / Network password
11#endif
12
13const int LDR_PIN = 34;   // ADC1 pini, Wi-Fi açıkken de okunur / ADC1 pin, still readable while Wi-Fi is on
14
15WebServer server(80);     // 80 numaralı portta web sunucu / Web server on port 80
16
17// Ana sayfa: ölçümü HTML olarak gönder / Home page: send the reading as HTML
18void handleRoot() {
19  int raw = analogRead(LDR_PIN);              // 0-4095 ham değer / Raw value 0-4095
20  int percent = map(raw, 4095, 0, 0, 100);    // Modülde ışık arttıkça değer düşer / On the module the value drops as light rises
21  String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>";
22  html += "<meta name='viewport' content='width=device-width'>";
23  html += "<script>setTimeout(() => location.reload(), 5000);</script>";   // 5 saniyede bir yenile / Reload every 5 s
24  html += "<title>ESP32 Grup 1</title></head><body>";
25  html += "<h1>Isik: %" + String(percent) + "</h1>";
26  html += "<p>Ham deger: " + String(raw) + "</p>";
27  html += "<p>Sinyal: " + String(WiFi.RSSI()) + " dBm</p>";
28  html += "</body></html>";
29  server.send(200, "text/html", html);        // 200 = istek başarılı / 200 = request OK
30}
31
32// Yalnız sayıyı döndüren adres / Address that returns only the number
33void handleValue() {
34  server.send(200, "text/plain", String(analogRead(LDR_PIN)));
35}
36
37void setup() {
38  Serial.begin(115200);
39  analogReadResolution(12);                   // 12 bit: 0-4095
40  WiFi.mode(WIFI_STA);                        // İstasyon modu: var olan ağa katıl / Station mode: join an existing network
41  WiFi.begin(WIFI_SSID, WIFI_PASS);
42  Serial.print("Baglaniliyor / Connecting");
43  unsigned long start = millis();
44  while (WiFi.status() != WL_CONNECTED && millis() - start < 20000) {   // En fazla 20 sn bekle / Wait up to 20 s
45    delay(500);
46    Serial.print(".");
47  }
48  if (WiFi.status() != WL_CONNECTED) {
49    Serial.println("\nBaglanamadi, yeniden basliyor / No connection, restarting");
50    delay(2000);
51    ESP.restart();
52  }
53  Serial.print("\nIP: ");
54  Serial.println(WiFi.localIP());             // Telefonda bu adresi aç / Open this address on the phone
55  server.on("/", handleRoot);                 // Ana sayfa: IP/ / Home page: IP/
56  server.on("/deger", handleValue);           // Yalnız sayı: IP/deger / Number only: IP/deger
57  server.begin();
58}
59
60void loop() {
61  server.handleClient();                      // Gelen istekleri karşıla / Serve incoming requests
62}

Dopo il caricamento apri il monitor seriale a 115200 baud. Quando i puntini finiscono compare la riga dell'IP, per esempio 192.168.43.57. Su un telefono collegato alla stessa rete dell'ESP32 apri il browser e scrivi questo indirizzo: la pagina mostra la percentuale di luce, il valore grezzo e l'intensità del segnale, e si ricarica da sola ogni 5 secondi. Copri la LDR con la mano e la percentuale scende. Se aggiungi /deger alla fine dell'indirizzo ottieni solo il numero grezzo; nella settimana 5 l'ESP32 del gruppo vicino leggerà proprio questo indirizzo con un client HTTP. Se la scheda non si collega entro 20 secondi si riavvia da sola, così nessuno pensa che sia bloccata. Se la connessione non arriva mai, l'articolo l'ESP32 non si connette al WiFi spiega il significato dei codici di stato.

Se il monitor seriale mostra l'indirizzo IP ma il telefono non apre la pagina, il problema è quasi sempre la rete, non il codice. Il telefono può essere in rete dati o su un'altra rete, oppure è attivo l'isolamento dei client. Controlla prima che il Wi-Fi del telefono sia sulla stessa rete dell'ESP32; se lo è e la pagina ancora non si apre, passa a un hotspot.

Sicurezza ed etica: la settimana da non saltare

In una lezione di IoT la sicurezza non si insegna con una presentazione a parte, ma come una modifica che gli studenti fanno nel proprio codice. In questo modulo maneggiano già segreti veri in tre punti: la password del Wi-Fi, il token del bot della settimana 6 e i dati che misurano. Dedica la seconda metà della settimana 7 a questi cinque punti e per ciascuno chiedi una modifica concreta nel progetto del gruppo:

  • Non scrivere le password nel codice: Sposta la password del Wi-Fi e il token del bot in un file separato chiamato secrets.h e lascialo fuori quando condividi il codice o fai uno screenshot. Una riga di codice sul proiettore significa che tutta l'aula conosce la password.
  • Cambia le password predefinite: Il pannello di amministrazione dei router, la modalità access point (AP) dell'ESP32 stesso e le password dei codici di esempio sono valori che conoscono tutti. Cambia il primo giorno la password del router della classe e chiedi agli studenti di non lasciare password di esempio nei progetti.
  • La tua pagina è aperta a tutta la rete: Il web server di questo articolo non ha una schermata di accesso; chiunque sulla stessa rete conosca l'indirizzo apre la pagina e, in un progetto con l'indirizzo /on, accende anche il LED. Per questo in classe via web si comandano solo uscite innocue come LED, buzzer e display; in questo modulo non si usano relè collegati alla tensione di rete (230 V).
  • Dati personali: Temperatura e luce non sono dati personali, ma un sensore di movimento che registra quando le persone passano in corridoio, una telecamera o un microfono possono diventarlo. Se un'idea di progetto finale registra movimenti, voce o immagini di persone, fai rispondere prima la classe: "Chi lo vede, per quanto tempo si conserva, è stato chiesto il consenso?"
  • Aggiornamenti e responsabilità: Un dispositivo collegato a Internet non si configura una volta e poi si dimentica. Mostra agli studenti che alla fine del modulo il router della classe viene spento, i token dei bot revocati e le schede ripristinate, e discutete di chi è responsabile di un dispositivo per tutto il suo ciclo di vita.

Lista dei materiali: per gruppo e per 8 gruppi

La lista è pensata per 24 studenti in 8 gruppi da tre; bastano 9 kit, uno di ricambio. La maggior parte dei pezzi si compra per le prime settimane e si riusa dopo; il display LCD, per esempio, compare in quattro progetti dalla settimana 2 alla 5. Non serve saldare; moduli come il display LCD I2C e l'OLED si collegano con cavetti jumper maschio-femmina. Se usi una LDR singola invece del modulo, aggiungi una resistenza da 10 kΩ per gruppo e montate insieme il partitore di tensione nella settimana 2.

MaterialePer gruppoPer la classe (8 gruppi + 1 di ricambio)Settimane d'uso
ESP32 DevKit (30 pin, ESP32-WROOM-32)191–8
Cavo USB dati (testato)1111–8
Breadboard (830 fori)2181–8
Pulsante2181, 6
LED da 5 mm e resistenza da 220 Ω3 + 330 + 301, 3, 4
Modulo LDR (con uscita AO)192, 4, 5
Sensore di temperatura e umidità DHT22192, 8
Display LCD 16x2 I2C192–5
Display OLED SSD1306 da 0,96 pollici (I2C)197
Sensore di movimento PIR (HC-SR501) e buzzer1 + 19 + 96
Cavetti jumper (maschio-maschio e maschio-femmina)20 + 10circa 180 + 901–8
Access point a 2,4 GHz (telefono con hotspot o router dedicato)-2 hotspot o 1 router3–8
Telefono o tablet con BlueGrays181–8

Valutazione: criteri del progetto finale

Tieni semplice la regola del progetto finale: un sensore, una connessione Wi-Fi e un modo per condividere (pagina web o messaggio). I gruppi scrivono la loro idea in una frase alla fine della settimana 6, fanno la lista dei materiali nella settimana 7, montano nella prima ora della settimana 8 e presentano tre minuti ciascuno nella seconda. Valuta con i sei criteri qui sotto; ognuno vale da 1 a 3 punti, 18 in totale. Per la logica generale della rubrica, la scheda di consegna e il portfolio puoi usare così com'è il modello dell'articolo rubrica di valutazione per le lezioni di Arduino.

Criterio1: Iniziale2: In sviluppo3: Raggiunto
Sensore e circuitoCircuito montato ma nessun valore o un valore senza sensoIl valore viene letto, la scelta del pin non è motivataValore letto correttamente, scelta di un pin ADC1 o digitale spiegata
Connessione Wi-FiSi collega solo con l'aiuto dell'insegnanteSi collega, ma il dispositivo si ferma se la connessione cadeSi collega, si riconnette dopo una caduta, IP e intensità del segnale annotati
Condivisione dei datiDati solo nel monitor serialeC'è una pagina o un messaggio, ma va aggiornato o inviato a manoLa pagina si aggiorna da sola o il messaggio parte da solo all'evento
Consapevolezza energeticaNessuno sa quanta corrente assorbe il dispositivoAutonomia calcolata senza considerare il sonnoCalcolo con sonno e intervallo di risveglio, risultato interpretato
Sicurezza ed eticaPassword in chiaro nel codicePassword in secrets.h, dati non discussiPassword in un file separato, dati raccolti e chi li vede messi per iscritto
Documentazione e presentazioneRegistro di rete incompleto, la presentazione è solo una demoRegistro di rete presente, gli errori incontrati non sono spiegatiRegistro di rete completo, un errore e la sua soluzione spiegati nella presentazione

Domande di uscita settimanali e checklist prima del modulo

  1. Settimana 1: Su un pin con INPUT_PULLUP, che valore restituisce digitalRead() mentre il pulsante è premuto, e perché?
  2. Settimana 2: Perché un potenziometro su GPIO4 non si può leggere con il Wi-Fi attivo? Quali pin conviene scegliere?
  3. Settimana 3: Se WiFi.status() dice che non c'è connessione, quali sono le prime due cose che controlli?
  4. Settimana 4: Perché l'indirizzo IP che hai scritto nel browser potrebbe essere diverso la settimana prossima?
  5. Settimana 5: Questa settimana il tuo ESP32 era server o client? Cosa indicano i codici di stato 200 e 404?
  6. Settimana 6: Cosa succede se il token del bot compare in uno screenshot? Qual è il compito del broker in MQTT?
  7. Settimana 7: Con la stessa batteria un ESP32 sempre acceso dura giorni, in deep sleep mesi. Cosa fa la differenza?
  8. Settimana 8: Quali dati raccoglie il tuo dispositivo, chi può vederli e per quanto tempo vengono conservati?
  • Due settimane prima del modulo: Fai le cinque domande all'ufficio tecnico e scegli tra hotspot e router in base alle risposte.
  • Due settimane prima del modulo: Conta le schede e scrivi l'indirizzo MAC di ciascuna sulla sua etichetta (se serve la registrazione, consegna l'elenco all'ufficio tecnico).
  • Una settimana prima del modulo: Installa su ogni computer il pacchetto schede ESP32 e le librerie DHT, LiquidCrystal I2C, AsyncTCP ed ESPAsyncWebServer; prova con una scheda.
  • Una settimana prima del modulo: Imposta l'hotspot a 2,4 GHz, cambia nome e password, collega un ESP32 e apri la sua pagina dal telefono.
  • Una settimana prima del modulo: Fotocopia una scheda del registro di rete per gruppo, prova sensori e display LCD e riponili nelle scatole.
  • Prima della settimana 5: Prepara i codici per i progetti Premium e spiega agli studenti quali loro dati vengono condivisi.

Il ruolo di BlueGrays nel modulo

  • Progetti ESP32: In Scopri › Progetti usa Filtra per scegliere la piattaforma ESP32; ci sono circa 50 progetti ESP32, dalla connessione Wi-Fi al deep sleep. Ognuno ha schema, elenco dei componenti con le quantità e codice sorgente da copiare. Copia link serve per aprire il codice sul computer.
  • Capire il codice: I minuti 20–30 di ogni settimana passano da questa scheda: il riassunto Cosa fa questo codice?, la spiegazione Passo dopo passo, Se ti blocchi e l'attività Prova tu. È gratuita sui progetti delle prime quattro settimane e si apre con Premium sui progetti Premium.
  • Strumento Pinout: Nello strumento Pinout, selezionando un pin dell'ESP32 si vedono il tipo e gli avvisi; per un pin dell'ADC2 indica che con il Wi-Fi attivo non può leggere valori analogici, per un pin dell'ADC1 che si legge anche con il Wi-Fi. Ideale sul proiettore quando si scelgono i pin nella settimana 2. Pinout è uno strumento Premium.
  • Strumento Durata batteria: Nello strumento Durata batteria scegli il profilo ESP32 · deep sleep; inserendo capacità della batteria, corrente e tempo da sveglio, corrente in sonno e ciclo, calcola il tempo di funzionamento stimato e la corrente media. Il confronto "sempre acceso contro in sonno" della settimana 7 si fa su questa schermata. Lo strumento è Premium; senza Premium si vede un calcolo di esempio.
  • Pacchetti Educatore: Dalla settimana 5 servono progetti Premium, quindi un account per gruppo dovrebbe avere Premium. Un pacchetto annuale da 10 codici copre 8 gruppi e l'insegnante; è un pagamento unico, non si rinnova, gli studenti non aggiungono nessuna carta, vedi chi ha usato ogni codice in I Miei Codici e puoi trasferire i codici al gruppo dell'anno successivo. Un codice mensile da 30 giorni distribuito alla prima lezione della settimana 5 copre a malapena le ultime quattro settimane; se in mezzo ci sono vacanze, non basta. I dettagli sono nell'articolo codici Premium per tutta la classe.

Dopo otto settimane gli studenti non hanno solo un dispositivo che funziona, ma l'abitudine di chiedersi come un dispositivo parla in rete, perché non si collega, quanta energia consuma e di chi sono i dati che raccoglie, ed è proprio questo che cerca la formazione professionale. Se vuoi ripassare prima della lezione i progetti, gli schemi e le spiegazioni di Capire il codice di ogni settimana, ti basta aprire il filtro ESP32 nell'app BlueGrays.

Domande frequenti

Quante settimane deve durare un corso IoT con ESP32?

Con due ore a settimana, 8 settimane bastano per i concetti base dell'IoT, dal sensore e dal Wi-Fi al web server, alle notifiche e al deep sleep. Se hai una sola ora a settimana, allunga lo stesso piano a 12–14 settimane o unisci le settimane 5 e 6. Dedica al progetto finale almeno una lezione intera.

Si può fare IoT con ESP32 senza il Wi-Fi della scuola?

Sì. Finché ESP32 e telefono sono sulla stessa rete locale, il web server e le richieste tra dispositivi non hanno bisogno di Internet; basta un hotspot a 2,4 GHz sul telefono dell'insegnante o un router dedicato non collegato alla rete della scuola. Internet serve solo per servizi esterni come meteo, ora e Telegram.

Perché l'ESP32 non si collega al Wi-Fi della scuola?

L'ESP32 classico funziona solo a 2,4 GHz, quindi una rete che trasmette solo a 5 GHz non compare nemmeno. Le reti scolastiche usano spesso un'autenticazione aziendale con nome utente e password o un captive portal nel browser, e alcune accettano solo indirizzi MAC registrati. In questi casi la via più pratica è un hotspot o un router dedicato.

Perché non riesco ad aprire il web server dell'ESP32 dal telefono?

Il motivo più comune è che il telefono non è sulla stessa rete dell'ESP32: può essere in rete dati o su un altro Wi-Fi. Il secondo motivo è l'isolamento dei client nelle reti ospiti, dove i dispositivi della stessa rete non si raggiungono. Riprova l'indirizzo IP del monitor seriale con telefono ed ESP32 sullo stesso hotspot.

Bisogna insegnare MQTT in una lezione di IoT?

Non è indispensabile, ma va spiegato come concetto, perché la maggior parte dei sistemi IoT reali usa questo modello in cui i dispositivi si scambiano messaggi per argomento tramite un broker. In un modulo di 8 settimane basta consolidare prima il rapporto client-server con HTTP e presentare MQTT nella sesta settimana come idea di publish-subscribe.

I progetti ESP32 di BlueGrays sono gratuiti?

In parte. I progetti delle prime quattro settimane di questo piano, come pulsante, LDR, DHT22, connessione Wi-Fi e Async Web Server, sono completamente gratuiti. Client HTTP, Telegram, WebSocket e deep sleep sono Premium; per una classe si possono avere codici in blocco da Pacchetti Educatore, nel Profilo.

Vedi tutti i progetti
Connessione Wi-Fi STA con ESP32 (con display LCD)
#127Avanzato

Connessione Wi-Fi STA con ESP32 (con display LCD)

In questo progetto colleghiamo l'ESP32 alla rete Wi-Fi domestica in modalità Station (STA) in modo sicuro e tollerante agli errori. Separiamo SSID e password in un file secrets.h per impedire fughe su Git, impostiamo un meccanismo di riconnessione automatica e visualizziamo il livello del segnale RSSI e l'indirizzo IP su un display LCD I2C. Il LED interno funge da indicatore di stato.

4.4(21)
34
Server web asincrono ESP32 (con indicazione dell'IP sul display LCD)
#129Avanzato

Server web asincrono ESP32 (con indicazione dell'IP sul display LCD)

In questo progetto trasformiamo l'ESP32 in un server web asincrono che potrete controllare dal vostro telefono o computer collegato alla stessa rete Wi-Fi. Grazie alla libreria ESPAsyncWebServer, il server è in grado di elaborare più richieste contemporaneamente (a differenza del classico WebServer.h, che si blocca su una singola richiesta).

4.8(16)
26
Controllo LED ESP32 con pulsante (Push)
#104Principiante

Controllo LED ESP32 con pulsante (Push)

Il LED si accende quando il pulsante viene premuto e si spegne quando viene rilasciato. Mostra come vengono utilizzati il pin di ingresso digitale dell'ESP32 e la resistenza di pull-up interna. Grazie alla modalità INPUT_PULLUP, non è necessaria alcuna resistenza esterna.

4.6(36)
55
Lettura dell'intensità luminosa con il modulo LDR ESP32
#113Principiante

Lettura dell'intensità luminosa con il modulo LDR ESP32

Monitoraggio in tempo reale sul Serial Monitor del valore grezzo dell'ADC del modulo LDR e della percentuale relativa di luce calcolata dai valori di riferimento al buio e alla luce. Questa percentuale non è una misurazione in lux. Spiega il principio di calibrazione del modulo. È consigliabile eseguirlo prima del Progetto 10, poiché serve a determinare il valore di soglia.

4.6(36)
55
ESP32 DHT22 Temperatura e umidità (con display LCD)
#117Intermedio

ESP32 DHT22 Temperatura e umidità (con display LCD)

Si tratta di un progetto che misura la temperatura e l'umidità dell'ambiente tramite il sensore DHT22 e le visualizza in tempo reale su un display LCD I2C 16x2. I dati vengono letti dal sensore utilizzando il protocollo one-wire tramite la libreria Adafruit DHT. Questo progetto costituisce la base per stazioni meteorologiche IoT, sistemi di automazione domestica intelligente o sistemi di monitoraggio ambientale nelle serre. La comunicazione con il DHT22 avviene tramite il pin GPIO 4 dell'ESP32.

4.8(38)
56
ESP32 HTTPClient + API meteo (con schermo LCD)
#133Avanzato
Premium

ESP32 HTTPClient + API meteo (con schermo LCD)

In questo progetto, utilizzando l'ESP32, effettuiamo una chiamata REST all'API meteo (wttr.in) tramite Internet utilizzando HTTPClient.h. Analizziamo la risposta JSON restituita tramite ArduinoJson v7 e visualizziamo le informazioni relative a città, temperatura, umidità, condizioni meteorologiche e vento sul display LCD I2C sia in turco che in inglese. wttr.in è gratuito e non richiede una chiave API: basta digitare il nome di una città qualsiasi per ottenere le condizioni meteorologiche in t

4.7(13)
20
Sistema di Allarme Movimento ESP32 (PIR + Buzzer + LED + Telegram)
#145Avanzato
Premium

Sistema di Allarme Movimento ESP32 (PIR + Buzzer + LED + Telegram)

Un sistema di allarme di sicurezza intelligente che attiva buzzer e LED quando il sensore PIR rileva movimento, inviando contemporaneamente una notifica istantanea al proprietario tramite Telegram. Dispone di un tempo di attesa di 30 secondi per limitare la frequenza degli allarmi ripetuti; questo meccanismo non verifica la validità dei rilevamenti del sensore PIR né elimina le false attivazioni. Adatto a sicurezza domestica, monitoraggio di garage, magazzini o studi. Con l'ESP32-CAM è possibile

0.0(0)
9
ESP32 Deep Sleep — Risparmio della batteria (OLED + contatore in RTC RAM)
#135Avanzato
Premium

ESP32 Deep Sleep — Risparmio della batteria (OLED + contatore in RTC RAM)

La modalità Deep Sleep dell'ESP32 riduce il consumo di corrente a circa 10 µA spegnendo la CPU e la maggior parte dei dispositivi periferici ed è di fondamentale importanza per i dispositivi IoT alimentati a batteria. In questo progetto utilizziamo tre diverse fonti di risveglio: il timer (15 secondi), un pin esterno (EXT0 — pulsante GPIO 33) e il sensore tattile (T0/GPIO 4). Le variabili contrassegnate con RTC_DATA_ATTR vengono preservate durante la modalità Deep Sleep: il contatore di avvio,

4.3(10)
16