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.

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.
| Étape | Ce qui se passe | Message affiché en cas d'échec |
|---|---|---|
| 1. Compilation | Le code est traduit en code machine pour le processeur | Compilation error: 'x' was not declared in this scope (erreur de code, pas de téléversement) |
| 2. Ouverture du port | L'IDE ouvre le port COM sélectionné | no upload port provided, can't open device, Access is denied |
| 3. Réinitialisation | Le signal DTR redémarre la carte | programmer is not responding |
| 4. Synchronisation | avrdude et le bootloader se synchronisent | stk500_getsync(): not in sync: resp=0x00 |
| 5. Écriture et vérification | Le programme est écrit en flash, relu puis comparé | verification error, first mismatch at byte |
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 responding | Le port s'est ouvert mais la carte n'a jamais répondu | Choix du port, câble, broches 0 et 1, Old Bootloader sur un Nano |
| stk500_getsync() attempt 1 of 10: not in sync: resp=0x00 | Aucune 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 bootloader | Module 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 port | Moniteur 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 plus | Carte débranchée ou numéro de port modifié ; sélectionne de nouveau le port |
| Failed uploading: no upload port provided | Aucun port n'est sélectionné | Outils > Port ou le sélecteur de carte en haut |
| Device signature = 0x1e950f ... Expected signature for ATmega2560 | La puce de la carte choisie ne correspond pas à celle montée | Choisis 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(): timeout | Mega 2560 sélectionnée mais la carte ne répond pas | Est-ce vraiment une Mega, et le port est-il le bon ? |
| verification error, first mismatch at byte 0x0000 | Ce qui a été écrit diffère de ce qui est relu | Câ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ôme | Cause probable | Solution |
|---|---|---|
| Aucune LED ne s'allume quand la carte est branchée | Le port USB ou le câble ne fournit pas de courant, ou court-circuit sur la carte | Essaie 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 vide | Câble de charge uniquement ou pilote manquant | Utilise 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 liste | Ports virtuels du Bluetooth et du système | Débranche et rebranche la carte, choisis le port qui disparaît puis revient |
| Failed uploading: no upload port provided | Aucun 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 busy | Le port est ouvert dans un autre programme | Ferme 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 Nano | La carte a l'ancien bootloader | Outils > Processor > ATmega328P (Old Bootloader) |
| Même erreur avec un module sur D0 ou D1 | Le module parle sur la ligne série et casse la synchronisation | Dé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 signature | Mauvais modèle choisi dans le menu des cartes | Choisis la carte d'après l'inscription sur la puce |
| Le téléversement s'arrête en cours, verification error | Mauvais câble, hub USB, courant tiré par un moteur ou un servo | Câ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ée | Court-circuit ou surintensité dans le montage | Retire tous les fils, teste la carte seule, remets le montage morceau par morceau |
| ESP32 : Connecting... puis Failed to connect | La carte n'a pas pu passer en mode téléchargement | Maintiens le bouton BOOT quand Connecting apparaît |
| Pico : pas de port ou No drive to deploy | La carte n'est pas en mode BOOTSEL | Maintiens BOOTSEL en branchant le câble USB |
Liste de contrôle rapide et programme de test
- 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.
- 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.
- 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.
- Choisis le modèle exact de ta carte dans Outils > Carte ; sur un Nano, choisis aussi le bon bootloader dans Outils > Processor.
- 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.
- 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.
- 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.
- 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.
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.

| Puce USB | Présente sur | Nom sous Windows | Nom du port sous macOS et Linux |
|---|---|---|---|
| ATmega16U2 | Uno R3 officiel, Mega 2560 | Arduino Uno (COMx) | /dev/cu.usbmodem…, /dev/ttyACM0 |
| CH340G, CH340C | Clones d'Uno, de Nano et de Mega, certaines cartes ESP32 | USB-SERIAL CH340 (COMx) | /dev/cu.usbserial-…, /dev/ttyUSB0 |
| CP2102, CP2104 | ESP32 DevKit, NodeMCU | Silicon Labs CP210x USB to UART Bridge (COMx) | /dev/cu.SLAB_USBtoUART ou /dev/cu.usbserial-…, /dev/ttyUSB0 |
| FT232RL | Ancien Nano officiel, adaptateurs FTDI | USB Serial Port (COMx) | /dev/cu.usbserial-…, /dev/ttyUSB0 |
| CH9102 | Cartes de développement ESP32 récentes | USB-Enhanced-SERIAL CH9102 (COMx) | /dev/cu.wchusbserial… ou /dev/cu.usbmodem…, /dev/ttyACM0 |
| USB natif (RP2040, ATmega32U4) | Raspberry Pi Pico, Leonardo, Micro | Pé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.
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 Processor | Bootloader | Vitesse de téléversement | Quand la choisir ? |
|---|---|---|---|
| ATmega328P | Optiboot (nouveau) | 115200 bauds | Nano officiel et cartes au bootloader mis à jour |
| ATmega328P (Old Bootloader) | ATmegaBOOT (ancien) | 57600 bauds | La plupart des clones de Nano à CH340 |
| ATmega168 | ATmegaBOOT (ancien) | 19200 bauds | Anciennes 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 :
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.
- Retire tous les fils de la carte et ne laisse que le câble USB.
- Avec un fil de liaison, relie la broche RESET à GND ; l'ATmega328P reste ainsi en réinitialisation et ne perturbe pas la ligne.
- Avec un deuxième fil, relie les broches D0 et D1 entre elles.
- 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.
- 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.
- 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.

- Clique sur Téléverser dans l'IDE et surveille la fenêtre de sortie.
- Dès que Connecting... apparaît, maintiens enfoncé le bouton BOOT de la carte.
- Si la connexion ne se fait toujours pas, appuie brièvement une fois sur EN en gardant BOOT enfoncé, puis relâche EN.
- Relâche BOOT quand les lignes Writing at et le pourcentage du téléversement commencent à défiler dans la sortie.
- 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 ESP32 | Cause probable | Solution |
|---|---|---|
| Wrong boot mode detected (0x13) | Le circuit de réinitialisation automatique n'a pas mis la carte en mode téléchargement | Bouton BOOT ; solution durable : 10 µF entre EN et GND |
| No serial data received ou Timed out waiting for packet header | Aucune donnée ne vient de la carte : câble de charge uniquement, mauvais port ou carte jamais passée en mode téléchargement | Câ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 > Carte | Choisis 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 exist | Le moniteur série ou un autre programme occupe le port | Ferme le moniteur série et les autres programmes, débranche et rebranche la carte |
| Invalid head of packet: Possible serial noise or corruption | Câble long ou de mauvaise qualité, alimentation faible, vitesse de téléversement élevée | Baisse Outils > Upload Speed de 921600 à 115200 |
| Le téléversement réussit mais le démarrage affiche flash read err, 1000 | GPIO12 tiré à HIGH au démarrage, la mauvaise tension de flash est choisie | Dé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'USB | Branche l'USB en maintenant BOOT ; Outils > USB CDC On Boot : Enabled |
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ôme | Cause probable | Solution |
|---|---|---|
| Le lecteur RPI-RP2 n'apparaît jamais | Câble de charge uniquement, ou BOOTSEL enfoncé après avoir branché le câble | Utilise 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 deploy | La carte n'est pas en mode BOOTSEL et aucun port série n'existe | Rebranche en maintenant BOOTSEL, puis clique sur Téléverser |
| Thonny : Couldn't find the device automatically | MicroPython n'est pas installé ou la carte est encore en mode BOOTSEL | Installe l'UF2 avec l'option Install or update MicroPython de Thonny |
| Thonny : Device is busy or does not respond | main.py tourne dans une boucle intensive et ne répond plus | Appuie 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 seule | Le fichier n'a pas été enregistré sur le Pico sous le nom main.py | Enregistre 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éverse | Fichier corrompu ou programme défectueux en flash | Efface la flash avec flash_nuke.uf2, puis réinstalle 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.
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.
Projets à réaliser après cet article
Voir tous les projets
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.

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.

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.

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

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.

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

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

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
Autres articles
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.

