Guides · 18 min de lecture

Erreur de téléversement Arduino : avrdude, port COM et pilotes

Le téléversement Arduino échoue ? Solutions pour avrdude not in sync, port COM absent, pilote CH340, Nano Old Bootloader, bouton BOOT de l'ESP32 et BOOTSEL.

Ton code ne se téléverse pas sur l'Arduino et une erreur avrdude rouge s'affiche dans la fenêtre de sortie ? Pas de panique : la carte est presque toujours en bon état. Le coupable est en général un câble USB qui ne fait que charger, un pilote CH340 manquant, une mauvaise carte ou un mauvais port, un module branché sur les broches 0 et 1, ou un autre programme qui occupe le port. Si tu vérifies les choses dans le bon ordre, tu régleras le souci en quelques minutes dans la plupart des cas ; et même si la carte est vraiment défectueuse, il existe un moyen simple de le prouver.

Dans ce guide, tu verras d'abord ce qui se passe en coulisses pendant le téléversement et comment lire le message d'erreur. Ensuite, nous cernerons le problème pas à pas avec un tableau de diagnostic symptôme, cause, solution. Nous traitons aussi le réglage ATmega328P (Old Bootloader) de l'Arduino Nano, le moniteur série et les autres programmes qui bloquent le port, l'erreur Failed to connect de l'ESP32 avec le bouton BOOT, ainsi que la méthode BOOTSEL et UF2 du Raspberry Pi Pico. Chaque partie propose un petit programme de test pour vérifier ta carte une fois le problème résolu.

Carte Arduino Uno R3
Arduino Uno : la petite puce à côté de la prise USB gère la communication avec l'ordinateur ; les cartes officielles utilisent un ATmega16U2, les clones le plus souvent un CH340. Les LED TX, RX et L t'aident à suivre le téléversement.

Comment fonctionne le téléversement : erreur de compilation ou de téléversement ?

Quand tu cliques sur Téléverser, deux étapes distinctes s'enchaînent. D'abord l'IDE compile ton code ; si tout va bien, la fenêtre de sortie affiche une ligne indiquant combien d'octets occupe le croquis (dans l'interface anglaise, Sketch uses 924 bytes). Ensuite, un programme appelé avrdude ouvre le port choisi, redémarre la carte grâce au signal DTR et établit le contact avec le petit programme de chargement présent dans la carte, le bootloader. Après une réinitialisation, le bootloader n'écoute qu'environ une seconde ; si aucune donnée n'arrive, l'ancien programme continue de tourner. Le message d'erreur te dit quel maillon de cette chaîne a lâché. Si le texte rouge apparaît pendant la compilation, le problème vient de ton code et n'a rien à voir avec la carte ou le câble.

ÉtapeCe qui se passeMessage affiché en cas d'échec
1. CompilationLe code est traduit en code machine pour le processeurCompilation error: 'x' was not declared in this scope (erreur de code, pas de téléversement)
2. Ouverture du portL'IDE ouvre le port COM sélectionnéno upload port provided, can't open device, Access is denied
3. RéinitialisationLe signal DTR redémarre la carteprogrammer is not responding
4. Synchronisationavrdude et le bootloader se synchronisentstk500_getsync(): not in sync: resp=0x00
5. Écriture et vérificationLe programme est écrit en flash, relu puis comparéverification error, first mismatch at byte
Pour bien lire l'erreur, ouvre Fichier > Préférences et coche téléverser à la ligne Afficher la sortie de débogage verbeuse pendant. Le exit status 1 ou le Failed uploading tout en bas dit seulement que quelque chose a échoué ; le vrai indice est la première ligne d'erreur au-dessus, celle qui commence par avrdude:. Copie exactement cette ligne quand tu demandes de l'aide sur les forums.

Les erreurs avrdude les plus fréquentes et leur signification

Message d'erreur (partie clé)SignificationÀ vérifier en premier
stk500_recv(): programmer is not respondingLe port s'est ouvert mais la carte n'a jamais réponduChoix du port, câble, broches 0 et 1, Old Bootloader sur un Nano
stk500_getsync() attempt 1 of 10: not in sync: resp=0x00Aucune donnée sur la ligne, le bootloader ne s'est pas manifestéRéglage Processor, réinitialisation automatique, bootloader
not in sync : une valeur autre que resp=0x00 (ex. 0xfe)Quelque chose répond, mais ce n'est pas le bootloaderModule sur la broche 0, sortie série du croquis en cours, débit incorrect
ser_open(): can't open device "\\.\COM3": Access is denied.Un autre programme utilise le portMoniteur série, deuxième fenêtre de l'IDE, PuTTY, Cura et programmes similaires
ser_open(): can't open device ... The system cannot find the file specified.Le port choisi n'existe plusCarte débranchée ou numéro de port modifié ; sélectionne de nouveau le port
Failed uploading: no upload port providedAucun port n'est sélectionnéOutils > Port ou le sélecteur de carte en haut
Device signature = 0x1e950f ... Expected signature for ATmega2560La puce de la carte choisie ne correspond pas à celle montéeChoisis correctement la carte cible dans le menu des cartes (0x1e950f est l'identifiant de l'ATmega328P) ; cette ligne apparaît surtout quand on grave le bootloader par ISP
stk500v2_ReceiveMessage(): timeoutMega 2560 sélectionnée mais la carte ne répond pasEst-ce vraiment une Mega, et le port est-il le bon ?
verification error, first mismatch at byte 0x0000Ce qui a été écrit diffère de ce qui est reluCâble, hub USB, alimentation faible, mémoire flash usée

Tableau de diagnostic pas à pas : symptôme, cause, solution

Lis le tableau de haut en bas ; les premières lignes sont les problèmes les plus courants et les plus faciles à régler. Relance le téléversement après chaque modification. Si tu changes plusieurs choses à la fois, tu ne sauras jamais laquelle a réglé le problème, et la même erreur te surprendra encore la prochaine fois.

SymptômeCause probableSolution
Aucune LED ne s'allume quand la carte est branchéeLe port USB ou le câble ne fournit pas de courant, ou court-circuit sur la carteEssaie un autre port et un autre câble, retire tous les modules, mesure entre 5V et GND
La LED d'alimentation s'allume mais Outils > Port est grisé ou videCâble de charge uniquement ou pilote manquantUtilise un câble de données ; si le Gestionnaire de périphériques affiche USB2.0-Serial avec un symbole jaune, installe le pilote CH340
Plusieurs ports COM dans la listePorts virtuels du Bluetooth et du systèmeDébranche et rebranche la carte, choisis le port qui disparaît puis revient
Failed uploading: no upload port providedAucun port sélectionnéChoisis le port dans le sélecteur de carte en haut ou dans Outils > Port
Access is denied, Accès refusé, port busyLe port est ouvert dans un autre programmeFerme la deuxième fenêtre de l'IDE, le traceur série, PuTTY, Cura et les scripts Python, puis rebranche la carte
not in sync: resp=0x00 sur un NanoLa carte a l'ancien bootloaderOutils > Processor > ATmega328P (Old Bootloader)
Même erreur avec un module sur D0 ou D1Le module parle sur la ligne série et casse la synchronisationDébranche les fils de D0 et D1 pendant le téléversement, déplace le module sur d'autres broches avec SoftwareSerial
Même erreur sans rien de branchéMauvaise carte ou mauvais port, réinitialisation automatique en panne, bootloader effacéVérifie les réglages, essaie une réinitialisation manuelle, fais le test de bouclage, grave le bootloader si besoin
Identifiant inattendu sur la ligne Device signatureMauvais modèle choisi dans le menu des cartesChoisis la carte d'après l'inscription sur la puce
Le téléversement s'arrête en cours, verification errorMauvais câble, hub USB, courant tiré par un moteur ou un servoCâble court et de qualité, port directement sur l'ordinateur, alimentation externe pour les moteurs
L'ordinateur coupe le port USB quand la carte est branchéeCourt-circuit ou surintensité dans le montageRetire tous les fils, teste la carte seule, remets le montage morceau par morceau
ESP32 : Connecting... puis Failed to connectLa carte n'a pas pu passer en mode téléchargementMaintiens le bouton BOOT quand Connecting apparaît
Pico : pas de port ou No drive to deployLa carte n'est pas en mode BOOTSELMaintiens BOOTSEL en branchant le câble USB

Liste de contrôle rapide et programme de test

  1. Retire tout ce qui est branché sur la carte : shields, modules et fils sur les broches 0 et 1. Ne laisse que le câble USB.
  2. Branche la carte directement sur un port USB à l'arrière de l'ordinateur ; évite les hubs, les rallonges et les prises en façade du boîtier.
  3. Ouvre Outils > Port et regarde la liste. Débranche puis rebranche la carte et note quel port disparaît puis revient. Si la liste ne change jamais, le problème vient du câble ou du pilote.
  4. Choisis le modèle exact de ta carte dans Outils > Carte ; sur un Nano, choisis aussi le bon bootloader dans Outils > Processor.
  5. Vérifie qu'aucun autre programme ni aucune deuxième fenêtre de l'IDE n'utilise le port ; dans le doute, ferme-les tous.
  6. Active les résultats détaillés du téléversement et téléverse le petit programme de test ci-dessous. Tester avec un code que tu sais sans erreur écarte les problèmes de compilation.
  7. Toujours rien ? Appuie sur le bouton reset : si la LED L clignote brièvement une ou plusieurs fois, le bootloader est vivant. Passe ensuite au test de bouclage plus bas.
  8. Essaie sur un autre ordinateur ou avec une autre carte. Si le problème suit la carte, il vient de la carte ; s'il reste sur l'ordinateur, il vient du pilote ou des réglages du système.
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}

Si le téléversement a réussi, la LED L clignote brièvement puis reste éteinte plus longtemps, et le compteur augmente quand tu ouvres le moniteur série à 9600 bauds. Pour être sûr que le nouveau code est vraiment arrivé sur la carte, remplace delay(200) par delay(50) et téléverse à nouveau : si le rythme du clignotement ne change pas, c'est encore l'ancien programme qui tourne. Si tu vois des caractères bizarres dans le moniteur série, le débit choisi dans le moniteur série ne correspond pas à celui du code ; ce n'est pas une erreur de téléversement.

Le port COM n'apparaît pas : câble USB et pilotes CH340, CP2102

Si le menu des ports est grisé ou vide, le premier suspect est le câble. Beaucoup de câbles fins fournis avec les chargeurs de téléphone n'ont que les deux fils d'alimentation ; les fils de données D+ et D- sont absents. Avec un tel câble, la LED d'alimentation de la carte s'allume, ce qui induit en erreur, mais l'ordinateur ne voit aucun périphérique et ne joue même pas le son de connexion. Teste ton câble en transférant des fichiers vers un téléphone ou avec une autre carte qui fonctionne. Le gros câble de type B de l'Uno pose rarement ce problème ; il est très fréquent avec le mini USB du Nano et avec les câbles micro USB ou USB-C de l'ESP32 et du Pico.

Si le câble est bon, le deuxième suspect est le pilote. Lis l'inscription sur la puce à côté de la prise USB : l'Arduino Uno et la Mega officiels utilisent un ATmega16U2, les clones d'Uno et de Nano le plus souvent un CH340G ou CH340C, et les cartes de développement ESP32 en général un CP2102 ou un CH340. Sous Windows, ouvre le Gestionnaire de périphériques : si la carte est reconnue, elle apparaît sous Ports (COM et LPT). Si tu vois USB2.0-Serial avec un point d'exclamation jaune sous Autres périphériques, le pilote CH340 manque.

Module convertisseur USB-TTL CH340
La puce CH340 : sur la plupart des clones d'Arduino Uno et Nano, c'est elle qui assure la communication USB-série, et son pilote doit être installé pour que l'ordinateur voie la carte.
Puce USBPrésente surNom sous WindowsNom du port sous macOS et Linux
ATmega16U2Uno R3 officiel, Mega 2560Arduino Uno (COMx)/dev/cu.usbmodem…, /dev/ttyACM0
CH340G, CH340CClones d'Uno, de Nano et de Mega, certaines cartes ESP32USB-SERIAL CH340 (COMx)/dev/cu.usbserial-…, /dev/ttyUSB0
CP2102, CP2104ESP32 DevKit, NodeMCUSilicon Labs CP210x USB to UART Bridge (COMx)/dev/cu.SLAB_USBtoUART ou /dev/cu.usbserial-…, /dev/ttyUSB0
FT232RLAncien Nano officiel, adaptateurs FTDIUSB Serial Port (COMx)/dev/cu.usbserial-…, /dev/ttyUSB0
CH9102Cartes de développement ESP32 récentesUSB-Enhanced-SERIAL CH9102 (COMx)/dev/cu.wchusbserial… ou /dev/cu.usbmodem…, /dev/ttyACM0
USB natif (RP2040, ATmega32U4)Raspberry Pi Pico, Leonardo, MicroPériphérique série USB ou nom de la carte (COMx)/dev/cu.usbmodem…, /dev/ttyACM0

Windows 10 et 11 installent généralement eux-mêmes les pilotes du CH340 et du CP2102 via Windows Update. Sinon, télécharge sur le site du fabricant de la puce le pilote CH341SER pour le CH340 ou le pilote CP210x VCP pour le CP2102, installe-le, puis débranche et rebranche la carte. Les versions récentes de macOS intègrent les pilotes des deux puces ; empiler d'anciens pilotes venus de sources différentes aggrave souvent les choses. Sous Linux, les pilotes sont déjà dans le noyau, mais pour utiliser le port tu dois ajouter ton utilisateur au groupe dialout (sudo usermod -a -G dialout $USER) puis te déconnecter et te reconnecter ; sinon tu obtiens une erreur Permission denied. Si, sous Ubuntu 22.04 ou plus récent, le port disparaît juste après avoir branché une carte à CH340, le coupable est souvent le paquet de lecteur d'écran brltty ; si tu ne t'en sers pas, supprime-le avec sudo apt remove brltty.

Si l'ordinateur coupe le port USB dès que tu branches la carte, ou si la carte se connecte et se déconnecte sans arrêt, ton montage présente un court-circuit ou une surintensité. L'Arduino Uno possède un fusible réarmable de 500 mA qui protège la ligne USB ; quand il saute, la carte n'apparaît plus du tout. Retire tous les fils, mesure au multimètre entre 5V et GND, et alimente les gros moteurs et servos avec une source externe plutôt qu'avec le 5V de l'USB.

Mauvaise carte, mauvais processeur ou mauvais port

Dans l'Arduino IDE 2, tu choisis la carte et le port dans la liste déroulante de la barre du haut ou dans les menus Outils > Carte et Outils > Port. Sous Windows, la liste peut contenir COM1 ou plusieurs ports Bluetooth virtuels ; le plus simple pour trouver le bon est de débrancher la carte et de voir quel port disparaît. Si un mauvais modèle est choisi dans le menu des cartes, par exemple Mega au lieu d'Uno ou Leonardo au lieu de Nano, avrdude ne reçoit aucune réponse ou voit un identifiant de puce inattendu sur la ligne Device signature. Autre point : utilise Ctrl+U pour un téléversement normal. Croquis > Téléverser en utilisant un programmateur attend un programmateur ISP externe et, s'il réussit, efface le bootloader de la carte ; ensuite, la carte n'accepte plus de téléversement par USB.

Arduino Nano qui refuse le téléversement : ATmega328P (Old Bootloader)

La plupart des cartes Nano bon marché du commerce sont des clones à CH340, et beaucoup gardent l'ancien bootloader. Début 2018, Arduino a remplacé le bootloader du Nano par l'Optiboot de l'Uno, plus petit et plus rapide ; depuis, l'option par défaut ATmega328P de l'IDE communique à 115200 bauds. L'ancien bootloader attend 57600 bauds. Quand les vitesses ne correspondent pas, la carte semble ne pas répondre du tout et l'erreur not in sync: resp=0x00 se répète pendant dix tentatives. La solution tient en un seul réglage : Outils > Processor > ATmega328P (Old Bootloader). Comme ces options viennent du paquet de la carte, le menu s'appelle Processor dans l'Arduino IDE 2, même avec l'interface en français (dans l'ancien IDE 1.8, Processeur). Si tu ne sais pas lequel est le bon, essaie les options l'une après l'autre ; un mauvais choix n'abîme pas la carte.

Option ProcessorBootloaderVitesse de téléversementQuand la choisir ?
ATmega328POptiboot (nouveau)115200 baudsNano officiel et cartes au bootloader mis à jour
ATmega328P (Old Bootloader)ATmegaBOOT (ancien)57600 baudsLa plupart des clones de Nano à CH340
ATmega168ATmegaBOOT (ancien)19200 baudsAnciennes cartes avec ATmega168 inscrit sur la puce

Les modules branchés sur les broches 0 et 1 bloquent le téléversement

Sur l'Uno et le Nano, la puce USB-série est reliée à l'ATmega328P par des résistances de 1 kΩ sur les broches D0 (RX) et D1 (TX). Pendant le téléversement, cette ligne appartient à l'ordinateur. Si un module série comme un module Bluetooth HC-05, un GPS, un ESP-01 ou un capteur d'empreintes est branché sur ces broches, il envoie ses propres données sur la ligne ou la maintient à un niveau fixe, et casse la synchronisation du bootloader. Résultat : encore programmer is not responding ou not in sync. Le plus rapide est de débrancher les fils de D0 et D1 pendant le téléversement ; la solution durable consiste à déplacer le module sur d'autres broches avec 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}

Dans ce programme, le TX du HC-05 va sur D10 et son RX sur D11. L'entrée RX du HC-05 fonctionne en 3,3 V : place donc entre elle et D11 un pont diviseur de tension avec des résistances de 1 kΩ et 2 kΩ. Tu peux maintenant téléverser avec le module branché et envoyer vers ton téléphone ce que tu tapes dans le moniteur série. Pour le câblage complet et le mode commandes AT, consulte le guide du module Bluetooth HC-05. Avec une Mega, pas besoin de SoftwareSerial : la carte dispose de ports série matériels supplémentaires comme Serial1 (TX1 = D18, RX1 = D19).

Le moniteur série et les programmes qui occupent le port

Un port série ne peut être ouvert que par un seul programme à la fois. C'est pourquoi Windows affiche Access is denied (en français Accès refusé) et macOS et Linux Resource busy. L'Arduino IDE met normalement son propre moniteur série en pause pendant le téléversement, mais cela ne fonctionne pas parfaitement avec toutes les versions et toutes les cartes, surtout avec l'ESP32 ; si tu obtiens l'erreur, ferme d'abord l'onglet du moniteur série. Le plus souvent, le port est retenu par autre chose : une deuxième fenêtre de l'IDE, un traceur série resté ouvert, PuTTY, un logiciel d'impression 3D comme Cura, le moniteur PlatformIO de VS Code ou un script Python en arrière-plan. Ferme-les, débranche et rebranche la carte, puis réessaie. Sous Linux, la commande sudo lsof /dev/ttyUSB0 te montre quel programme occupe le port.

La carte est-elle morte ? Test de bouclage et gravure du bootloader

Si tu as tout essayé et que le téléversement échoue toujours, il faut déterminer si le problème vient de la partie USB ou du processeur principal. La méthode classique pour l'Uno et le Nano est le test de bouclage (loopback) : tu maintiens le processeur principal en réinitialisation et tu fais parler la puce USB-série avec elle-même. Aucun code n'est à téléverser pour ce test.

  1. Retire tous les fils de la carte et ne laisse que le câble USB.
  2. Avec un fil de liaison, relie la broche RESET à GND ; l'ATmega328P reste ainsi en réinitialisation et ne perturbe pas la ligne.
  3. Avec un deuxième fil, relie les broches D0 et D1 entre elles.
  4. Choisis le port de la carte dans l'IDE et ouvre le moniteur série ; le débit n'a pas d'importance pour ce test.
  5. Tape quelques caractères dans le champ et envoie-les. Si ton texte revient tel quel, le câble, le pilote et la puce USB-série sont bons, et le problème vient du processeur principal ou du bootloader. Si rien ne revient, le problème est du côté USB.
  6. N'oublie pas de retirer les deux fils à la fin du test.

Si le test de bouclage réussit mais que le téléversement échoue encore, et que la LED L ne clignote pas brièvement quand tu appuies sur reset, le bootloader a peut-être été effacé ou la puce remplacée. Tu peux regraver le bootloader avec un deuxième Uno. Téléverse Fichier > Exemples > 11.ArduinoISP > ArduinoISP sur l'Uno qui servira de programmateur. Relie ensuite la broche D10 du programmateur à la broche RESET de la carte cible, D11, D12 et D13 aux broches de même numéro de la cible, ainsi que 5V et GND entre eux. Place un condensateur de 10 µF entre RESET et GND sur l'Uno programmateur ; cela l'empêche de se réinitialiser lui-même. Enfin, choisis Outils > Programmeur > Arduino as ISP, sélectionne la carte cible dans le menu des cartes et lance Outils > Graver la séquence d'initialisation. Cette méthode permet aussi d'installer le nouvel Optiboot sur un clone de Nano.

L'ESP32 refuse le téléversement : Failed to connect et le bouton BOOT

Sur l'ESP32, ce n'est pas avrdude mais esptool qui téléverse. La sortie affiche d'abord une ligne Connecting........_____..... pendant qu'esptool tente de mettre la carte en mode téléchargement. S'il n'y parvient pas, tu obtiens une erreur commençant par A fatal error occurred: Failed to connect to ESP32. Dans les versions actuelles d'esptool, si la carte a démarré normalement, le message se poursuit par Wrong boot mode detected (0x13)! The chip needs to be in download mode. ; 0x13 signifie que la carte a démarré dans son mode normal au lieu du mode téléchargement. Si la carte ne répond pas du tout, le message se termine par No serial data received ; les anciennes versions l'écrivent Timed out waiting for packet header. Si la carte ne passe pas seule en mode téléchargement, tu le fais à la main.

Carte de développement ESP32
Carte de développement ESP32 : les boutons EN (reset) et BOOT (GPIO0) de la carte permettent de la mettre à la main en mode téléchargement quand le téléversement automatique échoue.
  1. Clique sur Téléverser dans l'IDE et surveille la fenêtre de sortie.
  2. Dès que Connecting... apparaît, maintiens enfoncé le bouton BOOT de la carte.
  3. Si la connexion ne se fait toujours pas, appuie brièvement une fois sur EN en gardant BOOT enfoncé, puis relâche EN.
  4. Relâche BOOT quand les lignes Writing at et le pourcentage du téléversement commencent à défiler dans la sortie.
  5. Le téléversement se termine par Hard resetting via RTS pin.... Si le programme ne démarre pas, appuie une fois sur EN.

Pourquoi cela arrive-t-il ? Pour passer en mode téléchargement, la broche GPIO0 de l'ESP32 doit être à LOW au moment du démarrage. Le circuit de réinitialisation automatique à deux transistors des cartes de développement s'en charge seul grâce aux signaux DTR et RTS de la puce USB ; sur les cartes bon marché, ce circuit peut rater le bon timing. Si tu en as assez d'appuyer sur BOOT à chaque fois, il existe une solution durable : branche un condensateur électrolytique de 10 µF entre la broche EN et GND de la carte (patte négative sur GND). Le condensateur retarde la montée de la ligne EN et laisse au circuit de réinitialisation automatique le temps de maintenir GPIO0 à LOW.

Message d'erreur ESP32Cause probableSolution
Wrong boot mode detected (0x13)Le circuit de réinitialisation automatique n'a pas mis la carte en mode téléchargementBouton BOOT ; solution durable : 10 µF entre EN et GND
No serial data received ou Timed out waiting for packet headerAucune donnée ne vient de la carte : câble de charge uniquement, mauvais port ou carte jamais passée en mode téléchargementCâble de données, bon port dans Outils > Port, bouton BOOT
This chip is ESP32-S3 not ESP32. Wrong --chip argument?Un autre modèle d'ESP32 que celui de ta carte est choisi dans Outils > CarteChoisis le modèle qui correspond au module de la carte (ESP32, ESP32-S3 et ESP32-C3 sont des cartes différentes)
Could not open COM3, the port is busy or doesn't existLe moniteur série ou un autre programme occupe le portFerme le moniteur série et les autres programmes, débranche et rebranche la carte
Invalid head of packet: Possible serial noise or corruptionCâble long ou de mauvaise qualité, alimentation faible, vitesse de téléversement élevéeBaisse Outils > Upload Speed de 921600 à 115200
Le téléversement réussit mais le démarrage affiche flash read err, 1000GPIO12 tiré à HIGH au démarrage, la mauvaise tension de flash est choisieDéplace le module branché sur GPIO12 vers une autre broche
Le port disparaît après le téléversement (ESP32-S3, ESP32-C3)Sur une carte à USB natif, le programme a planté ou coupé l'USBBranche l'USB en maintenant BOOT ; Outils > USB CDC On Boot : Enabled
Les broches GPIO0, GPIO2, GPIO12 et GPIO15 de l'ESP32 sont des broches de configuration (strapping) lues au démarrage. Un module qui tire GPIO2 à HIGH ou qui empêche GPIO0 de passer à LOW bloque le mode téléchargement ; un module qui tire GPIO12 à HIGH peut même empêcher la carte de démarrer. Si le téléversement n'échoue qu'avec ton montage branché, vérifie d'abord ces broches. Pour la liste des broches sûres, consulte l'outil Pinout et le guide Qu'est-ce que 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 : téléverser avec BOOTSEL et UF2

Le Pico n'a pas de puce USB-série séparée ; le RP2040 possède son propre contrôleur USB et le bootloader réside dans la ROM de la puce, impossible à effacer. Il est donc presque impossible de rendre un Pico inutilisable par logiciel. Si tu maintiens le bouton BOOTSEL en branchant le câble USB, le Pico apparaît sur l'ordinateur comme un lecteur nommé RPI-RP2 (sur le Pico 2, le lecteur s'appelle RP2350). Tout fichier .uf2 que tu glisses sur ce lecteur est écrit sur la carte, qui redémarre ensuite toute seule ; c'est aussi comme cela qu'on installe MicroPython.

Si tu programmes le Pico avec l'Arduino IDE, il n'y a pas encore de port COM pour le premier téléversement ; branche la carte en maintenant BOOTSEL et clique sur Téléverser. Après le premier croquis, la carte ouvre un port série et les téléversements suivants n'ont plus besoin de BOOTSEL. Si ton code plante ou coupe l'USB, le port disparaît de nouveau et tu obtiens l'erreur No drive to deploy ; reviens alors à la méthode BOOTSEL. Si tu utilises MicroPython, l'interpréteur MicroPython (Raspberry Pi Pico) doit être sélectionné en bas à droite de Thonny. Pour les broches et l'installation du Pico, consulte le guide Qu'est-ce que le Raspberry Pi Pico ?.

SymptômeCause probableSolution
Le lecteur RPI-RP2 n'apparaît jamaisCâble de charge uniquement, ou BOOTSEL enfoncé après avoir branché le câbleUtilise un câble de données ; appuie d'abord sur BOOTSEL, puis branche le câble, relâche quand le lecteur apparaît
Arduino IDE : No drive to deployLa carte n'est pas en mode BOOTSEL et aucun port série n'existeRebranche en maintenant BOOTSEL, puis clique sur Téléverser
Thonny : Couldn't find the device automaticallyMicroPython n'est pas installé ou la carte est encore en mode BOOTSELInstalle l'UF2 avec l'option Install or update MicroPython de Thonny
Thonny : Device is busy or does not respondmain.py tourne dans une boucle intensive et ne répond plusAppuie sur le bouton Stop ou sur Ctrl+C ; sinon, débranche et rebranche la carte
Le code a tourné mais la carte ne le lance pas seuleLe fichier n'a pas été enregistré sur le Pico sous le nom main.pyEnregistre le fichier dans l'emplacement Raspberry Pi Pico sous le nom main.py
La carte se bloque sans cesse et rien ne se téléverseFichier corrompu ou programme défectueux en flashEfface la flash avec flash_nuke.uf2, puis réinstalle 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)

Petites causes sournoises qu'on oublie facilement

  • Leonardo, Micro et Uno R4 : sur ces cartes à USB natif, le port peut changer brièvement pendant le téléversement. Si le téléversement se bloque, clique sur Téléverser et appuie une fois sur le bouton reset dès que la compilation se termine et que le téléversement commence (deux fois rapidement sur l'Uno R4) ; la carte attend un moment dans le bootloader et le code est téléversé pendant ce temps.
  • Réinitialisation automatique en panne : si elle ne fonctionne pas sur un Uno ou un Nano, maintiens le bouton reset, clique sur Téléverser et relâche-le dès que la ligne indiquant la taille du croquis apparaît dans la sortie.
  • Shields et montages externes : un shield moteur ou un montage qui charge la ligne 5V peut faire chuter la tension pendant le téléversement et interrompre l'écriture.
  • Mauvais port sous macOS : /dev/cu.Bluetooth-Incoming-Port et /dev/cu.debug-console dans la liste des ports ne sont pas ta carte, mais des ports du système. Le port de ta carte contient usbmodem, usbserial ou wchusbserial dans son nom ; en cas de doute, débranche et rebranche la carte et regarde lequel disparaît.
  • Caractères spéciaux dans le nom d'utilisateur : si le dossier de ton utilisateur Windows contient des accents ou d'autres caractères spéciaux, les outils de compilation et de téléversement de certains paquets de cartes, surtout celui de l'ESP32, peuvent ne pas trouver leurs fichiers. Déplace le dossier des croquis vers un chemin sans ces caractères dans les Préférences ; si le problème persiste, crée un nouvel utilisateur Windows.
  • Croquis trop gros : l'avertissement Sketch too big n'est pas une erreur de téléversement ; il signifie que ton code ne tient pas dans les quelque 31,5 Ko de flash qui restent à l'Uno après le bootloader. Allège les bibliothèques et les longs textes ou passe à une carte plus grande.
  • Port bloqué après la mise en veille : au réveil de l'ordinateur, le port peut rester bloqué ; redémarrer l'IDE ou brancher la carte sur un autre port USB suffit en général.
Quand tu essaies une nouvelle carte pour la première fois, commence toujours par un code simple que tu sais sans erreur, comme le programme de test ci-dessus, plutôt que par le code de ton projet. Si le programme simple se téléverse mais pas ton projet, la carte va bien ; le problème vient de la compilation de ton code ou des broches utilisées par ton projet. Faire cette distinction, c'est déjà la moitié du diagnostic.

Le téléversement fonctionne : et maintenant ?

  • Premier montage : réalise ton propre montage Blink avec une LED et une résistance, puis ajoute un bouton-poussoir pour ton premier projet interactif.
  • Communication série : maintenant que tu sais comment les broches 0 et 1 influencent le téléversement, essaie d'allumer une LED depuis ton téléphone avec le module Bluetooth HC-05.
  • Lire des capteurs : avec le guide des capteurs Arduino, choisis tes premiers projets qui mesurent la température, la distance et la lumière.
  • Passer au sans-fil : crée avec l'ESP32 un projet qui se connecte au Wi-Fi et se pilote depuis ton téléphone ; grâce à l'OTA, tu pourras ensuite téléverser ton code sans fil.
  • Choisir la bonne carte : si tu hésites entre Uno, Nano et Mega, lis Quel Arduino acheter ?.

Les erreurs de téléversement sont agaçantes la première fois, mais chacune a une cause logique, et on les trouve presque toutes dans le même ordre : câble, pilote, port, réglages de la carte, ligne série et enfin bootloader. Garde cet ordre en tête et tu régleras la prochaine erreur en quelques minutes. Dès que ta carte accepte du code, l'application BlueGrays te propose de nombreux projets pour Arduino, ESP32 et Raspberry Pi Pico, du clignotement d'une LED jusqu'au Wi-Fi et aux mises à jour OTA sans fil, chacun avec un schéma de câblage pas à pas et un code prêt à l'emploi, pour mettre ta carte au travail tout de suite.

Questions fréquentes

Pourquoi mon code ne se téléverse-t-il pas sur l'Arduino ?

Les causes les plus fréquentes sont un câble USB qui ne fait que charger, un pilote CH340 manquant, une mauvaise carte ou un mauvais port, et des modules branchés sur les broches 0 et 1. Sur les clones de Nano, Outils > Processor doit en plus être réglé sur ATmega328P (Old Bootloader). Vérifie ces points dans l'ordre : la carte se révèle presque toujours en bon état.

Comment corriger avrdude stk500_getsync not in sync resp=0x00 ?

Cette erreur signifie que l'ordinateur n'arrive pas à se synchroniser avec le bootloader de la carte. Choisis d'abord le bon port et la bonne carte, essaie l'option Old Bootloader dans Outils > Processor si tu utilises un Nano, et débranche les fils de D0 et D1. Si l'erreur persiste, vérifie la partie USB avec le test de bouclage et regrave le bootloader si nécessaire.

Pourquoi mon Arduino n'est-il pas reconnu par le PC ?

Si Outils > Port est vide, le câble ne transmet pas de données ou le pilote de la puce USB-série n'est pas installé. Essaie un autre câble de données et regarde dans le Gestionnaire de périphériques de Windows si la carte apparaît sous Ports (COM et LPT). Si tu vois USB2.0-Serial avec un symbole jaune sous Autres périphériques, installe le pilote CH340.

Comment installer le pilote CH340 ?

Windows 10 et 11 l'installent généralement tout seuls ; sinon, télécharge et lance le paquet CH341SER du fabricant WCH, puis rebranche la carte. Les versions récentes de macOS l'intègrent déjà et, sous Linux, il est fourni avec le noyau. Sous Linux, il suffit d'ajouter ton utilisateur au groupe dialout.

Quand appuyer sur le bouton BOOT pour téléverser sur un ESP32 ?

Maintiens BOOT dès que Connecting... apparaît dans la sortie et relâche-le quand les pourcentages du téléversement commencent à défiler. Cela met l'ESP32 en mode téléchargement. Si c'est nécessaire à chaque fois, un condensateur de 10 µF entre EN et GND règle généralement le problème définitivement.

Que faire si le Raspberry Pi Pico n'est pas reconnu ?

Maintiens le bouton BOOTSEL et branche le Pico sur l'ordinateur avec un câble de données ; il doit apparaître comme un lecteur nommé RPI-RP2. Dans ce mode, tu peux glisser le fichier UF2 de MicroPython ou téléverser du code depuis l'Arduino IDE. Si aucun lecteur n'apparaît, le câble ne transmet pas de données ; le bootloader du Pico est en ROM, le logiciel ne peut donc pas l'abîmer.

Voir tous les projets
Eclairage à Led
#1Débutant

Eclairage à Led

Projet d'entrée basique qui allume et éteint une seule LED à certains intervalles avec Arduino. Enseigne l'utilisation des fonctions digitalWrite et delay.

4.7(163)
782
Clignotement LED avec ESP32
#103Débutant

Clignotement LED avec ESP32

Enseigne l'utilisation de base des sorties GPIO avec l'ESP32. Nous obtenons un effet de clignotement en allumant et éteignant une LED à partir de la broche numérique. Version ESP32 du projet blink classique sur Arduino UNO ; le schéma des broches et la syntaxe restent les mêmes, la différence se situe uniquement au niveau des numéros de broches.

4.7(36)
92
Clignotement de la LED interne de l'ESP32
#106Débutant

Clignotement de la LED interne de l'ESP32

Faire clignoter la LED bleue intégrée à l'ESP32 DevKit V1. Aucun composant externe n'est nécessaire ! Le premier projet que vous devriez essayer lorsque vous achetez un ESP32. Le GPIO 2 est connecté à la LED interne.

4.8(29)
53
Clignotement LED Intégrée Raspberry Pi Pico (GP25 LED Onboard)
#147Débutant

Clignotement LED Intégrée Raspberry Pi Pico (GP25 LED Onboard)

Le projet d'ouverture de la série Raspberry Pi Pico ! Nous faisons clignoter la LED intégrée (LED verte connectée à GP25) pour vérifier que la carte fonctionne — une première expérience classique "Hello World". AUCUN composant externe, juste Pico et câble USB. Le code est écrit en **MicroPython** (le langage officiellement soutenu par la Raspberry Pi Foundation). Apprends la classe `machine.Pin`, le mode `Pin.OUT`, les méthodes `led.on()/off()` et `time.sleep()` dans Thonny IDE. Suis chaque basc

5.0(1)
9
HC-SR04 Mesure de la distance (affichage en série)
#27Débutant

HC-SR04 Mesure de la distance (affichage en série)

Le capteur ultrasonique HC-SR04 permet de mesurer la distance et d'afficher le résultat en cm sur le moniteur série. Il enseigne le principe du calcul de la distance à l'aide d'une onde sonore.

4.6(44)
65
Eclairage LED à partir d'un téléphone via Bluetooth
#34Débutant
Premium

Eclairage LED à partir d'un téléphone via Bluetooth

Projet de contrôle sans fil qui permet d'allumer et d'éteindre des LED à l'aide de commandes envoyées depuis un téléphone équipé d'un module Bluetooth HC-06. Enseigne l'échange de données Bluetooth pa

4.8(68)
88
2 Communication unidirectionnelle Arduino
#57Intermédiaire
Premium

2 Communication unidirectionnelle Arduino

Un projet de transfert de données unidirectionnel entre deux Arduinos via une communication série. Il détecte la pression d'un bouton du côté de l'émetteur et apprend à contrôler la LED du côté du réc

4.4(37)
50
Mise à jour OTA de l'ESP32 — Installation sans fil du firmware (avec écran LCD)
#132Avancé
Premium

Mise à jour OTA de l'ESP32 — Installation sans fil du firmware (avec écran LCD)

Dans ce projet, vous allez apprendre à installer un nouveau firmware sur l'ESP32 via Wi-Fi, sans câble USB. Grâce à la bibliothèque `ArduinoOTA`, l'ESP32 devient visible sur le réseau et apparaît automatiquement sous le nom `bluegrays-ota` dans l'onglet « Network port » de l'IDE Arduino. La première installation s'effectue via USB, puis toutes les mises à jour se font sans fil — une fonctionnalité essentielle pour les appareils sur le terrain. L'écran LCD I2C affiche l'état du Wi-Fi, l'adresse I

4.7(13)
21

Apprends à lire l'erreur de téléversement, à trouver la cause grâce à un tableau de symptômes et à régler pas à pas les problèmes de câble, de pilote, de port et de bootloader sur Arduino, ESP32 et Pico.

Erreur de téléversement Arduino : avrdude, port COM et pilotes | BlueGrays