Arduino o ESP32? Differenze, confronto e quale scegliere
Arduino o ESP32? Confronta Uno ed ESP32 per velocità, RAM, Wi-Fi, 5 V/3,3 V, ADC, pin e batteria, più confronto con Pico, codice comune e scelta per progetto.
Arduino o ESP32? La risposta breve è questa: se il tuo progetto ha bisogno di Wi-Fi, Bluetooth, internet o di molta potenza di calcolo, scegli l'ESP32; se stai imparando le basi dell'elettronica, vuoi usare sensori e moduli a 5 V senza problemi e seguire ogni tutorial alla lettera, scegli l'Arduino Uno. Entrambe le schede si programmano nell'Arduino IDE con gli stessi comandi digitalWrite, analogRead e Serial. La vera differenza è nell'hardware: velocità, memoria, tensione di lavoro, pin e connessione wireless.
In questa guida confrontiamo con numeri reali l'Arduino Uno R3 e la scheda ESP32 più diffusa, l'ESP32 DevKit (con modulo ESP-WROOM-32): cosa cambiano in pratica processore e memoria, quali moduli risentono della differenza tra 5 V e 3,3 V, come cambiano lettura analogica e PWM e quante ore dura ciascuna con una batteria. Poi eseguiremo lo stesso sketch su entrambe le schede, faremo un breve confronto con il Raspberry Pi Pico e riassumeremo in una tabella quale scheda scegliere per ogni tipo di progetto.

Risposta breve: quale scegliere e quando?
| La tua situazione | Scheda consigliata | Perché? |
|---|---|---|
| Sei alle prime armi con l'elettronica | Arduino Uno | 5 V, pin robusti, più esempi e corsi |
| Ti servono Wi-Fi o internet | ESP32 | Wi-Fi integrato, nessun modulo in più |
| Collegamento Bluetooth con lo smartphone | ESP32 | Bluetooth classico e BLE integrati |
| Userai moduli e shield a 5 V | Arduino Uno | Nessun traslatore di livello |
| Display, molti LED, tanti dati | ESP32 | 520 KB di RAM (l'Uno ne ha 2 KB) |
| Sensore che dura mesi a batteria | ESP32 (scheda a basso consumo) | Circa 10 µA in deep sleep |
| Programmare in Python | Raspberry Pi Pico | Supporto MicroPython molto maturo |
| Budget minimo | ESP32 o Pico | Molte più funzioni al prezzo di un clone dell'Uno |
Cosa sono Arduino Uno ed ESP32?
L'Arduino Uno R3 è la scheda più famosa della piattaforma Arduino, nata in Italia. Il suo cuore è il microcontrollore a 8 bit ATmega328P a 16 MHz. La scheda lavora a 5 V e la disposizione dei pin è la stessa da anni, per questo centinaia di shield (schede di espansione da innestare sopra), libri e corsi sono compatibili. Il suo design semplice ti fa vedere esattamente cosa succede: quando scrivi HIGH su un pin, lì ci sono davvero 5 V. Il nuovo Uno R4 ha un processore Arm a 32 bit da 48 MHz e 32 KB di RAM, e la versione R4 WiFi aggiunge sulla scheda un ESP32-S3 per la connessione wireless; in questo articolo, con "Uno" intendiamo l'R3, ancora il più diffuso. Per conoscere meglio la piattaforma, leggi Cos'è Arduino?.

L'ESP32, invece, è un system-on-chip (SoC) a 32 bit lanciato da Espressif nel 2016, con Wi-Fi e Bluetooth sullo stesso chip. La scheda che hai in mano è una scheda di sviluppo che porta questo chip: ci sono un convertitore USB-seriale, un regolatore a 3,3 V e i pulsanti EN e BOOT. Un dettaglio importante: l'ESP32 non è un Arduino, ma grazie al core Arduino di Espressif si programma nell'Arduino IDE proprio come se lo fosse. Per l'installazione e i primi progetti, Cos'è l'ESP32? è un buon punto di partenza.
La grande tabella di confronto: Arduino Uno, ESP32 e Raspberry Pi Pico
| Caratteristica | Arduino Uno R3 | ESP32 DevKit (WROOM-32) | Raspberry Pi Pico |
|---|---|---|---|
| Processore | ATmega328P, AVR a 8 bit | Xtensa LX6, 32 bit, dual core | RP2040, Arm Cortex-M0+ a 32 bit, dual core |
| Frequenza di clock | 16 MHz | Fino a 240 MHz | 133 MHz |
| RAM (SRAM) | 2 KB | 520 KB | 264 KB |
| Memoria programma (flash) | 32 KB (0,5 KB per il bootloader) | Di solito 4 MB | 2 MB |
| EEPROM | 1 KB | No (emulata nella flash) | No (file system nella flash) |
| Livello logico | 5 V | 3,3 V (non tollera 5 V) | 3,3 V (non tollera 5 V) |
| Alimentazione | USB 5 V o 7–12 V (jack/VIN) | USB 5 V o 5 V su VIN | USB 5 V o 1,8–5,5 V su VSYS |
| GPIO utilizzabili | 20 (14 digitali + 6 analogici) | Circa 25 (esclusi i pin limitati) | 26 |
| Ingressi analogici (ADC) | 6 canali, 10 bit | 18 canali, 12 bit (con Wi-Fi attivo solo ADC1) | 3 canali, 12 bit |
| Uscita analogica (DAC) | No | 2 canali, 8 bit | No |
| PWM | 6 pin, 8 bit, 490/980 Hz | 16 canali, frequenza regolabile, su quasi ogni pin | 16 canali, su tutti i GPIO |
| Wi-Fi | No | 802.11 b/g/n, 2,4 GHz | No (presente sul Pico W) |
| Bluetooth | No | Bluetooth 4.2: classico + BLE | No (presente sul Pico W) |
| UART / I2C / SPI | 1 / 1 / 1 | 3 / 2 / 2 (disponibili all'utente) | 2 / 2 / 2 |
| Corrente per pin | 20 mA consigliati (max 40 mA) | Circa 20 mA consigliati | 4 mA di default (regolabile fino a 12 mA) |
| Consumo tipico della scheda | Circa 45 mA | Media 50–130 mA con Wi-Fi, picchi di 240 mA | Circa 25 mA |
| Sonno più profondo | Chip sotto 1 µA, scheda circa 30 mA | Chip circa 10 µA in deep sleep | Scheda in modalità dormant circa 1 mA |
| Programmazione | Arduino C/C++ | Arduino C/C++, ESP-IDF, MicroPython | MicroPython, SDK C/C++, Arduino |
| Prezzo indicativo | Originale 25–30 $, clone 5–10 $ | DevKit clone 4–8 $ | 4 $ (Pico W 6 $) |
Processore e memoria: cosa significano i numeri in pratica?
Il processore dell'Uno esegue circa 16 milioni di istruzioni al secondo e lavora su numeri a 8 bit alla volta; un'operazione a 32 bit con long o float richiede decine di istruzioni e manca un'unità in virgola mobile (FPU) hardware. L'ESP32 gira a 240 MHz su numeri a 32 bit e ha una FPU a precisione singola. Per questo, in un calcolo pieno di float, l'ESP32 può essere decine o addirittura centinaia di volte più veloce dell'Uno. Per far lampeggiare un LED o leggere un sensore qualche volta al secondo non te ne accorgi, ma la differenza diventa decisiva per filtri, elaborazione audio, crittografia o animazioni per centinaia di LED. Un piccolo consiglio: la FPU dell'ESP32 lavora solo con i float; le operazioni con double vengono eseguite via software e sono molto più lente.
La differenza di memoria la incontrerai molto più spesso. I 2 KB di RAM dell'Uno sono condivisi tra le tue variabili, i buffer di Serial e lo spazio riservato dalle librerie. Quando la RAM finisce, il compilatore di solito non avvisa; il programma si blocca a caso o si comporta in modo strano. Situazioni tipiche in cui l'Uno resta presto senza RAM:
- Display OLED: il solo buffer video di un display SSD1306 128×64 occupa 1 KB, metà della RAM (vedi Display OLED).
- LED indirizzabili: ogni LED WS2812B occupa 3 byte; una striscia da 300 LED richiede 900 byte (vedi WS2812B NeoPixel).
- Dati da internet: il JSON restituito da un servizio meteo può pesare diversi KB; nell'Uno non entra, l'ESP32 lo gestisce senza fatica.
- Concatenare String: gli oggetti String che crescono in un ciclo frammentano la poca RAM e possono causare un blocco ore dopo.
- Scheda SD: la libreria SD riserva un buffer di settore da 512 byte; insieme alle librerie per display e sensori si arriva presto al limite.
La differenza di tensione: 5 V e 3,3 V
È la differenza che si trascura più spesso. I pin dell'Uno lavorano con logica a 5 V: un'uscita HIGH vale 5 V e gli ingressi sopra i 3 V vengono letti come HIGH. I pin dell'ESP32 lavorano con logica a 3,3 V e non tollerano i 5 V. Applicare 5 V a un pin forse non uccide subito l'ESP32, ma sollecita i diodi di protezione interni e può distruggere il chip col tempo o all'improvviso. Al contrario il problema è minore: l'HIGH a 3,3 V dell'ESP32 supera di poco la soglia di 3 V dell'Uno e di solito viene letto come HIGH, ma non è comunque un progetto sicuro. Ecco come si comportano i moduli più comuni con le due schede:
| Modulo | Con Arduino Uno | Con ESP32 | Nota |
|---|---|---|---|
| Sensore di distanza HC-SR04 | Diretto | Partitore di tensione sulla linea ECHO | Il pin ECHO esce a 5 V |
| Modulo relè a 5 V | Diretto | Quasi tutti funzionano, alcuni non si spengono | Nei moduli attivi bassi un HIGH a 3,3 V può non rilasciare del tutto il relè |
| Servo SG90 | Diretto | Segnale diretto, alimentazione a 5 V | Non alimentare il servo dal pin 3V3 della scheda |
| DHT11 / DHT22 | Diretto | Diretto a 3,3 V | Funziona con entrambe le tensioni |
| LCD I2C (16x2) | Diretto | Alimentazione a 5 V, consigliato un traslatore di livello | Le resistenze di pull-up del modulo portano le linee a 5 V |
| OLED SSD1306 | Diretto | Diretto (3V3) | Ha un regolatore sulla scheda |
| Striscia WS2812B | Diretto | Di solito funziona | Per andare sul sicuro, un traslatore di livello come il 74AHCT125 |
| MPU6050 (GY-521) | Diretto | Diretto (3V3) | Ha un regolatore a 3,3 V sulla scheda |
Pin, lettura analogica e PWM
Sull'Uno i 20 pin si comportano più o meno allo stesso modo: ognuno può essere ingresso o uscita, fornisce senza problemi fino a 20 mA e non influisce sull'avvio. L'ESP32 DevKit ha più pin sulla carta, ma non sono tutti uguali: i GPIO 6–11 sono collegati alla flash interna e non si possono usare, i GPIO 34–39 sono solo ingressi e i GPIO 0, 2, 5, 12 e 15 devono avere certi livelli all'avvio. In pratica puoi usare comodamente circa 20–25 pin. La piedinatura della tua scheda è nello strumento Pinout.
Nella lettura analogica, l'ADC a 10 bit dell'Uno divide l'intervallo 0–5 V in 1024 passi; ogni passo vale circa 4,9 mV e la lettura è abbastanza lineare. L'ADC a 12 bit dell'ESP32 offre 4096 passi, ma con l'impostazione predefinita non distingue i valori sotto circa 0,15 V e sopra 3,1 V, è rumoroso e i pin ADC2 non funzionano affatto con il Wi-Fi attivo. Se ti serve una tensione precisa, sull'ESP32 usa analogReadMilliVolts() e collega il sensore ai pin ADC1 (GPIO 32–39). Nel PWM vince l'ESP32: l'Uno offre PWM a 8 bit solo su 6 pin a 490 o 980 Hz, mentre l'ESP32 può portare 16 canali con frequenza e risoluzione regolabili su quasi ogni pin di uscita. Ha anche 2 DAC (GPIO 25 e 26) che generano una vera tensione analogica. Per le basi del PWM leggi Cos'è il PWM?.
Lo stesso sketch su entrambe le schede: cosa cambia?
La buona notizia: tutto ciò che hai imparato su Arduino vale anche per l'ESP32. Lo sketch qui sotto legge un potenziometro, scrive la tensione nel Monitor seriale e accende il LED della scheda quando il valore supera la metà. La riga #if defined(ESP32) capisce per quale scheda si sta compilando e cambia solo il numero del pin, la tensione di riferimento e la risoluzione dell'ADC. Collega i terminali esterni del potenziometro a 5V e GND sull'Uno, oppure a 3V3 e GND sull'ESP32; il centrale va su A0 nell'Uno o su GPIO 34 nell'ESP32, poi apri il Monitor seriale a 115200 baud. Le principali differenze al di fuori del codice sono nella tabella.
1// Aynı kod Uno ve ESP32'de çalışır / The same sketch runs on Uno and ESP32
2#if defined(ESP32)
3const int LED_PIN = 2; // DevKit dahili LED / DevKit onboard LED
4const int POT_PIN = 34; // ADC1 pini, Wi-Fi ile de çalışır / ADC1 pin, works with Wi-Fi too
5const float VREF = 3.3; // ESP32 pinleri 3,3 V / ESP32 pins are 3.3 V
6const int ADC_MAX = 4095; // 12 bit
7#else
8const int LED_PIN = 13; // Uno dahili LED / Uno onboard LED
9const int POT_PIN = A0;
10const float VREF = 5.0; // Uno referansı 5 V / Uno reference is 5 V
11const int ADC_MAX = 1023; // 10 bit
12#endif
13
14void setup() {
15 Serial.begin(115200);
16 pinMode(LED_PIN, OUTPUT);
17}
18
19void loop() {
20 int raw = analogRead(POT_PIN);
21 float volts = raw * VREF / ADC_MAX;
22 Serial.print("Ham / raw: ");
23 Serial.print(raw);
24 Serial.print(" Gerilim / voltage: ");
25 Serial.println(volts, 2);
26 digitalWrite(LED_PIN, raw > ADC_MAX / 2 ? HIGH : LOW); // yarıdan fazlaysa LED yanar / LED on above half
27 delay(250);
28}| Argomento | Arduino Uno | ESP32 |
|---|---|---|
| LED integrato | Pin 13 | GPIO 2 nella maggior parte dei DevKit cloni (assente sul DevKitC di Espressif) |
| Intervallo di analogRead | 0–1023 (10 bit) | 0–4095 (12 bit) |
| Interrupt esterni (attachInterrupt) | Solo pin 2 e 3 | Quasi tutti i pin (aggiungi IRAM_ATTR alla funzione di interrupt) |
| Seconda porta seriale | Serve SoftwareSerial | Serial2 hardware (GPIO 16 e 17) |
| EEPROM | EEPROM vera, 1 KB | Nella flash; EEPROM.commit() o Preferences |
| Caricamento | Un clic | Alcune schede richiedono di premere BOOT |
| Tempo di compilazione | Pochi secondi | La prima compilazione può richiedere un minuto |
Wi-Fi, Bluetooth e internet
Ciò che distingue davvero l'ESP32 è la connessione wireless. La scheda si collega alle reti Wi-Fi a 2,4 GHz, può creare un proprio access point, esegue un web server, invia dati a un sistema domotico tramite MQTT, prende l'ora da internet con NTP e può aggiornare il firmware senza fili (OTA). Sul fronte Bluetooth supporta sia il Bluetooth classico (profilo porta seriale) sia il BLE a basso consumo, e con ESP-NOW più ESP32 possono comunicare anche senza router. Niente di tutto questo è integrato nell'Uno: per il Bluetooth serve un modulo come l'HC-05, per il Wi-Fi un chip separato come l'ESP-01 e i comandi AT. Lo sketch qui sotto legge lo stesso potenziometro, stavolta via Wi-Fi: apri l'indirizzo mostrato nel Monitor seriale nel browser di uno smartphone collegato alla stessa rete e vedrai la tensione in millivolt; la pagina si aggiorna da sola ogni due secondi.
1#include <WiFi.h>
2#include <WebServer.h>
3
4const char* ssid = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
5const char* password = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
6const int POT_PIN = 34; // ADC1 pini / ADC1 pin
7
8WebServer server(80);
9
10void handleRoot() {
11 uint32_t mv = analogReadMilliVolts(POT_PIN); // kalibre edilmiş mV / calibrated mV
12 String html = "<meta name='viewport' content='width=device-width'>"
13 "<meta http-equiv='refresh' content='2'>"
14 "<h1>ESP32</h1><p>Pot: ";
15 html += mv;
16 html += " mV</p>";
17 server.send(200, "text/html", html);
18}
19
20void setup() {
21 Serial.begin(115200);
22 WiFi.begin(ssid, password);
23 while (WiFi.status() != WL_CONNECTED) delay(500);
24 Serial.print("Telefonda aç / open on your phone: http://");
25 Serial.println(WiFi.localIP());
26 server.on("/", handleRoot);
27 server.begin();
28}
29
30void loop() {
31 server.handleClient();
32}Consumi e funzionamento a batteria
Sulla carta l'ESP32 è allo stesso tempo la scheda che consuma di più e quella che consuma di meno. Quando trasmette in Wi-Fi assorbe picchi fino a 240 mA; per questo su una porta USB debole si riavvia con l'errore "Brownout detector was triggered". In deep sleep, invece, il chip consuma solo circa 10 µA. La scheda Uno assorbe circa 45 mA senza fare nulla; anche con l'ATmega328P addormentato, il chip USB-seriale, il regolatore e il LED di alimentazione continuano a consumare circa 30 mA. Facciamo un esempio: una batteria da 2000 mAh alimenta un Uno sempre acceso per circa 2000 / 45 ≈ 44 ore. Un ESP32 con il Wi-Fi sempre attivo (100 mA in media) dura circa 20 ore. Ma se l'ESP32 si sveglia ogni 10 minuti per 3 secondi, invia una misura a 120 mA e dorme a 10 µA per i restanti 597 secondi, la corrente media è (3 × 120 + 597 × 0,01) / 600 ≈ 0,61 mA e la stessa batteria dura in teoria oltre 3000 ore, cioè più di quattro mesi. Per ottenerlo serve una scheda a basso consumo o un modulo nudo; il regolatore e il chip USB dei DevKit standard consumano qualche mA anche in sleep. Puoi calcolare il tuo caso con lo strumento Durata batteria.
E il Raspberry Pi Pico dove si colloca?
La terza opzione valida è il Raspberry Pi Pico. Il suo chip RP2040 ha due core Cortex-M0+ a 133 MHz, 264 KB di RAM e 2 MB di flash, e costa circa 4 dollari. Come l'ESP32 lavora a 3,3 V e offre 26 GPIO, ma ha solo 3 ingressi analogici. I suoi punti di forza sono il supporto MicroPython molto maturo, il caricamento semplice del firmware perché sul computer appare come una chiavetta USB, e le unità chiamate PIO, che generano protocolli con temporizzazione precisa senza impegnare il processore. Se vuoi il wireless, scegli il Pico W (Wi-Fi e Bluetooth); per più potenza, il Pico 2 con chip RP2350. Trovi i dettagli in Cos'è il Raspberry Pi Pico?. La stessa lettura del potenziometro sul Pico in MicroPython si scrive così (centrale su GP26, terminali esterni su 3V3 e GND):
1from machine import ADC, Pin
2import time
3
4pot = ADC(26) # GP26 = ADC0, potansiyometre orta ucu / pot wiper
5led = Pin("LED", Pin.OUT) # dahili LED (Pico ve Pico W) / onboard LED (Pico and Pico W)
6
7while True:
8 raw = pot.read_u16() # 0–65535 (12 bit ölçüm ölçeklenir / 12-bit reading, scaled)
9 volts = raw * 3.3 / 65535
10 print("Ham / raw:", raw, " Gerilim / voltage: {:.2f}".format(volts))
11 led.value(raw > 32767) # yarıdan fazlaysa yanar / on above half
12 time.sleep(0.25)Prezzo e facilità di apprendimento
Il prezzo da solo raramente decide. Un Uno R3 originale costa circa 25–30 $, mentre i cloni con chip USB CH340 si trovano a 5–10 $; i DevKit ESP32 cloni costano 4–8 $ e il Pico 4 $. Tra un ESP32 e un clone dell'Uno la differenza di prezzo è quindi quasi nulla; il costo vero sta negli extra: usare moduli a 5 V con l'ESP32 richiede qualche resistenza o un traslatore di livello da 1–2 $, e aggiungere il Wi-Fi all'Uno richiede un modulo separato. Sul fronte dell'apprendimento vince l'Uno: scegli la scheda e premi Carica, i messaggi di errore e gli esempi sono gli stessi da anni e con i moduli a 5 V non ci sono problemi di livelli. Con l'ESP32 devi prima installare il pacchetto di schede di Espressif e, se serve, il driver del chip USB (CP2102 o CH340), scegliere il modello di scheda giusto e, su alcune schede, tenere premuto BOOT durante il caricamento; inoltre una parte degli esempi online è stata scritta per versioni vecchie del core e potrebbe non compilare (nel core 3.x, per esempio, ledcAttach sostituisce ledcSetup). Sono ostacoli che si superano in poche ore, ma se monti i tuoi primi circuiti, sull'Uno è più facile capire se un problema dipende dal codice o dai collegamenti.
Quale scheda per quale progetto?
| Progetto | Scheda ideale | Perché? |
|---|---|---|
| Prime lezioni con LED, pulsanti e buzzer | Arduino Uno | Perdona gli errori, 5 V, tanti esempi |
| Auto robot (L298N, HC-SR04) | Arduino Uno | Compatibile diretto con i moduli a 5 V |
| Stazione meteo Wi-Fi | ESP32 | Invia i dati allo smartphone e a internet |
| Domotica con relè | ESP32 | Web, MQTT e assistenti vocali |
| Telecomando Bluetooth dallo smartphone | ESP32 | BLE e Bluetooth classico integrati |
| Sensore remoto a batteria | ESP32 (scheda a basso consumo) | Deep sleep e brevi invii Wi-Fi |
| Imparare Python | Raspberry Pi Pico | MicroPython ha supporto prioritario |
| Centinaia di LED indirizzabili | ESP32 o Pico | Tanta RAM, processore veloce |
| Trasmissione di immagini con fotocamera | ESP32-CAM | Fotocamera e slot microSD sulla scheda |
| Shield motori e shield a 5 V | Arduino Uno | Gli shield seguono la piedinatura dell'Uno |
Errori comuni e falsi miti
- "L'ESP32 è sempre meglio": è più potente, ma pin a 3,3 V, pin che influenzano l'avvio, pulsante BOOT e cali di tensione possono scoraggiare un principiante. Per imparare le basi, l'Uno riserva meno sorprese.
- Collegare un sensore a 5 V direttamente all'ESP32: collegare senza partitore segnali a 5 V, come l'uscita ECHO dell'HC-SR04, può danneggiare il pin.
- Leggere un pin ADC2 con il Wi-Fi attivo: i GPIO 0, 2, 4, 12–15 e 25–27 non leggono valori analogici mentre il Wi-Fi è in funzione; sposta il sensore su GPIO 32–39.
- Dimenticare la RAM dell'Uno: se il codice compila ma la scheda si blocca a caso, forse la RAM è finita; metti i testi fissi dentro F("...") ed evita di concatenare String nei cicli.
- Alimentare l'ESP32 con un USB debole: se la scheda si riavvia quando parte il Wi-Fi, usa un buon cavo dati e un alimentatore da almeno 1 A.
- Confondere Pico e Pico W: il Pico normale non ha il Wi-Fi; per un progetto wireless compra il modello con la W nel nome.
In breve, l'Arduino Uno è la scheda per imparare, l'ESP32 quella per connettersi e il Raspberry Pi Pico quella per sperimentare con Python. Se ti chiedi quale modello della famiglia Arduino fa per te, dai un'occhiata a Quale Arduino comprare?. Nell'app BlueGrays trovi decine di progetti per Arduino, ESP32 e Pico, dal LED lampeggiante al web server Wi-Fi e dall'orologio NTP al display meteo, ognuno con schema elettrico e codice passo dopo passo.
Domande frequenti
L'ESP32 è meglio di Arduino?
Per potenza, memoria e connessione wireless sì: l'ESP32 gira a 240 MHz e ha 520 KB di RAM, Wi-Fi e Bluetooth. Ma per i pin a 3,3 V, i GPIO limitati e l'avvio più complesso, l'Arduino Uno riserva meno sorprese ai principianti. Quale sia migliore dipende da ciò che serve al tuo progetto.
Si può programmare l'ESP32 con l'Arduino IDE?
Sì. Dopo aver aggiunto all'Arduino IDE il pacchetto di schede esp32 di Espressif, programmi l'ESP32 con i comandi Arduino. Funzioni come pinMode, digitalWrite, analogRead, Serial e Wire funzionano allo stesso modo; cambiano soprattutto i numeri dei pin e i livelli di tensione.
Il codice Arduino funziona sull'ESP32?
La maggior parte del codice funziona con piccole modifiche. Devi adattare i numeri dei pin all'ESP32, tenere conto che analogRead restituisce 0–4095 e sostituire il codice che accede ai registri specifici dell'AVR o librerie come SoftwareSerial con gli equivalenti per ESP32.
Si può aggiungere il Wi-Fi ad Arduino Uno?
Sì: un modulo come l'ESP-01 (ESP8266) si usa tramite la porta seriale con i comandi AT, oppure puoi comprare l'Uno R4 WiFi. L'ESP-01 però richiede alimentazione a 3,3 V e conversione di livello, e i 2 KB di RAM dell'Uno faticano con le attività web. Per questo nella maggior parte dei casi usare direttamente un ESP32 è più semplice ed economico.
Arduino o Raspberry Pi Pico?
Per restare nell'ecosistema Arduino con C/C++, lavorare con moduli a 5 V e trovare più esempi è più adatto l'Arduino Uno; per programmare in Python, spendere poco e avere temporizzazioni precise con il PIO, scegli il Raspberry Pi Pico. Poiché il Pico lavora a 3,3 V, bisogna fare attenzione ai segnali a 5 V come con l'ESP32.
L'ESP32 si può usare con sensori a 5 V?
Se il sensore funziona anche a 3,3 V, la soluzione più semplice è alimentarlo dal pin 3V3. Per i sensori che funzionano solo a 5 V e hanno uscita a 5 V, metti un partitore di tensione o un traslatore di livello sulla linea di uscita. Applicare 5 V direttamente ai pin dell'ESP32 può danneggiare il chip.
Progetti da realizzare dopo questo articolo
Vedi tutti i progetti
Illuminazione a LED
Progetto di input di base che accende e spegne un singolo LED a determinati intervalli con Arduino. Insegna l'uso delle funzioni digitalWrite e delay.

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 LED Integrato Raspberry Pi Pico (GP25 LED Onboard)
Il progetto di apertura della serie Raspberry Pi Pico! Facciamo lampeggiare il LED integrato (LED verde collegato a GP25) per verificare che la scheda funzioni — un classico primo esperimento "Hello World". NESSUN componente esterno, solo Pico e cavo USB. Il codice è scritto in **MicroPython** (il linguaggio ufficialmente supportato dalla Raspberry Pi Foundation). Impara la classe `machine.Pin`, la modalità `Pin.OUT`, i metodi `led.on()/off()` e `time.sleep()` in Thonny IDE. Segui ogni commutazi

Temperatura e umidità con DHT11
Progetto che misura il valore della temperatura e dell'umidità ambientale con un sensore DHT11 e lo visualizza su uno schermo LCD I2C. Insegna l'uso del sensore digitale di temperatura/umidità.

Luminosità di un LED con Potenziometro su ESP32 (Analogico → PWM)
In questo progetto controlliamo in modo analogico la luminosità di un LED tramite un potenziometro. Il pin ADC dell'ESP32 legge la tensione tra 0 e 3,3 V dal potenziometro; il valore viene convertito in un segnale PWM (Pulse Width Modulation) e inviato al LED. Ruotando il potenziometro, il LED si accende e si spegne gradualmente. Con Arduino Core 3.0+ si usa direttamente `analogWrite()`; su ESP32-S2/S3 la risoluzione dell'ADC è fissata a 12 bit.

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). Collegandovi dall'interfaccia web all'indirizzo IP dell'ESP32 con `/control` e premendo i pulsanti, potrete accendere e spegnere il LED collegato al G

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
Altri articoli
Scopri con i numeri le vere differenze tra Arduino Uno ed ESP32: velocità, memoria, tensione, lettura analogica, Wi-Fi e durata della batteria. Esegui lo stesso sketch su entrambe le schede, confrontale con il Pico e scegli quella giusta per il tuo progetto.

