Comme vous le savez certainement, programmer un ESP32 est assez facile à faire, via ses lignes RX/TX (port UART). Par contre, cela nécessite une intervention manuelle, à savoir : appuyer/maintenir le bouton BOOT, faire une impulsion sur le bouton RESET, puis relâcher le bouton BOOT une fois fait. Franchement, lorsqu’on fait de multiples essais de programmation ESP32, cela peut vite devenir pénible, à la longue !
C’est pourquoi je vous propose de découvrir ici un programmateur d’ESP32 automatique, ou plus exactement un adaptateur USB/UART permettant de programmer vos ESP32, tout en faisant les boot et reset automatiquement, à votre place (on appellera ces fonctions « auto-boot » et « auto-reset », pour aller plus vite !). Ainsi, plus besoin s’enquiquiner avec les boutons BOOT/RESET, car tout se fera en automatique. Sympa, non ? En tout cas, si cela vous intéresse, en avant pour la suite 🙂
Remarque : comme d’habitude, ce genre de projet est avant tout fait pour vous permettre d’apprendre l’électronique, par la pratique. Ici, vous découvrirez notamment : la puce CH340C (convertisseur USB-série), le pilotage de transistors bipolaires croisés, et l’utilisation d’un régulateur de tension ajustable pour compenser une diode anti-retour de courant. Du reste, histoire de vous montrer la mise en œuvre pratique de ce convertisseur, je vous ai fait un second article, qui vous montre comment programmer une carte ESP32-S3-WROOM-1 fait-maison (test / démo), à l’aide de cet adaptateur !
Comment utiliser cet adaptateur USB/UART auto-boot pour ESP32 ?
Comme évoqué en intro, cet adaptateur USB/UART sert à la programmation d’ESP32, via leurs lignes RX, TX, BOOT, et RESET. Ainsi, programmer un ESP32 de manière filaire deviendra un jeu d’enfant 😉
Techniquement parlant, ce convertisseur se placera donc entre votre ordi (USB) et l’ESP32 à programmer (UART), pour constituer une sorte de passerelle entre les deux. Voici donc comment le raccorder :

À noter que cet adaptateur USB/UART fournira du +3,3V protégé à l’ESP32 à programmer ; il n’y aura donc pas de risque de conflit d’alimentation, du moins, à partir du moment où la carte ESP32 aura le même type de protection (une diode anti-retour de part et d’autre, par exemple). Par contre, vous ne pourrez pas tirer énormément de courant sur ce convertisseur USB-UART (500 mA en pic, au maximum, sans quoi le régulateur va fortement s’échauffer, et/ou la tension s’écrouler).
Important : pour que tout cela fonctionne correctement, cela suppose que :
→ la ligne BOOT côté ESP32 (ligne « IO0 ») dispose d’une résistance pull-up (10 Kohm), et d’un condensateur à la masse (100 nF)
→ la ligne RESET côté ESP32 (ligne « EN ») dispose d’une résistance pull-up (10 Kohm), et de deux condensateurs à la masse (1µF et 100 nF)
Et bien sûr, qu’il n’y ait rien d’autre sur ces lignes, pouvant perturber la communication et/ou le bon fonctionnement de l’ensemble.
Du reste, pour info, la communication USB/UART sera bidirectionnelle. Cela veut donc dire que l’ESP32 pourra renvoyer des infos via l’UART, à travers ce convertisseur (très utile, si on souhaite faire des « Serial.print », dans son code arduino ou autre !).
Schéma électronique de ce convertisseur USB ↔ UART auto reset/boot
Maintenant, voyons le schéma électronique de ce convertisseur USB/UART, avec fonctions auto-reset et auto-boot :

Ici, on retrouve « 5 grands blocs », à savoir :
- un bloc « Entrée USB », à partir duquel on récupère le +5V/GND de la prise USB (ce qui nous permettra de « fabriquer » du +3,3V, à destination du convertisseur USB ↔ série CH340C, et de l’ESP32 à programmer), ainsi que les signaux de données D+/D-.
- un bloc « Témoin d’alim », qui se limite à une simple led (LED1) et une résistance de limitation de courant (R3), témoignant de la présence ou non du +3,3V sur cette carte.
- un bloc « Conversion USB/UART », simplement constitué de la puce CH340 C, qui recevra les signaux USB D+/D- pour les « transformer » en signaux série (RX/TX), et vice-versa. À noter que celle-ci nous sort des signaux DTR et RTS, indispensables pour générer l’autoreset et l’autoboot.
- un bloc « Auto reset/boot », qui met en œuvre 2 transistors bipolaires (Q1 et Q2), câblés de manière croisée, et leurs 2 résistances de limitation de courant (R4 et R5), sur leurs bases respectives ; cela permettra de sortir des lignes /RESET et /BOOT à destination de l’ESP32 à programmer.
- et un bloc « Connecteur de sortie », qui délivrera les signaux à destination de l’ESP32 à programmer.
Présenté ainsi, je pense que ce schéma n’est, au final, pas si complexe que ça à comprendre ! Du reste, à présent, entrons un peu plus dans le détail, en explorant plusieurs parties de ce schéma 🙂
Nota : les appellations « Entrée USB » et « Connecteur de sortie », sur le schéma, ne sont vraies que du point de vue « alimentation électrique ». Car les signaux de données, quant à eux, peuvent aller et venir dans les deux sens !
Explications techniques
À présent, entrons un peu plus dans les détails de certaines parties de ce schéma !
Pourquoi avoir utilisé un régulateur de tension ajustable (AMS1117-ADJ), plutôt qu’un régulateur de tension fixe à 3,3V ?
Pour bien comprendre pourquoi j’ai utilisé un régulateur de tension variable ici, plutôt qu’un régulateur fixe 3,3V (type AMS1117-3.3, par exemple), il faut avant tout savoir qu’on ne sait pas si l’ESP32 à programmer est déjà alimenté en 3,3 volts ou non. Il faut donc mettre en place un système anti-retour de courant (comme une simple diode, par exemple), au niveau des alims (de ce convertisseur, et de l’ESP32).
En fait, si on avait mis en place un régulateur de tension fixe de +3,3V suivi d’une diode anti-retour ensuite (schottky, par exemple), on aurait seulement du +3,0V environ en sortie. Or ce serait bien trop limite, car un ESP32 requiert justement un minimum de 3V pour fonctionner. En bref, la tension d’alimentation serait insuffisante, et créerait potentiellement des bugs de fonctionnement.
Idéalement, il faudrait un régulateur de tension fixe de 3,6V, car celui-ci permettrait d’obtenir du 3,3V en sortie d’alim environ, si l’on soustrait les 0,3V de chute de tension aux bornes d’une diode schottky, mise en série sur la sortie. Mais bien que cela existe, les modèles de régulateur fixe 3,6 volts ne sont pas vraiment communs !
Cela étant dit, utiliser un régulateur de tension variable pour générer du 3,6 volts permet de revenir sur des choses beaucoup plus courantes ! En effet, un simple AMS1117-ADJ peut faire l’affaire, et il est très commun ! Donc c’est pourquoi je suis parti là-dessus 🙂
Pour info, voici la formule permettant de déterminer la tension de sortie d’un AMS1117-ADJ, en fonction des résistances mises autour (selon le datasheet AMS1117-ADJ du fabricant Advanced Monolithic System, ici, … je précise car cela peut changer d’un fabricant à l’autre) :
Vout = Vref * (1 + R2/R1) + (Iadj * R2)
En sachant ici que :
- Vref (datasheet) = 1,25 V
- Iadj (datasheet) = 50µA
- R1 (schéma de notre projet) = 820 ohms
- R2 (schéma de notre projet) = 1600 ohms
Et si on fait les calculs numériques, on obtient :
Vout = Vref * (1 + R2/R1) + (Iadj * R2)
d’où Vout = 1,25 * (1 + 1600/820) + (0,000050 * 1600)
d’où Vout = 1,25 * 2,951 + 0,08
d’où Vout = 3,77 volts
Vous noterez ici qu’on est pas à 3,6V exactement, mais un poil au dessus. En fait, j’ai volontairement dimensionné les résistances R1/R2 ainsi, car j’ai utilisé une diode schottky 1N5819W (datasheet) dans ce montage, et que sa chute de tension « réelle » varie entre 0,25 à 0,5V, dès lors qu’on fait passer de 10mA à 1A à travers elle.
Du coup, la tension d’alim sortant de notre « convertisseur USB/UART » sera d’environ, à 25°C de température ambiante :
- si on tire très peu de courant (10 mA, par exemple), la tension de sortie sera d’environ 3,77V (régulateur) – 0,25V (schottky) = 3,52 V
- si on considère une consommation « normale » d’ESP32 (environ 100 mA), la tension de sortie sera d’environ 3,77V (régulateur) – 0,4V (schottky) = 3,37 V
- si on tire beaucoup de courant (1A, par exemple), la tension de sortie sera d’environ 3,77V (régulateur) – 0,7V (schottky) = 3,07 V
Et cela « colle bien » avec l’ESP32, qui, pour rappel, requiert une tension d’alimentation comprise entre 3 et 3,6 volts (selon le datasheet de l’ESP32-S3-WROOM-1 qui m’a servi pour faire mes essais, section « 6.2 Recommended Operating Conditions » : Power supply voltage → 3.0V minimum / 3.3V typique / 3.6V maximum).
À noter aussi que ces valeurs de chute de tension pour la 1N5819 peuvent varier d’un fabricant à l’autre, ce qui complique parfois les choses !
Remarque : dans le commerce, vous pourrez trouver des diodes schottky bien meilleures que la « classique » 1N5819, en terme de chute de tension nominale à ses bornes. Mais attention à ne pas vous limiter à la considération de la valeur nominale donnée, car selon le courant que vous ferez passer à travers cette diode, la chute de tension peut être « grandement » impactée. Tout ça pour dire que les meilleures diodes « sur l’affiche » ne sont pas forcément les meilleures 😉
Comment fonctionnent les transistors bipolaires croisés (DTR/RTS → BOOT/RESET) ?
Autre point technique que nous allons voir ici : les 2 transistors bipolaires (Q1 et Q2), branchés de manière croisée, avec leurs résistances de base respectives (R4 et R5).
En fait, bien que paraissant compliqué, ce schéma est on ne peut plus simple. Car ces transistors fonctionnent tout simplement en tout-ou-rien : soit ils sont passants (« collecteur relié à l’émetteur »), soit ils sont bloqués (« collecteur ouvert »). En effet, leurs signaux de pilotage, /DTR et /RTS, ont que deux états possibles : 0 (état bas, donc « la masse ») ou 1 (état haut, soit « Vcc », donc +3,3V).
Au final, voici donc les 4 configurations possibles, selon si /DTR et /RTS sont à l’état bas ou haut :

Pour rappel, il faut bien garder à l’esprit que les lignes /RESET et /BOOT doivent avoir des résistances pull-up côté ESP32, ce qui fait que les états de « haute impédance » (notés ici « High-Z », en anglais) sont en fait des états hauts (égal à « 1 » si vous préférez, ou « Vcc ») ; l’autre état possible étant l’état bas, lorsqu’un transistor conduit et met à la masse telle ou telle ligne (état égal à « 0 » dans ce cas, quasi « Gnd » en pratique).
Comment calculer/dimensionner les pistes D+/D- (impédance 90Ω USB) ?
Une chose qui n’est pas visible sur le schéma, mais dont on doit parler avant de passer à la partie PCB / soudage PCB : le dimensionnement/écartement des pistes où circuleront les données USB (lignes « D+ » et « D- » sur le schéma).
En fait, il y a une impédance de ligne à respecter, dès lors qu’on travaille en USB 2.0 ou supérieur : avoir une impédance différentielle, entre les lignes D+ et D- de l’USB, égale à 90 ohms ±10 %. Et cela est d’autant plus vrai que la longueur des pistes et/ou la vitesse de transmission est importante. Inversement, lorsqu’on a des pistes plus large et/ou lorsqu’on communique à vitesse USB plus lente, on peut se « permettre » d’avoir une impédance légèrement « en dehors des clous ». C’est d’ailleurs le cas ici, où on a théoriquement 112 ohms d’impédance différentielle sur la ligne USB.
À noter que ces « 112 ohms » ne sortent pas d’un chapeau. C’est en fait le résultat retourné par « l’Outil de Calcul Kicad », qui permet d’estimer des impédances de lignes différentielles, en fonction des données qu’on entre dedans. Plus précisément, cela est retourné par l’outil « Ligne de Transmission », en sélectionnant le type « Ligne Microstrip Couplée », puis en entrant ses valeurs.
Voici à quoi cela ressemble, sous Kicad 9.0, sous Windows :


Comme valeurs remarquables, on retrouve :
- une épaisseur de PCB de 1,6mm (standard lorsqu’on travaille en bicouche, les pistes dessus et le plan de masse dessous)
- une épaisseur de cuivre de 35 µm (standard aussi)
- une largeur de piste différentielle (notée W) de 1mm (ce qui veut dire que les pistes D+ et D- auront une largeur de 1 mm)
- un écartement de pistes différentielles (noté S) de 0,7mm (ce qui signifie que les lignes D+ et D- seront écartées de 0,7 mm)
- une longueur de piste (notée L) de 18,2462 (les lignes D+ et D- devant avoir la même longueur, ou très peu de différences, donc on prend la longueur de l’une ou l’autre ici)
Ce qui donne une impédance différentielle (Zpair) égal à 112,42 ohms, dans ce cas.
Bien sûr, tout cela reste théorique et assez approximatif, d’un certain point de vue, car l’outil de Kicad n’est pas très poussé (il ne tient pas compte, par exemple, de plans de masses qui auraient été placés de part et d’autre des lignes de transmission, « côté pistes »). Cela étant dit, il donne déjà une idée de quelle largeur, quel écartement, et quelle longueur de piste, permet d’atteindre une impédance donnée. Et ça, c’est franchement très appréciable !
Remarque : une largeur de piste différentielle de 1mm, comme j’ai renseigné dans l’outil de calcul Kicad, est vraiment « énorme ». Surtout si on devait la router sur une prise USB-C ! Mais là, comme j’utilise une prise USB-A, il n’y a pas de soucis. Pour info, dans « l’industrie », on ne met pas de si larges pistes différentielles, car on travaille pas sur de simples PCB à deux couches (dessus/dessous), avec un écartement pistes/plan de masse de 1,6 mm, correspondant à l’épaisseur du PCB en lui-même. On travaille plutôt sur du PCB multicouche, ce qui permet d’avoir un plan de masse « immédiatement » placé en dessous des pistes différentielles, ce qui fait que la distance pistes/plan de masse est très petite, et par conséquent, que l’impédance cible de 90 ohms USB est « très rapidement » atteinte, avec de faibles largeur/espacement de pistes différentielles. Par contre, un PCB bi-couche et du multicouche, ce n’est pas le même prix !
Circuit imprimé : soudage des composants CMS et traversants
Passons maintenant à la pratique, avec tout d’abord la présentation du circuit imprimé de ce convertisseur USB UART pour ESP32 :

Comme vous pouvez le constater, tous les composants sont soudés du même côté, l’autre côté étant un plan de masse. La totalité de ceux-ci sont des composants montés en surface (CMS en français, ou SMD en anglais), exception faite des 2 connecteurs (USB-A à gauche, et pinHeader à droite).
Pour le soudage des CMS, j’ai simplement utilisé une plaque chauffante réglable en température, et de la pâte à braser basse température (bismuth/étain). Dans la pratique, on met de la pâte à braser sur les pastilles (là où viendront se poser les pattes de composants), on pose ensuite les composants SMD dessus, puis on chauffe le tout ! Plus précisément, concernant la chauffe, voici un exemple de profil de chauffe (celui que j’utilise couramment) :
- préchauffage : on monte la température de la t° ambiante jusqu’à 120°C, sur 1 minute environ
- maintien préchauffage : on maintient ces 120 °C, pendant 1 minute environ
- montée en chauffe : on augmente la température de chauffe de 120°C à 180/190°C, sur 1 minute environ
- refusion : on maintient ces 180/190 °C, pendant 30 secondes environ
- refroidissement : on arrête la chauffe, pour un refroidissement naturel/lent
En image, voici ce que ça donne, une fois les CMS brasés sur le PCB de notre adaptateur USB/UART pour ESP32 :

Remarque : là, j’ai appliqué la pâte à braser manuellement, à la seringue, ce qui fait qu’il peut y avoir quelques « bourrelets » au niveau des soudures. On aurait pu améliorer les choses en utilisant un stencil, c’est à dire un masque fin (pochoir), qui, après pose de pâte et raclage dessus, aurait permis de déposer une quantité plus approprié de soudure ! Par contre, ce stencil (pochoir) a un coût, donc c’est à voir en fonction de ses propres moyens, et selon si on se sent à l’aise d’appliquer la soudure avec ou « sans guide » 😉
Reste alors à souder les 2 composants restants, à savoir : le connecteur USB à gauche, et les broches coudées à droite. Une fois fait, voici à quoi ressemble le PCB de cet adaptateur USB ↔ UART pour programmation d’ESP32, de mon côté :

Encore une fois, ne faites pas trop attention à mes soudures trop chargées en pâte à braser, au niveau des CMS. Car comme je n’ai pas utilisé de pochoir (stencil), il est toujours plus délicat d’arriver à déposer la « bonne dose » de soudure, à chaque endroit !
Liste des composants + matériels utilisés
Au niveau des composants utilisés dans ce programmateur d’ESP32 avec autoboot/reset, on retrouve :
Et au niveau matériel :
- pour le soudage des CMS :
- pour le soudage des composants traversants :
- un fer à souder électronique, filaire
- de la soudure étain (perso, j’utilise de la soudure plomb/étain en rouleau, qu’il me reste !)
Voilà ! Il est temps de passer aux essais, maintenant 🙂
Comment programmer un ESP32 S3 avec cette carte, sous Arduino IDE ?
Avant toute chose, il va falloir brancher ce convertisseur USB↔UART pour ESP32 à son ordinateur. Cela peut se faire soit en branchant le PCB directement sur une prise USB de son PC (à éviter !), soit en utilisant une rallonge USB mâle/femelle (ce que je vous recommande !), comme visible ci-dessous :

Une fois fait, l’adaptateur USB↔UART doit automatiquement être détecté par votre ordi, au bout de quelques secondes (ou dizaines de secondes, si votre votre PC est plus ancien). Sous Windows, dans le gestionnaire de périphériques, voici comment apparaît ce convertisseur USB/UART pour ESP32 :

Important : au passage, notez bien le port COM associé du convertisseur USB/UART (ici : « COM3 »), car il faudra ensuite le sélectionner dans Arduino IDE, pour programmer ensuite votre ESP32.
Du reste, si jamais votre PC ne reconnaît pas la carte PCB avec le CH340, alors il faudra installer les « bons » drivers manuellement. Pour cela, il suffira alors d’aller les télécharger :
- soit sur le site du fabricant WCH : https://www.wch-ic.com/downloads/CH341SER_EXE.html (CE QUE JE NE VOUS RECOMMANDE PAS VRAIMENT, du fait que ceux-ci sont parfois instables sous Windows, bien qu’ils s’agissent des derniers drivers officiels, fournis par le fabricant !)
- soit sur le site de SparkFun : https://learn.sparkfun.com/tutorials/how-to-install-ch340-drivers (ceux-ci fonctionnement très bien, du moins sous Windows !)
Rien de bien compliqué en somme, une fois que l’adaptateur USB/UART est reconnu par l’ordi !
Ensuite, il reste plus qu’à ouvrir son code (à télécharger sur l’ESP32) sous Arduino IDE, de sélectionner le bon port COM et le bon modèle d’ESP32 cible, pour pourvoir téléverser un programme dans son ESP32 !
Nota : pour que ce soit plus parlant encore, je vous ferais un 2ème article en suivant, vous montrant une carte ESP32-S3 faite-maison, programmée via ce convertisseur USB-UART ! Ainsi, vous verrez, en pratique, comment uploader un programme dans votre ESP32 en toute simplicité !
Liens / téléchargements
Pour ceux que ça intéresse, voici :
- le schéma électronique complet (format PDF)
- le lien pour reproduire le PCB de ce convertisseur USB-UART (fabricant = PCBWay)
POUR FAIRE FABRIQUER CE CIRCUIT IMPRIMÉ :
→ Cliquer sur le lien juste ci-dessus, pour ouvrir ce projet sur PCBWay
→ Cliquer sur « Add to cart », pour ajouter ce projet à votre panier
→ Attendre quelques minutes (24/48h maximum) pour que les fichiers de ce projet soient vérifiés (surveiller l’état d’avancement des éléments dans le panier ; ils resteront grisés tant que ça n’a pas été validé, et colorés une fois faits)
→ Finaliser la commande de circuit imprimé (en ajoutant un stencil, si souhaité)
Niveau coût de fabrication, PCBWay est franchement bien placé, alors ne vous en privez pas !
Et les datasheets des principaux composants utilisés ici :
- le datasheet de la diode schottky 1N5819W de chez JSM SEMICONDUCTOR (format PDF)
- le datasheet des puces CH340 de chez WCH-IC (format PDF)
- le datasheet du régulateur de tension ajustable AMS1117-ADJ de chez Advanced Monolithic Systems (format PDF)
Programmateur USB UART auto boot/reset ESP32 : conclusion !
Voilà, nous sommes au bout de cet article sur ce convertisseur USB/UART avec autoreset et autoboot pour ESP32 ! J’espère qu’il est suffisamment clair et détaillé pour vous 🙂
[AJOUT] Pour info, cet article a été complété par un second article en suivant, qui vous montre comment programmer un ESP32 S3 en pratique ! Alors profitez-en pour y faire un saut, et voir comment tout cela s’interconnecte !
Jérôme.
À découvrir aussi : piloter des écrans TFT (ili9341) avec un ESP32 !
(*) Mis à jour le 07/12/2025



Une telle qualité dans la rédaction de ces articles mérite un don, voilà, c’est fait.
Merci infiniment ❤️
Bonjour Jérôme félicitation pour tes descriptions.
Je suis un peu comme toi je fais de la formation en électronique ainsi que la préparation à la licence radio amateur. Tout cela comme toi bénévolement. Malgré mes 78 « printemps ».
Bonne continuation
Claude F6HYT
Héhé ! L’âge n’est rien, l’important est de partager entre nous !