NodeMCU ESP8266: pinout, Arduino IDE e web server Wi-Fi
Cos'è il NodeMCU ESP8266: corrispondenza D1–D8 e GPIO, installazione in Arduino IDE, Wi-Fi, web server per un LED, limite 3,3 V e differenze con ESP32.
Il NodeMCU è una scheda di sviluppo economica che unisce il chip ESP8266 con Wi-Fi a una connessione USB, un regolatore a 3,3 V e pin adatti alla breadboard. Si programma con gli stessi comandi che conosci già dall'Arduino IDE e, da sola, può collegarsi alla rete di casa e offrire una pagina web da aprire sul telefono. Se vuoi portare online un sensore di temperatura, azionare un relè dal telefono o controllare una striscia LED in casa, il NodeMCU ESP8266 è uno dei punti di partenza più economici.
In questa guida vedrai passo dopo passo le caratteristiche del NodeMCU, la confusa corrispondenza tra D1–D8 e GPIO, quali pin influenzano l'avvio della scheda, l'installazione nell'Arduino IDE, la connessione al Wi-Fi e un web server che accende un LED dal telefono. Nelle ultime sezioni troverai le differenze tra ESP8266 ed ESP32 e le soluzioni agli errori più comuni.

Cosa sono l'ESP8266 e il NodeMCU?
L'ESP8266 è un microcontrollore a 32 bit con Wi-Fi integrato lanciato da Espressif nel 2014. Grazie al prezzo bassissimo ha reso popolari i progetti Wi-Fi nel mondo maker. Il nome NodeMCU indicava in origine un firmware basato su Lua scritto per questo chip e la relativa scheda di sviluppo open source; oggi è usato come nome generico per le schede con modulo ESP-12E. Quasi nessuno lo programma più in Lua: di solito si usano l'Arduino IDE o MicroPython.
| Caratteristica | Valore |
|---|---|
| Chip | ESP8266EX, Tensilica L106, 32 bit |
| Frequenza di clock | 80 MHz (portabile a 160 MHz) |
| RAM | Circa 80 KB di RAM utente (con il Wi-Fi connesso restano 40–50 KB per il programma) |
| Memoria flash | 4 MB (modulo ESP-12E) |
| Wi-Fi | 802.11 b/g/n, solo 2,4 GHz; station, access point o entrambi |
| Bluetooth | Assente |
| GPIO utilizzabili | Circa 11 (D0–D8, RX, TX) |
| Ingresso analogico | 1 canale (A0), 10 bit, circa 0–3,2 V sulla scheda |
| PWM | Software, 1 kHz di default, intervallo 0–255 |
| Tensione di lavoro | 3,3 V (alimentata a 5 V tramite USB o VIN) |
| Assorbimento | In media 70–80 mA con Wi-Fi connesso, fino a 170 mA in trasmissione |
In commercio ci sono due versioni comuni del NodeMCU. La V2 (Amica) è stretta, usa un convertitore USB-seriale CP2102 e, inserita nella breadboard, lascia libera una fila di fori su ogni lato. La V3 (LoLin) è più larga, usa un CH340G e copre quasi del tutto una breadboard standard, quindi con la V3 è molto più comodo lavorare con due breadboard affiancate. Entrambe le versioni hanno lo stesso pinout ed eseguono lo stesso codice. Se vuoi una scheda più piccola, la Wemos D1 Mini monta lo stesso chip e funziona con gli stessi sketch.
Pinout del NodeMCU: corrispondenza tra D1–D8 e GPIO
La cosa più confusa del NodeMCU è che le etichette D stampate sulla scheda non corrispondono ai veri numeri GPIO del chip. Per esempio, il pin con la scritta D1 è in realtà il GPIO 5. Se nell'Arduino IDE scegli la scheda NodeMCU, puoi scrivere D1 nel codice e il compilatore lo trasforma automaticamente in 5; ma se scrivi digitalWrite(1, HIGH), stai comandando il GPIO 1, cioè il pin TX della porta seriale. In MicroPython si usa sempre il numero GPIO.
| Etichetta | GPIO | Funzione extra | Nota d'uso |
|---|---|---|---|
| D0 | GPIO 16 | Risveglio dal deep sleep | Niente interrupt; si collega a RST per il deep sleep |
| D1 | GPIO 5 | I2C SCL | Sicuro, uso generale |
| D2 | GPIO 4 | I2C SDA | Sicuro, uso generale |
| D3 | GPIO 0 | Pulsante FLASH | Se è LOW all'avvio, la scheda entra in modalità programmazione |
| D4 | GPIO 2 | LED integrato (logica invertita), TX1 | Deve essere HIGH all'avvio |
| D5 | GPIO 14 | SPI SCK | Sicuro, uso generale |
| D6 | GPIO 12 | SPI MISO | Sicuro, uso generale |
| D7 | GPIO 13 | SPI MOSI | Sicuro, uso generale |
| D8 | GPIO 15 | SPI CS | Deve essere LOW all'avvio; la scheda ha una resistenza pull-down |
| RX | GPIO 3 | UART RX | Lascialo libero mentre usi il monitor seriale |
| TX | GPIO 1 | UART TX | All'accensione invia i messaggi di avvio |
| A0 | ADC0 | Ingresso analogico | Solo lettura analogica, circa 0–3,2 V |
| SD2, SD3 | GPIO 9, 10 | Collegati alla memoria flash | Non usarli |
Secondo questa tabella, i pin che puoi usare senza pensieri nei primi progetti sono D1, D2, D5, D6 e D7. D3, D4 e D8, invece, determinano la modalità di avvio: quando arriva l'alimentazione, l'ESP8266 controlla i livelli di GPIO 0, GPIO 2 e GPIO 15 e, per un avvio normale, si aspetta GPIO 0 e GPIO 2 a HIGH e GPIO 15 a LOW. Se un pulsante, un relè o un sensore collegato a questi pin cambia il livello all'avvio, la scheda parte in modalità caricamento invece di eseguire il tuo programma, oppure non parte affatto. D3 e D4 si possono comunque usare per i pulsanti, perché all'avvio un pulsante non è premuto; tieni invece lontani da questi pin i moduli con l'uscita a LOW.
Anche il pin A0 è un caso particolare: l'ingresso analogico del chip ESP8266 misura solo 0–1 V, ma grazie al partitore da 220 kΩ e 100 kΩ presente sulla scheda NodeMCU puoi applicare ad A0 circa 0–3,2 V, e analogRead(A0) restituisce questo intervallo come 0–1023. Avendo un solo ingresso analogico, per usare più sensori analogici ti serve un ADC I2C come l'ADS1115. I pin D1 e D2 sono il bus I2C predefinito; le basi dell'I2C le trovi in Cos'è l'I2C?.
Installare l'ESP8266 nell'Arduino IDE
- Nell'Arduino IDE apri File > Impostazioni e aggiungi https://arduino.esp8266.com/stable/package_esp8266com_index.json nel campo «URL aggiuntive per il gestore schede».
- Apri Strumenti > Scheda > Gestore schede, cerca esp8266 e installa il pacchetto ESP8266 Community.
- Nel menu Strumenti > Scheda scegli NodeMCU 1.0 (ESP-12E Module). Se usi una Wemos D1 Mini, scegli invece LOLIN(WEMOS) D1 R2 & mini.
- Collega la scheda con un cavo dati e seleziona la porta in Strumenti > Porta. Se non compare nessuna porta, installa il driver CH340 per le schede V3 o il CP2102 per le V2.
- Lascia Upload Speed a 115200; quando il caricamento funziona senza problemi, puoi alzarla a 921600 per caricare più in fretta.
Primo sketch: far lampeggiare il LED integrato
Sul NodeMCU il modulo ESP-12E ha un LED blu collegato al GPIO 2 (D4); le schede V2 (Amica) hanno un secondo LED su D0. Questi LED funzionano con logica invertita: si accendono quando il pin è LOW e si spengono quando è HIGH. Nel core Arduino la costante LED_BUILTIN è già definita come 2:
1// NodeMCU dahili LED'i: GPIO2 (D4), ters mantık / onboard LED: GPIO2 (D4), inverted logic
2
3void setup() {
4 pinMode(LED_BUILTIN, OUTPUT);
5}
6
7void loop() {
8 digitalWrite(LED_BUILTIN, LOW); // LOW = yanar / LOW = on
9 delay(500);
10 digitalWrite(LED_BUILTIN, HIGH); // HIGH = söner / HIGH = off
11 delay(500);
12}Connettersi al Wi-Fi
Il vero punto di forza dell'ESP8266 è il Wi-Fi. Lo sketch seguente collega la scheda alla rete di casa in modalità station e scrive nel monitor seriale l'indirizzo IP assegnato dal router e l'intensità del segnale. Se non riesce a connettersi entro 20 secondi smette di aspettare e mostra un avviso. Sostituisci nome della rete e password con i tuoi e apri il monitor seriale a 115200 baud:
1#include <ESP8266WiFi.h>
2
3const char* ssid = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
4const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
5
6void setup() {
7 Serial.begin(115200);
8 Serial.println();
9 WiFi.mode(WIFI_STA); // istemci modu / station mode
10 WiFi.begin(ssid, password);
11 Serial.print("Baglaniyor / connecting");
12 unsigned long start = millis();
13 while (WiFi.status() != WL_CONNECTED) {
14 delay(500);
15 Serial.print('.');
16 if (millis() - start > 20000) { // 20 sn'de bağlanamazsa / give up after 20 s
17 Serial.println("\nBaglanamadi, ag adini ve sifreyi kontrol et / failed, check SSID and password");
18 return;
19 }
20 }
21 Serial.println();
22 Serial.print("IP: ");
23 Serial.println(WiFi.localIP()); // modemin verdiği adres / address given by the router
24 Serial.print("Sinyal / RSSI: ");
25 Serial.print(WiFi.RSSI()); // -50 iyi, -80 zayıf / -50 good, -80 weak
26 Serial.println(" dBm");
27}
28
29void loop() {
30}| Valore RSSI | Qualità del segnale | Cosa aspettarsi |
|---|---|---|
| Da -30 a -50 dBm | Ottima | Connessione stabile e veloce |
| Da -50 a -67 dBm | Buona | Sufficiente per un web server e i dati dei sensori |
| Da -67 a -80 dBm | Debole | Disconnessioni occasionali, pagine lente |
| Sotto -80 dBm | Molto debole | La connessione potrebbe non riuscire; avvicina la scheda al router |
Controllare un LED dal telefono: un semplice web server
Ora trasformiamo il NodeMCU in un piccolo web server. Collega un LED al pin D1 (GPIO 5) con una resistenza da 220 Ω: la gamba lunga del LED va a D1 attraverso la resistenza, quella corta a GND. Con un LED rosso questa resistenza dà una corrente di (3,3 V − 2 V) / 220 Ω ≈ 6 mA, ben sotto il limite del pin; per calcolare il valore adatto al tuo LED usa il Calcolatore resistenza LED. Dopo il caricamento apri l'indirizzo mostrato nel monitor seriale nel browser di un telefono collegato allo stesso Wi-Fi.
1#include <ESP8266WiFi.h>
2#include <ESP8266WebServer.h>
3#include <ESP8266mDNS.h>
4
5const char* ssid = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
6const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
7
8const int LED_PIN = D1; // GPIO5, 220 ohm direnç ile LED / LED through a 220 ohm resistor
9bool ledOn = false;
10
11ESP8266WebServer server(80);
12
13void handleRoot() {
14 String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>"
15 "<meta name='viewport' content='width=device-width,initial-scale=1'>"
16 "<title>NodeMCU</title></head>"
17 "<body style='font-family:sans-serif;text-align:center'>"
18 "<h1>NodeMCU LED</h1><p>LED: <b>";
19 html += ledOn ? "ACIK / ON" : "KAPALI / OFF";
20 html += "</b></p><p>A0: ";
21 html += analogRead(A0); // 0-1023 arası analog değer / analog value 0-1023
22 html += "</p><p><a href='/on'><button>AC / ON</button></a> "
23 "<a href='/off'><button>KAPAT / OFF</button></a></p></body></html>";
24 server.send(200, "text/html", html);
25}
26
27void setLed(bool on) {
28 ledOn = on;
29 digitalWrite(LED_PIN, on ? HIGH : LOW);
30 server.sendHeader("Location", "/"); // ana sayfaya yönlendir / redirect to the main page
31 server.send(303, "text/plain", "");
32}
33
34void setup() {
35 pinMode(LED_PIN, OUTPUT);
36 digitalWrite(LED_PIN, LOW);
37 Serial.begin(115200);
38 WiFi.mode(WIFI_STA);
39 WiFi.begin(ssid, password);
40 while (WiFi.status() != WL_CONNECTED) {
41 delay(500);
42 Serial.print('.');
43 }
44 Serial.println();
45 Serial.print("Tarayicida ac / open in browser: http://");
46 Serial.println(WiFi.localIP());
47
48 if (MDNS.begin("nodemcu")) { // http://nodemcu.local adresi / address http://nodemcu.local
49 MDNS.addService("http", "tcp", 80);
50 }
51
52 server.on("/", handleRoot);
53 server.on("/on", []() { setLed(true); });
54 server.on("/off", []() { setLed(false); });
55 server.onNotFound([]() { server.send(404, "text/plain", "Bulunamadi / not found"); });
56 server.begin();
57}
58
59void loop() {
60 server.handleClient(); // gelen istekleri işle / handle incoming requests
61 MDNS.update();
62}| Parte del codice | A cosa serve |
|---|---|
| ESP8266WebServer server(80) | Crea un server sulla porta 80 (HTTP) |
| server.on("/on", ...) | Accende il LED quando il browser richiede /on |
| sendHeader("Location", "/") e send(303) | Dopo l'azione reindirizza il browser alla pagina principale, così ricaricando la pagina il comando non viene inviato di nuovo |
| analogRead(A0) | Mostra sulla pagina il valore di A0; lì puoi collegare una LDR o un potenziometro |
| MDNS.begin("nodemcu") | Permette di raggiungere il dispositivo con il nome nodemcu.local invece dell'IP |
| server.handleClient() | Va chiamata di continuo in loop; gestisce le richieste in arrivo |
Se la pagina non si apre, assicurati che il telefono sia collegato alla stessa rete Wi-Fi del NodeMCU e non a una rete ospiti o ai dati mobili. Il nome nodemcu.local di solito funziona su computer e iPhone; alcuni telefoni Android non supportano mDNS, quindi lì dovrai usare l'indirizzo IP. Se al posto del LED colleghi un modulo relè, con lo stesso codice puoi comandare una vera lampada; trovi i dettagli in Cos'è un modulo relè?.
Modalità access point (AP): connessione senza router
Se nei dintorni non c'è Wi-Fi, il NodeMCU può creare una propria rete. In modalità access point colleghi il telefono direttamente alla rete NodeMCU-AP e la scheda risponde di solito all'indirizzo 192.168.4.1. Questa modalità è ideale per un impianto di irrigazione in giardino o uno strumento di misura usato all'aperto. Per unire il web server visto sopra a questa modalità basta usare le righe softAP al posto delle righe WiFi.begin; la modalità WIFI_AP_STA svolge entrambi i ruoli contemporaneamente. La password deve avere almeno 8 caratteri, altrimenti la rete non viene creata.
1#include <ESP8266WiFi.h>
2
3void setup() {
4 Serial.begin(115200);
5 WiFi.mode(WIFI_AP); // kendi ağını kur / create its own network
6 bool ok = WiFi.softAP("NodeMCU-AP", "12345678"); // ad ve en az 8 karakter şifre / name and 8+ char password
7 Serial.println(ok ? "AP hazir / AP ready" : "AP hatasi / AP error");
8 Serial.print("IP: ");
9 Serial.println(WiFi.softAPIP()); // genellikle 192.168.4.1 / usually 192.168.4.1
10}
11
12void loop() {
13 Serial.print("Bagli cihaz / stations: ");
14 Serial.println(WiFi.softAPgetStationNum());
15 delay(3000);
16}ESP8266 con MicroPython
Oltre che con il linguaggio Arduino, il NodeMCU si può programmare anche in MicroPython. Dopo aver caricato il firmware MicroPython sulla scheda con esptool, esegui il codice Python direttamente da un editor come Thonny. Dato che la memoria dell'ESP8266 è limitata, i programmi MicroPython più grandi possono dare errori di memoria, ma per semplici progetti Wi-Fi e con sensori è molto pratico. Ricorda che in MicroPython il numero del pin è il GPIO, non l'etichetta D:
1import network, time
2from machine import Pin
3
4led = Pin(2, Pin.OUT) # D4 = GPIO2, dahili LED / onboard LED
5wlan = network.WLAN(network.STA_IF)
6wlan.active(True)
7wlan.connect("AgAdi", "Sifre123") # Wi-Fi adı ve şifresi / Wi-Fi name and password
8
9while not wlan.isconnected():
10 time.sleep(0.5)
11print("IP:", wlan.ifconfig()[0])
12
13while True:
14 led.value(not led.value()) # ters mantık: 0 = yanar / inverted: 0 = on
15 time.sleep(0.5)ESP8266 o ESP32?
| Caratteristica | ESP8266 (NodeMCU) | ESP32 (DevKit) |
|---|---|---|
| Processore | Single core, 80/160 MHz | Dual core, 240 MHz |
| RAM | Circa 80 KB di RAM utente | 520 KB |
| Wi-Fi | 802.11 b/g/n, 2,4 GHz | 802.11 b/g/n, 2,4 GHz |
| Bluetooth | Assente | Classic e BLE |
| GPIO | Circa 11 | Circa 34 (alcuni solo ingresso) |
| Ingresso analogico | 1 canale, 10 bit | 18 canali, 12 bit |
| PWM | Software | PWM hardware a 16 canali (LEDC) |
| I2C e UART | I2C software, 1 UART completa più una UART1 solo TX | 2 I2C hardware, 3 UART |
| Pin touch e DAC | Assenti | 10 pin touch, 2 DAC |
| Prezzo | Più economico | Un po' più caro |
In sintesi, l'ESP8266 è ancora più che sufficiente per inviare in rete i dati di un sensore, azionare un relè dal telefono o servire una semplice pagina web, e costa meno. Per i nuovi progetti che richiedono Bluetooth, molti ingressi analogici, una fotocamera, molta potenza di calcolo o più attività contemporanee, l'ESP32 è la scelta migliore. Il codice si porta facilmente: spesso basta scrivere WiFi.h al posto di ESP8266WiFi.h, WebServer.h al posto di ESP8266WebServer.h ed ESPmDNS.h al posto di ESP8266mDNS.h, cancellare la riga MDNS.update() (sull'ESP32 non esiste) e usare i numeri GPIO invece delle etichette della scheda come D1. Per i dettagli leggi Cos'è l'ESP32? e Arduino o ESP32?.
Alimentazione e deep sleep
Il NodeMCU si alimenta a 5 V tramite USB o il pin VIN, e il regolatore sulla scheda porta la tensione a 3,3 V. Il picco di 170 mA durante la trasmissione Wi-Fi può far calare la tensione su una porta USB debole o con un cavo sottile e far riavviare la scheda da sola; usa quindi un buon cavo e un alimentatore da almeno 1 A. Nei progetti a batteria, ESP.deepSleep() mette il chip a dormire con circa 20 µA; perché possa risvegliarsi allo scadere del timer, devi collegare il pin D0 (GPIO 16) al pin RST. Il convertitore USB-seriale e il regolatore della scheda però continuano a consumare anche durante il sonno, per cui per una lunga autonomia danno risultati migliori un modulo ESP-12 nudo o schede a basso consumo. Per stimare la durata della batteria usa il Calcolatore durata batteria.
Idee di progetti con il NodeMCU
- Termometro Wi-Fi: Mostra temperatura e umidità misurate da un DHT11 su una pagina da aprire sul telefono.
- Presa smart: Accendi e spegni una lampada con un modulo relè e un pulsante su una pagina web.
- Avviso irrigazione: Collega un sensore di umidità del terreno ad A0 e mostra un avviso sulla pagina quando il terreno si secca.
- Striscia LED Wi-Fi: Scegli dal telefono colore ed effetto di una striscia WS2812B.
- Orologio internet: Prendi l'ora da un server NTP e mostrala su un display LCD I2C.
- Allarme di movimento: Invia un messaggio Telegram quando un sensore PIR rileva un movimento.
Errori comuni e soluzioni
| Sintomo | Causa probabile | Soluzione |
|---|---|---|
| La porta non compare | Cavo solo di ricarica o driver mancante | Usa un cavo dati; installa il driver CH340 o CP2102 |
| «Failed to connect to ESP8266: Timed out waiting for packet header» | La scheda non è riuscita a entrare in modalità caricamento | Tieni premuto FLASH, premi e rilascia RST, rilascia FLASH e poi riavvia il caricamento |
| La scheda non si avvia o si riavvia di continuo | Un circuito su D3, D4 o D8 altera i livelli di avvio | Sposta quel circuito su pin sicuri come D5, D6 o D7 |
| Caratteri strani nel monitor seriale | Velocità in baud sbagliata | Scegli la stessa velocità del codice; i messaggi di avvio sono a 74880 baud |
| Non si connette al Wi-Fi | Rete a 5 GHz, password errata o segnale debole | Usa una rete a 2,4 GHz, controlla maiuscole e minuscole, guarda l'RSSI |
| Il LED non si accende e il monitor seriale tace | Nel codice c'è 1 invece di D1 (GPIO 1 = TX) | Usa l'etichetta D1 o il GPIO 5 nel codice |
| Errore «Soft WDT reset» | Un ciclo dentro loop() che dura troppo | Aggiungi yield() o delay(1) nei cicli lunghi; entrambi lasciano spazio ai processi Wi-Fi in background e al watchdog |
Il NodeMCU ESP8266 è il modo più economico per portare ciò che hai imparato con Arduino nel mondo wireless: con poche righe di codice si collega alla rete di casa e ti permette di creare dispositivi da comandare con il telefono. Nell'app BlueGrays trovi progetti wireless su ESP32, come connessione Wi-Fi, web server, WebSocket, orologio NTP e mDNS, con schemi elettrici e codice passo dopo passo, e puoi adattare facilmente la stessa logica al tuo NodeMCU.
Domande frequenti
NodeMCU ed ESP8266 sono la stessa cosa?
ESP8266 è il nome del chip Wi-Fi prodotto da Espressif. Il NodeMCU è una scheda di sviluppo che aggiunge al modulo ESP-12E con quel chip una connessione USB, un regolatore e pin adatti alla breadboard. In breve, ogni NodeMCU è una scheda ESP8266, ma non ogni scheda ESP8266 è un NodeMCU; anche l'ESP-01 e la Wemos D1 Mini usano lo stesso chip.
Il NodeMCU funziona a 5 V?
La scheda si può alimentare a 5 V tramite USB o il pin VIN, e il regolatore porta la tensione a 3,3 V. I pin GPIO però lavorano a 3,3 V e ufficialmente non tollerano i 5 V. I segnali a 5 V vanno collegati tramite un partitore di tensione o un convertitore di livello.
A quale GPIO corrisponde D1 sul NodeMCU?
D1 è il GPIO 5 ed è il pin SCL predefinito dell'I2C. Altre corrispondenze comuni sono D2 = GPIO 4, D4 = GPIO 2, D5 = GPIO 14, D6 = GPIO 12, D7 = GPIO 13 e D8 = GPIO 15. Nell'Arduino IDE puoi scrivere direttamente D1 nel codice; in MicroPython devi usare il numero GPIO.
L'ESP8266 si collega al Wi-Fi a 5 GHz?
No, l'ESP8266 supporta solo reti 802.11 b/g/n nella banda a 2,4 GHz. Verifica che la banda a 2,4 GHz del router sia attiva; se le due bande condividono lo stesso nome, dare alla 2,4 GHz un nome separato spesso risolve i problemi di connessione.
Che differenza c'è tra NodeMCU V2 e V3?
La V2 (Amica) è più stretta, usa un convertitore USB-seriale CP2102 e lascia fori liberi su entrambi i lati della breadboard. La V3 (LoLin) è più larga e usa un CH340G. Pin, processore e codice sono identici; cambiano solo le dimensioni e il driver USB da installare.
L'ESP8266 ha il Bluetooth?
No, l'ESP8266 non ha hardware Bluetooth; supporta solo il Wi-Fi. Per i progetti che richiedono Bluetooth o BLE usa un ESP32 oppure aggiungi alla scheda un modulo Bluetooth separato come l'HC-05.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
LED Lampeggiante con ESP32
Insegna l'uso di base delle uscite GPIO con l'ESP32. Otteniamo un effetto lampeggiante accendendo e spegnendo un LED dal pin digitale. Versione ESP32 del classico progetto blink su Arduino UNO; la mappa dei pin e la sintassi rimangono le stesse, la differenza è solo nei numeri dei pin.

Lampeggio del LED interno dell'ESP32
Far lampeggiare il LED blu integrato nell'ESP32 DevKit V1. Non sono necessari componenti esterni! Il primo progetto da provare quando si acquista un ESP32. Il GPIO 2 è collegato al LED interno.

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.

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).

Contatore WebSocket ESP32 (2 pulsanti + LCD + Web in tempo reale)
In questo progetto due pulsanti collegati all'ESP32 (GPIO 5 incrementa, GPIO 4 decrementa) modificano un contatore. Il valore si aggiorna all'istante su un display LCD I2C 16x2 e, grazie al supporto WebSocket di ESPAsyncWebServer, in tutti i browser collegati senza ricaricare la pagina. Al posto del polling HTTP si usa un'unica connessione persistente e l'ESP32 invia il nuovo valore a tutti con ws.textAll().

ESP32 mDNS: accesso al dispositivo tramite bluegrays-esp.local (con schermo LCD)
In questo progetto, aggiungendo il servizio mDNS (Multicast DNS) all'ESP32, consentiamo l'accesso tramite un nome host leggibile, come `bluegrays-esp.local`, anziché tramite l'indirizzo IP. Anche se l'IP assegnato dal DHCP dovesse cambiare, potrete sempre raggiungere il dispositivo con lo stesso nome. Eseguendo anche un piccolo server web, inviamo comandi di controllo dei LED dal browser all’indirizzo `http://bluegrays-esp.local/`. Sul display LCD I2C vengono visualizzati il nome host, l’IP e lo

ESP32: ora reale da Internet tramite NTP
L'ESP32 si connette al Wi-Fi e recupera l'ora reale con precisione al millisecondo dai server NTP (Network Time Protocol). Grazie a `configTzTime()`, il fuso orario della Turchia (TRT, UTC+3) viene applicato automaticamente e il passaggio all'ora legale è gestito tramite la stringa POSIX TZ. L'ora viene mostrata sul Serial Monitor e su un display LCD I2C opzionale. Sincronizzata una volta all'avvio, poi l'RTC interno continua a contare.

Aggiornamento OTA dell'ESP32 — Installazione wireless del firmware (con display LCD)
In questo progetto imparerai a installare il nuovo firmware sull'ESP32 tramite Wi-Fi, senza bisogno di un cavo USB. Grazie alla libreria `ArduinoOTA`, l'ESP32 diventa visibile sulla rete e viene automaticamente elencato come `bluegrays-ota` nella scheda "Network port" dell'IDE di Arduino. Il primo caricamento avviene tramite USB, mentre tutti gli aggiornamenti successivi saranno wireless — una caratteristica fondamentale per i dispositivi sul campo. Sul display LCD I2C vengono visualizzati, sia
Altri articoli
Impara il pinout del NodeMCU ESP8266, scheda economica e diffusissima, installalo nell'Arduino IDE, collegalo al Wi-Fi e crea passo dopo passo un web server che accende un LED dal telefono; in più, le differenze con l'ESP32.

