Guide · 17 min di lettura

Arduino non carica lo sketch: errori avrdude, porta e driver

Lo sketch non si carica su Arduino? Soluzioni per avrdude not in sync, porta COM assente, driver CH340, Nano Old Bootloader, tasto BOOT dell'ESP32 e BOOTSEL.

Il tuo Arduino non carica lo sketch e nella finestra di output compare un errore rosso di avrdude? Niente panico: quasi mai significa che la scheda è guasta. Di solito la colpa è di un cavo USB che serve solo a caricare, un driver CH340 mancante, la scheda o la porta sbagliate, un modulo collegato ai pin 0 e 1 oppure un altro programma che tiene occupata la porta. Se controlli le cose nell'ordine giusto, nella maggior parte dei casi risolvi in pochi minuti; e anche se la scheda è davvero guasta, c'è un modo semplice per accertarlo.

In questa guida vedrai prima cosa succede dietro le quinte durante il caricamento e come leggere il messaggio di errore. Poi restringeremo il problema passo dopo passo con una tabella di diagnosi sintomo, causa e soluzione. Trattiamo anche l'impostazione ATmega328P (Old Bootloader) dell'Arduino Nano, il Monitor seriale e gli altri programmi che bloccano la porta, l'errore Failed to connect dell'ESP32 con il tasto BOOT e il metodo BOOTSEL e UF2 del Raspberry Pi Pico. Ogni sezione ha un breve sketch di prova per controllare la scheda una volta risolto il problema.

Scheda Arduino Uno R3
Arduino Uno: il piccolo chip accanto alla presa USB gestisce la comunicazione con il computer; le schede originali usano un ATmega16U2, i cloni quasi sempre un CH340. I LED TX, RX e L ti aiutano a seguire il caricamento.

Come funziona il caricamento: errore di compilazione o di caricamento?

Quando premi Carica succedono due cose distinte. Prima l'IDE compila il codice; se va tutto bene, la finestra di output mostra una riga con i byte occupati dallo sketch (nell'interfaccia inglese Sketch uses 924 bytes). Poi un programma chiamato avrdude apre la porta scelta, riavvia la scheda con il segnale DTR e prende contatto con il piccolo programma di caricamento che si trova nella scheda, il bootloader. Dopo un reset il bootloader resta in ascolto solo per circa un secondo; se in quel tempo non arrivano dati, il vecchio programma continua a funzionare. Il messaggio di errore ti dice quale anello della catena si è rotto. Se il testo rosso compare durante la compilazione, il problema è nel codice e non ha nulla a che fare con la scheda o con il cavo.

FaseChe cosa succedeMessaggio che vedi se fallisce
1. CompilazioneIl codice viene tradotto in codice macchina per il processoreCompilation error: 'x' was not declared in this scope (errore di codice, non di caricamento)
2. Apertura della portaL'IDE apre la porta COM selezionatano upload port provided, can't open device, Access is denied
3. ResetIl segnale DTR riavvia la schedaprogrammer is not responding
4. Sincronizzazioneavrdude e il bootloader si sincronizzanostk500_getsync(): not in sync: resp=0x00
5. Scrittura e verificaIl programma viene scritto nella flash, riletto e confrontatoverification error, first mismatch at byte
Per leggere bene l'errore, apri File > Preferenze e spunta caricamento alla voce Mostra un output dettagliato durante. L'exit status 1 o il Failed uploading in fondo dicono solo che qualcosa è andato storto; il vero indizio è la prima riga di errore sopra, quella che inizia con avrdude:. Copia proprio quella riga quando chiedi aiuto sui forum.

Gli errori avrdude più comuni e cosa significano

Messaggio di errore (parte chiave)Che cosa significaDove guardare per prima cosa
stk500_recv(): programmer is not respondingLa porta si è aperta ma la scheda non ha mai rispostoScelta della porta, cavo, pin 0 e 1, Old Bootloader sul Nano
stk500_getsync() attempt 1 of 10: not in sync: resp=0x00Nessun dato sulla linea, il bootloader non ha partecipato alla sincronizzazioneImpostazione Processor, reset automatico, bootloader
not in sync: un valore diverso da resp=0x00 (es. 0xfe)Qualcosa risponde, ma non è il bootloaderModulo sul pin 0, output seriale dello sketch in esecuzione, velocità errata
ser_open(): can't open device "\\.\COM3": Access is denied.Un altro programma sta usando la portaMonitor seriale, seconda finestra dell'IDE, PuTTY, Cura e programmi simili
ser_open(): can't open device ... The system cannot find the file specified.La porta scelta non esiste piùScheda scollegata o numero di porta cambiato; seleziona di nuovo la porta
Failed uploading: no upload port providedNon è selezionata alcuna portaStrumenti > Porta o il selettore della scheda in alto
Device signature = 0x1e950f ... Expected signature for ATmega2560Il chip della scheda scelta non corrisponde a quello montatoScegli bene la scheda di destinazione nel menu delle schede (0x1e950f è l'identificativo dell'ATmega328P); questa riga compare soprattutto quando scrivi il bootloader via ISP
stk500v2_ReceiveMessage(): timeoutMega 2560 selezionata ma la scheda non rispondeÈ davvero una Mega? La porta è giusta?
verification error, first mismatch at byte 0x0000Ciò che è stato scritto non coincide con ciò che viene rilettoCavo, hub USB, alimentazione debole, flash usurata

Tabella di diagnosi passo passo: sintomo, causa, soluzione

Leggi la tabella dall'alto verso il basso; le prime righe sono i problemi più comuni e più facili da risolvere. Riprova il caricamento dopo ogni modifica. Se cambi più cose insieme non saprai mai quale ha risolto il problema, e lo stesso errore ti sorprenderà di nuovo la prossima volta.

SintomoCausa probabileSoluzione
Collegando la scheda non si accende nessun LEDLa porta USB o il cavo non danno corrente, oppure c'è un cortocircuito sulla schedaProva un'altra porta e un altro cavo, togli tutti i moduli, misura tra 5V e GND
Il LED di alimentazione è acceso ma Strumenti > Porta è grigio o vuotoCavo solo di ricarica o driver mancanteUsa un cavo dati; se Gestione dispositivi mostra USB2.0-Serial con un simbolo giallo, installa il driver CH340
Nella lista ci sono più porte COMPorte virtuali del Bluetooth e del sistemaScollega e ricollega la scheda e scegli la porta che sparisce e ricompare
Failed uploading: no upload port providedNessuna porta selezionataScegli la porta nel selettore della scheda in alto o in Strumenti > Porta
Access is denied, Accesso negato, port busyLa porta è aperta in un altro programmaChiudi la seconda finestra dell'IDE, il Plotter seriale, PuTTY, Cura e gli script Python, poi ricollega la scheda
not in sync: resp=0x00 su un NanoSulla scheda c'è il vecchio bootloaderStrumenti > Processor > ATmega328P (Old Bootloader)
Stesso errore con un modulo su D0 o D1Il modulo parla sulla linea seriale e rompe la sincronizzazioneScollega i fili di D0 e D1 durante il caricamento, sposta il modulo su altri pin con SoftwareSerial
Stesso errore senza nulla collegatoScheda o porta sbagliate, reset automatico guasto, bootloader cancellatoControlla le impostazioni, prova un reset manuale, fai il test di loopback e, se serve, scrivi il bootloader
Identificativo inatteso nella riga Device signatureModello sbagliato nel menu delle schedeScegli la scheda in base alla scritta sul chip
Il caricamento si interrompe a metà, verification errorCavo scadente, hub USB, corrente assorbita da un motore o da un servoCavo corto e di qualità, porta direttamente sul computer, alimentazione esterna per i motori
Il computer disattiva la porta USB quando colleghi la schedaCortocircuito o sovracorrente nel circuitoTogli tutti i fili, prova la scheda da sola, rimonta il circuito un pezzo alla volta
ESP32: Connecting... e poi Failed to connectLa scheda non è riuscita a entrare in modalità downloadTieni premuto BOOT quando compare Connecting
Pico: nessuna porta o No drive to deployLa scheda non è in modalità BOOTSELTieni premuto BOOTSEL mentre colleghi il cavo USB

Checklist rapida e sketch di prova

  1. Togli tutto dalla scheda: shield, moduli e i fili sui pin 0 e 1. Lascia collegato solo il cavo USB.
  2. Collega la scheda direttamente a una porta USB sul retro del computer; evita hub, prolunghe e le prese sul frontale del case.
  3. Apri Strumenti > Porta e guarda l'elenco. Scollega e ricollega la scheda e annota quale porta sparisce e ricompare. Se l'elenco non cambia mai, il problema è nel cavo o nel driver.
  4. Scegli il modello esatto della tua scheda in Strumenti > Scheda; con un Nano scegli anche il bootloader giusto in Strumenti > Processor.
  5. Assicurati che nessun altro programma né una seconda finestra dell'IDE stia usando la porta; nel dubbio chiudili tutti.
  6. Attiva l'output dettagliato del caricamento e carica il piccolo sketch di prova qui sotto. Provare con un codice che sai essere senza errori esclude i problemi di compilazione.
  7. Ancora niente? Premi il tasto reset: se il LED L lampeggia rapidamente una o più volte, il bootloader è vivo. Poi passa al test di loopback più sotto.
  8. Prova su un altro computer o con un'altra scheda. Se il problema segue la scheda, è nella scheda; se resta sul computer, è nel driver o nelle impostazioni del sistema operativo.
Arduino (C++)
1// Yükleme testi: LED yanıp söner, sayaç yazılır / Upload test: blinks the LED, prints a counter
2unsigned long sayac = 0;   // çalışma sayacı / run counter
3
4void setup() {
5  pinMode(LED_BUILTIN, OUTPUT);   // Uno ve Nano'da pin 13 / pin 13 on Uno and Nano
6  Serial.begin(9600);
7  Serial.println("Yukleme basarili / Upload OK");
8}
9
10void loop() {
11  digitalWrite(LED_BUILTIN, HIGH);
12  delay(200);                     // yanma süresi: değiştirip tekrar yükle / on time: change it and re-upload
13  digitalWrite(LED_BUILTIN, LOW);
14  delay(800);
15  Serial.println(sayac++);        // Seri Monitör 9600 baud / Serial Monitor at 9600 baud
16}

Se il caricamento è riuscito, il LED L lampeggia brevemente e resta spento più a lungo, e il contatore sale quando apri il Monitor seriale a 9600 baud. Per essere sicuro che il nuovo codice sia davvero arrivato sulla scheda, cambia delay(200) in delay(50) e ricarica: se il ritmo del lampeggio non cambia, sta ancora girando il vecchio programma. Se nel Monitor seriale vedi caratteri strani, la velocità impostata nel Monitor seriale non coincide con quella del codice; non è un errore di caricamento.

La porta COM non compare: cavo USB e driver CH340, CP2102

Se il menu delle porte è grigio o vuoto, il primo sospettato è il cavo. Molti cavi sottili dei caricabatterie per telefono hanno solo i due fili di alimentazione; i fili dati D+ e D- mancano del tutto. Con un cavo così il LED di alimentazione della scheda si accende, il che trae in inganno, ma il computer non vede alcun dispositivo e non suona nemmeno l'avviso di collegamento. Prova il cavo trasferendo file su un telefono oppure con un'altra scheda che sai funzionare. Il grosso cavo di tipo B dell'Uno ha raramente questo problema; è invece molto frequente con il mini USB del Nano e con i cavi micro USB o USB-C di ESP32 e Pico.

Se il cavo è a posto, il secondo sospettato è il driver. Leggi la scritta sul chip accanto alla presa USB: Arduino Uno e Mega originali usano un ATmega16U2, i cloni di Uno e Nano quasi sempre un CH340G o CH340C, le schede di sviluppo ESP32 di solito un CP2102 o un CH340. Su Windows apri Gestione dispositivi: se la scheda viene riconosciuta, compare sotto Porte (COM e LPT). Se sotto Altri dispositivi vedi USB2.0-Serial con un punto esclamativo giallo, manca il driver CH340.

Modulo convertitore USB-TTL CH340
Il chip CH340: sulla maggior parte dei cloni di Arduino Uno e Nano è lui a gestire la comunicazione USB-seriale, e il suo driver deve essere installato perché il computer veda la scheda.
Chip USBDove si trovaNome in WindowsNome della porta su macOS e Linux
ATmega16U2Uno R3 originale, Mega 2560Arduino Uno (COMx)/dev/cu.usbmodem…, /dev/ttyACM0
CH340G, CH340CCloni di Uno, Nano e Mega, alcune schede ESP32USB-SERIAL CH340 (COMx)/dev/cu.usbserial-…, /dev/ttyUSB0
CP2102, CP2104ESP32 DevKit, NodeMCUSilicon Labs CP210x USB to UART Bridge (COMx)/dev/cu.SLAB_USBtoUART o /dev/cu.usbserial-…, /dev/ttyUSB0
FT232RLVecchio Nano originale, adattatori FTDIUSB Serial Port (COMx)/dev/cu.usbserial-…, /dev/ttyUSB0
CH9102Schede di sviluppo ESP32 più recentiUSB-Enhanced-SERIAL CH9102 (COMx)/dev/cu.wchusbserial… o /dev/cu.usbmodem…, /dev/ttyACM0
USB nativa (RP2040, ATmega32U4)Raspberry Pi Pico, Leonardo, MicroDispositivo seriale USB o nome della scheda (COMx)/dev/cu.usbmodem…, /dev/ttyACM0

Windows 10 e 11 di solito installano da soli i driver di CH340 e CP2102 tramite Windows Update. Se non lo fanno, scarica dal sito del produttore del chip il driver CH341SER per il CH340 o il driver CP210x VCP per il CP2102, installalo e poi scollega e ricollega la scheda. Le versioni attuali di macOS includono i driver per entrambi i chip; installare uno sopra l'altro vecchi driver presi da fonti diverse spesso peggiora le cose. Su Linux i driver sono già nel kernel, ma per usare la porta devi aggiungere il tuo utente al gruppo dialout (sudo usermod -a -G dialout $USER) e poi uscire e rientrare nella sessione; altrimenti ottieni l'errore Permission denied. Se su Ubuntu 22.04 o successivo la porta sparisce subito dopo aver collegato una scheda con CH340, il colpevole è di solito il pacchetto per lettori di schermo brltty; se non lo usi, rimuovilo con sudo apt remove brltty.

Se il computer disattiva la porta USB appena colleghi la scheda, oppure la scheda si collega e si scollega in continuazione, nel circuito c'è un cortocircuito o una sovracorrente. L'Arduino Uno ha un fusibile autoripristinante da 500 mA che protegge la linea USB; quando interviene, la scheda non compare affatto. Togli tutti i fili, misura con il multimetro tra 5V e GND e alimenta motori e servo grandi con una fonte esterna invece che con i 5V della USB.

Scheda, processore o porta sbagliati

Nell'Arduino IDE 2 scegli scheda e porta dal menu a tendina nella barra in alto oppure dai menu Strumenti > Scheda e Strumenti > Porta. Su Windows nell'elenco potresti vedere COM1 o alcune porte Bluetooth virtuali; il modo più semplice per trovare quella giusta è scollegare la scheda e vedere quale porta sparisce. Se nel menu delle schede è scelto un modello sbagliato, per esempio Mega invece di Uno o Leonardo invece di Nano, avrdude non riceve alcuna risposta oppure vede un identificativo di chip inatteso nella riga Device signature. Un'altra cosa: per un caricamento normale usa Ctrl+U. Sketch > Carica tramite programmatore si aspetta un programmatore ISP esterno e, se riesce, cancella il bootloader della scheda; da quel momento la scheda non accetta più caricamenti via USB.

Arduino Nano non carica lo sketch: ATmega328P (Old Bootloader)

La maggior parte dei Nano economici in commercio sono cloni con CH340, e molti hanno ancora il vecchio bootloader. All'inizio del 2018 Arduino ha sostituito il bootloader del Nano con l'Optiboot dell'Uno, più piccolo e veloce, e da allora l'opzione predefinita ATmega328P dell'IDE comunica a 115200 baud. Il vecchio bootloader si aspetta 57600 baud. Quando le velocità non coincidono, la scheda sembra non rispondere affatto e l'errore not in sync: resp=0x00 si ripete per dieci tentativi. La soluzione è una sola impostazione di menu: Strumenti > Processor > ATmega328P (Old Bootloader). Poiché queste opzioni arrivano dal pacchetto della scheda, nell'Arduino IDE 2 il menu si chiama Processor anche con l'interfaccia in italiano (nel vecchio IDE 1.8, Processore). Se non sai quale sia quella giusta, prova le opzioni una dopo l'altra; una scelta sbagliata non danneggia la scheda.

Opzione ProcessorBootloaderVelocità di caricamentoQuando sceglierla
ATmega328POptiboot (nuovo)115200 baudNano originale e schede con bootloader aggiornato
ATmega328P (Old Bootloader)ATmegaBOOT (vecchio)57600 baudLa maggior parte dei cloni di Nano con CH340
ATmega168ATmegaBOOT (vecchio)19200 baudVecchie schede con ATmega168 scritto sul chip

I moduli sui pin 0 e 1 bloccano il caricamento

Su Uno e Nano il chip USB-seriale è collegato all'ATmega328P tramite resistenze da 1 kΩ sui pin D0 (RX) e D1 (TX). Durante il caricamento quella linea appartiene al computer. Se a questi pin è collegato un modulo seriale come un modulo Bluetooth HC-05, un GPS, un ESP-01 o un sensore di impronte, invia i propri dati sulla linea oppure la tiene a un livello fisso e rompe la sincronizzazione del bootloader. Il risultato è di nuovo programmer is not responding o not in sync. La soluzione più rapida è scollegare i fili di D0 e D1 durante il caricamento; quella definitiva è spostare il modulo su altri pin con SoftwareSerial:

Arduino (C++)
1#include <SoftwareSerial.h>
2
3// HC-05 TX -> D10, HC-05 RX <- D11 (gerilim bölücüyle / through a voltage divider)
4SoftwareSerial bt(10, 11);   // RX, TX pinleri / RX, TX pins
5
6void setup() {
7  Serial.begin(9600);        // USB: Seri Monitör / USB: Serial Monitor
8  bt.begin(9600);            // HC-05 veri modu hızı / HC-05 data mode baud rate
9  Serial.println("Hazir / Ready");
10}
11
12void loop() {
13  if (bt.available()) Serial.write(bt.read());      // telefondan bilgisayara / phone to PC
14  if (Serial.available()) bt.write(Serial.read());  // bilgisayardan telefona / PC to phone
15}

In questo sketch il TX dell'HC-05 va su D10 e il suo RX su D11. L'ingresso RX dell'HC-05 lavora a 3,3 V, quindi metti tra esso e D11 un partitore di tensione con resistenze da 1 kΩ e 2 kΩ. Ora puoi caricare il codice con il modulo collegato e inviare al telefono ciò che scrivi nel Monitor seriale. Per il collegamento completo e la modalità comandi AT, leggi la guida al modulo Bluetooth HC-05. Con una Mega non serve SoftwareSerial: la scheda ha porte seriali hardware aggiuntive come Serial1 (TX1 = D18, RX1 = D19).

Il Monitor seriale e i programmi che occupano la porta

Una porta seriale può essere aperta da un solo programma alla volta. Per questo Windows mostra Access is denied (in italiano Accesso negato) e macOS e Linux mostrano Resource busy. L'Arduino IDE di solito mette in pausa il proprio Monitor seriale durante il caricamento, ma non funziona alla perfezione in ogni versione e con ogni scheda, soprattutto con l'ESP32; se ricevi l'errore, chiudi prima il pannello del Monitor seriale. Più spesso la porta è tenuta da qualcos'altro: una seconda finestra dell'IDE, il Plotter seriale rimasto aperto, PuTTY, programmi per stampanti 3D come Cura, il monitor di PlatformIO in VS Code o uno script Python in background. Chiudili, scollega e ricollega la scheda e riprova. Su Linux puoi vedere quale programma occupa la porta con sudo lsof /dev/ttyUSB0.

La scheda è guasta? Test di loopback e scrittura del bootloader

Se hai provato tutto quanto sopra e il caricamento continua a non andare, devi capire se il problema è nella parte USB o nel processore principale. Il metodo classico per Uno e Nano è il test di loopback: tieni il processore principale in reset e fai parlare il chip USB-seriale con se stesso. Per questa prova non serve caricare alcun codice.

  1. Togli tutti i fili dalla scheda e lascia collegato solo il cavo USB.
  2. Con un cavetto jumper collega il pin RESET a GND; così l'ATmega328P resta in reset e non disturba la linea.
  3. Con un secondo cavetto collega tra loro i pin D0 e D1.
  4. Seleziona nell'IDE la porta della scheda e apri il Monitor seriale; la velocità non conta per questa prova.
  5. Scrivi qualche carattere nella casella e invialo. Se il testo torna identico, cavo, driver e chip USB-seriale funzionano e il problema è nel processore principale o nel bootloader. Se non torna nulla, il problema è nella parte USB.
  6. Alla fine della prova non dimenticare di togliere entrambi i cavetti.

Se il test di loopback va a buon fine ma il caricamento continua a fallire, e premendo reset il LED L non lampeggia brevemente, il bootloader potrebbe essere stato cancellato o il chip sostituito. Puoi riscrivere il bootloader con un secondo Uno. Carica File > Esempi > 11.ArduinoISP > ArduinoISP sull'Uno che farà da programmatore. Poi collega il D10 del programmatore al pin RESET della scheda di destinazione, D11, D12 e D13 ai pin con lo stesso numero della destinazione, e 5V e GND tra loro. Metti un condensatore da 10 µF tra RESET e GND dell'Uno programmatore; così eviti che si resetti da solo. Infine scegli Strumenti > Programmatore > Arduino as ISP, seleziona la scheda di destinazione nel menu delle schede e avvia Strumenti > Scrivi il bootloader. Con questo metodo puoi anche dare il nuovo Optiboot a un clone di Nano.

ESP32 non carica lo sketch: Failed to connect e il tasto BOOT

Sull'ESP32 il caricamento non lo fa avrdude, ma esptool. Nell'output compare prima la riga Connecting........_____..... mentre esptool cerca di mettere la scheda in modalità download. Se non ci riesce, ottieni un errore che inizia con A fatal error occurred: Failed to connect to ESP32. Nelle versioni attuali di esptool, se la scheda si è avviata normalmente, il messaggio prosegue con Wrong boot mode detected (0x13)! The chip needs to be in download mode.; 0x13 indica che la scheda si è avviata nella modalità normale invece che in quella di download. Se la scheda non risponde affatto, il messaggio termina con No serial data received; le versioni più vecchie lo scrivono come Timed out waiting for packet header. Se la scheda non entra da sola in modalità download, lo fai tu a mano.

Scheda di sviluppo ESP32
Scheda di sviluppo ESP32: i tasti EN (reset) e BOOT (GPIO0) presenti sulla scheda permettono di metterla a mano in modalità download quando il caricamento automatico non funziona.
  1. Fai clic su Carica nell'IDE e osserva la finestra di output.
  2. Appena compare Connecting..., tieni premuto il tasto BOOT sulla scheda.
  3. Se ancora non si collega, con BOOT premuto dai una breve pressione a EN e rilascialo.
  4. Rilascia BOOT quando nell'output iniziano a scorrere le righe Writing at e la percentuale del caricamento.
  5. Il caricamento termina con Hard resetting via RTS pin.... Se il programma non parte, premi EN una volta.

Perché succede? Per entrare in modalità download, il pin GPIO0 dell'ESP32 deve essere LOW al momento dell'avvio. Il circuito di reset automatico a due transistor delle schede di sviluppo lo fa da solo con i segnali DTR e RTS del chip USB; sulle schede economiche questo circuito può sbagliare i tempi. Se ti sei stancato di premere BOOT ogni volta, c'è una soluzione permanente: collega un condensatore elettrolitico da 10 µF tra il pin EN e GND della scheda (il terminale negativo su GND). Il condensatore rallenta la salita della linea EN e dà al circuito di reset automatico il tempo di tenere GPIO0 a LOW.

Messaggio di errore ESP32Causa probabileSoluzione
Wrong boot mode detected (0x13)Il circuito di reset automatico non è riuscito a mettere la scheda in modalità downloadTasto BOOT; come soluzione permanente, 10 µF tra EN e GND
No serial data received o Timed out waiting for packet headerDalla scheda non arriva alcun dato: cavo solo di ricarica, porta sbagliata o scheda mai entrata in modalità downloadCavo dati, porta corretta in Strumenti > Porta, tasto BOOT
This chip is ESP32-S3 not ESP32. Wrong --chip argument?In Strumenti > Scheda è scelto un modello di ESP32 diverso da quello della tua schedaScegli il modello corrispondente al modulo sulla scheda (ESP32, ESP32-S3 ed ESP32-C3 sono schede diverse)
Could not open COM3, the port is busy or doesn't existIl Monitor seriale o un altro programma occupa la portaChiudi il Monitor seriale e gli altri programmi, scollega e ricollega la scheda
Invalid head of packet: Possible serial noise or corruptionCavo lungo o scadente, alimentazione debole, velocità di caricamento altaAbbassa Strumenti > Upload Speed da 921600 a 115200
Il caricamento riesce ma all'avvio compare flash read err, 1000GPIO12 tirato a HIGH all'avvio, viene scelta la tensione di flash sbagliataSposta il modulo collegato a GPIO12 su un altro pin
La porta sparisce dopo il caricamento (ESP32-S3, ESP32-C3)Su una scheda con USB nativa il programma si è bloccato o ha spento la USBCollega la USB tenendo premuto BOOT; Strumenti > USB CDC On Boot: Enabled
I pin GPIO0, GPIO2, GPIO12 e GPIO15 dell'ESP32 sono pin di strapping letti all'avvio. Un modulo che porta GPIO2 a HIGH o che impedisce a GPIO0 di scendere a LOW blocca la modalità download; un modulo che porta GPIO12 a HIGH può addirittura impedire l'avvio della scheda. Se il caricamento fallisce solo con il circuito collegato, controlla prima questi pin. Per l'elenco dei pin sicuri, consulta lo strumento Pinout e la guida Che cos'è l'ESP32?.
Arduino (C++)
1// ESP32 yükleme testi / ESP32 upload test
2const int LED_PIN = 2;   // birçok DevKit kartında dahili LED / onboard LED on many DevKit boards
3
4void setup() {
5  pinMode(LED_PIN, OUTPUT);
6  Serial.begin(115200);   // Seri Monitör 115200 baud / Serial Monitor at 115200 baud
7  delay(500);
8  Serial.print("Model: ");
9  Serial.println(ESP.getChipModel());                 // ör. ESP32-D0WD-V3 / e.g. ESP32-D0WD-V3
10  Serial.print("Flash (MB): ");
11  Serial.println(ESP.getFlashChipSize() / (1024 * 1024));
12  Serial.print("CPU (MHz): ");
13  Serial.println(getCpuFrequencyMhz());
14}
15
16void loop() {
17  digitalWrite(LED_PIN, !digitalRead(LED_PIN));   // LED'i tersle / toggle the LED
18  delay(500);
19}

Raspberry Pi Pico: caricare con BOOTSEL e UF2

Il Pico non ha un chip USB-seriale separato; l'RP2040 ha un proprio controller USB e il bootloader si trova nella ROM del chip, che non si può cancellare. Per questo è quasi impossibile rendere inutilizzabile un Pico via software. Se tieni premuto il tasto BOOTSEL mentre colleghi il cavo USB, il Pico compare sul computer come un'unità chiamata RPI-RP2 (sul Pico 2 l'unità si chiama RP2350). Qualsiasi file .uf2 trascinato su questa unità viene scritto sulla scheda, che poi si riavvia da sola; è così che si installa anche MicroPython.

Se programmi il Pico con l'Arduino IDE, al primo caricamento non c'è ancora una porta COM; collega la scheda tenendo premuto BOOTSEL e fai clic su Carica. Dopo il primo sketch la scheda apre una porta seriale e i caricamenti successivi non richiedono più BOOTSEL. Se il codice si blocca o spegne la USB, la porta sparisce di nuovo e compare l'errore No drive to deploy; allora torna al metodo BOOTSEL. Se usi MicroPython, in basso a destra in Thonny deve essere selezionato l'interprete MicroPython (Raspberry Pi Pico). Per i pin e la configurazione del Pico, leggi la guida Che cos'è il Raspberry Pi Pico?.

SintomoCausa probabileSoluzione
L'unità RPI-RP2 non compare maiCavo solo di ricarica, oppure BOOTSEL premuto dopo aver collegato il cavoUsa un cavo dati; premi prima BOOTSEL, poi collega il cavo e rilascia quando compare l'unità
Arduino IDE: No drive to deployLa scheda non è in modalità BOOTSEL e non c'è una porta serialeRicollega tenendo premuto BOOTSEL, poi fai clic su Carica
Thonny: Couldn't find the device automaticallyMicroPython non è installato o la scheda è ancora in modalità BOOTSELInstalla l'UF2 con l'opzione Install or update MicroPython di Thonny
Thonny: Device is busy or does not respondmain.py è bloccato in un ciclo intenso e non rispondePremi il pulsante Stop o Ctrl+C; se non basta, scollega e ricollega la scheda
Il codice ha funzionato ma la scheda non lo avvia da solaIl file non è stato salvato sul Pico con il nome main.pySalva il file nella posizione Raspberry Pi Pico come main.py
La scheda si blocca di continuo e non si carica nullaFile danneggiato o programma difettoso nella flashCancella la flash con flash_nuke.uf2 e reinstalla MicroPython
MicroPython
1import time
2from machine import Pin
3
4time.sleep(3)   # açılışta 3 sn bekle, Thonny durdurabilsin / wait 3 s so Thonny can stop the script
5
6led = Pin("LED", Pin.OUT)   # Pico ve Pico W dahili LED / onboard LED on Pico and Pico W
7sayac = 0
8while True:
9    led.toggle()
10    print("Calisiyor / running", sayac)
11    sayac += 1
12    time.sleep(0.5)

Piccole cause subdole che è facile trascurare

  • Leonardo, Micro e Uno R4: su queste schede con USB nativa la porta può cambiare per un attimo durante il caricamento. Se il caricamento si blocca, fai clic su Carica e premi una volta il tasto reset appena la compilazione finisce e inizia il caricamento (due volte rapidamente sull'Uno R4); la scheda resta per un po' nel bootloader e il codice viene caricato in quel momento.
  • Reset automatico guasto: se il reset automatico non funziona su Uno o Nano, tieni premuto reset, fai clic su Carica e rilascialo appena nell'output compare la riga con la dimensione dello sketch.
  • Shield e circuiti esterni: uno shield motori o un circuito che carica la linea 5V può far calare la tensione durante il caricamento e interrompere la scrittura a metà.
  • Porta sbagliata su macOS: /dev/cu.Bluetooth-Incoming-Port e /dev/cu.debug-console nell'elenco delle porte non sono la tua scheda, ma porte del sistema. La porta della scheda contiene usbmodem, usbserial o wchusbserial nel nome; se hai dubbi, scollega e ricollega la scheda e guarda quale sparisce.
  • Caratteri speciali nel nome utente: se la cartella del tuo utente Windows contiene lettere accentate o altri caratteri speciali, gli strumenti di compilazione e caricamento di alcuni pacchetti di schede, soprattutto quello dell'ESP32, potrebbero non trovare i file. Sposta la cartella degli sketch su un percorso senza questi caratteri dalle Impostazioni; se il problema resta, crea un nuovo utente Windows.
  • Sketch troppo grande: l'avviso Sketch too big non è un errore di caricamento; significa che il codice non entra nei circa 31,5 KB di flash che restano all'Uno dopo il bootloader. Riduci librerie e testi lunghi o passa a una scheda più grande.
  • Porta bloccata dopo lo standby: quando il computer esce dallo standby la porta può restare bloccata; riavviare l'IDE o collegare la scheda a un'altra porta USB di solito basta.
Quando provi una scheda nuova per la prima volta, inizia sempre con un codice semplice che sai essere senza errori, come lo sketch di prova qui sopra, e non con il codice del tuo progetto. Se lo sketch semplice si carica e il progetto no, la scheda è a posto; il problema è nella compilazione del codice o nei pin usati dal progetto. Fare questa distinzione è già metà della diagnosi.

Il caricamento funziona: e adesso?

  • Primo circuito: monta il tuo circuito Blink con un LED e una resistenza, poi aggiungi un pulsante per il tuo primo progetto interattivo.
  • Comunicazione seriale: ora che sai come i pin 0 e 1 influiscono sul caricamento, prova ad accendere un LED dal telefono con il modulo Bluetooth HC-05.
  • Leggere i sensori: con la guida ai sensori per Arduino scegli i tuoi primi progetti per misurare temperatura, distanza e luce.
  • Passare al wireless: realizza con l'ESP32 un progetto che si collega al Wi-Fi e si controlla dal telefono; grazie all'OTA, più avanti potrai caricare il codice anche senza fili.
  • Scegliere la scheda giusta: se sei indeciso tra Uno, Nano e Mega, leggi Quale Arduino comprare?.

Gli errori di caricamento sono fastidiosi la prima volta, ma ognuno ha una causa logica e quasi tutti si trovano nello stesso ordine: cavo, driver, porta, impostazioni della scheda, linea seriale e infine bootloader. Tieni a mente questo ordine e risolverai il prossimo errore in pochi minuti. Appena la tua scheda accetta codice, nell'app BlueGrays trovi tanti progetti per Arduino, ESP32 e Raspberry Pi Pico, dall'accensione di un LED fino al Wi-Fi e agli aggiornamenti OTA senza fili, ognuno con lo schema di collegamento passo passo e il codice pronto, per mettere subito al lavoro la tua scheda.

Domande frequenti

Perché lo sketch non si carica su Arduino?

Le cause più comuni sono un cavo USB solo di ricarica, un driver CH340 mancante, la scheda o la porta sbagliate e moduli collegati ai pin 0 e 1. Sui cloni di Nano, inoltre, Strumenti > Processor deve essere impostato su ATmega328P (Old Bootloader). Se controlli questi punti nell'ordine, la scheda risulta quasi sempre funzionante.

Come risolvo avrdude stk500_getsync not in sync resp=0x00?

Questo errore indica che il computer non riesce a sincronizzarsi con il bootloader della scheda. Per prima cosa scegli la porta e la scheda corrette, prova l'opzione Old Bootloader in Strumenti > Processor se usi un Nano e scollega i fili su D0 e D1. Se l'errore persiste, controlla la parte USB con il test di loopback e, se serve, riscrivi il bootloader.

Perché il computer non riconosce il mio Arduino?

Se Strumenti > Porta è vuoto, il cavo non trasmette dati oppure manca il driver del chip USB-seriale. Prova un altro cavo dati e controlla in Gestione dispositivi di Windows se la scheda compare sotto Porte (COM e LPT). Se sotto Altri dispositivi vedi USB2.0-Serial con un simbolo giallo, installa il driver CH340.

Come si installa il driver CH340?

Windows 10 e 11 di solito lo installano in automatico; altrimenti scarica ed esegui il pacchetto CH341SER del produttore WCH e ricollega la scheda. Le versioni attuali di macOS lo includono già e su Linux è fornito con il kernel. Su Linux devi solo aggiungere il tuo utente al gruppo dialout.

Quando bisogna premere il tasto BOOT per caricare su un ESP32?

Tieni premuto BOOT appena nell'output compare Connecting... e rilascialo quando iniziano a scorrere le percentuali del caricamento. Così l'ESP32 entra in modalità download. Se serve a ogni caricamento, un condensatore da 10 µF tra EN e GND di solito risolve il problema per sempre.

Cosa fare se il Raspberry Pi Pico non viene riconosciuto?

Tieni premuto il tasto BOOTSEL e collega il Pico al computer con un cavo dati; dovrebbe comparire come un'unità chiamata RPI-RP2. In questa modalità puoi trascinare il file UF2 di MicroPython oppure caricare codice dall'Arduino IDE. Se non compare alcuna unità, il cavo non trasmette dati; il bootloader del Pico è nella ROM, quindi il software non può danneggiarlo.

Vedi tutti i progetti
Illuminazione a LED
#1Principiante

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.

4.7(163)
782
LED Lampeggiante con ESP32
#103Principiante

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.

4.7(36)
92
Lampeggio del LED interno dell'ESP32
#106Principiante

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.

4.8(29)
53
Lampeggio LED Integrato Raspberry Pi Pico (GP25 LED Onboard)
#147Principiante

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

5.0(1)
9
HC-SR04 Misura della distanza (display seriale)
#27Principiante

HC-SR04 Misura della distanza (display seriale)

Il sensore a ultrasuoni HC-SR04 misura la distanza e visualizza il risultato in cm sul monitor seriale. Insegna il principio del calcolo della distanza con l'onda sonora.

4.6(44)
65
Illuminazione a led dal telefono tramite Bluetooth
#34Principiante
Premium

Illuminazione a led dal telefono tramite Bluetooth

Progetto di controllo wireless che accende e spegne i LED con comandi inviati dal telefono con il modulo Bluetooth HC-06. Insegna lo scambio di dati Bluetooth sulla comunicazione seriale.

4.8(68)
88
2 Comunicazione monodirezionale con Arduino
#57Intermedio
Premium

2 Comunicazione monodirezionale con Arduino

Un progetto per il trasferimento unidirezionale di dati tra due Arduino tramite comunicazione seriale. Rileva la pressione del pulsante sul lato trasmettitore e insegna a controllare il LED sul lato r

4.4(37)
50
Aggiornamento OTA dell'ESP32 — Installazione wireless del firmware (con display LCD)
#132Avanzato
Premium

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

4.7(13)
21

Impara a leggere l'errore di caricamento, a trovare la causa con una tabella dei sintomi e a risolvere passo passo i problemi di cavo, driver, porta e bootloader su Arduino, ESP32 e Raspberry Pi Pico.