ESP32 - Module MOSFET
Ce tutoriel vous explique comment utiliser le module MOSFET comme interrupteur de puissance avec l'ESP32 et MicroPython. Plus précisément, nous allons apprendre :
- Comment connecter le module MOSFET, une alimentation 12V et une bande LED 12V (ou un moteur/ventilateur 12V DC) à un ESP32.
- Comment écrire le code MicroPython pour que l'ESP32 allume et éteigne la charge 12V, et change sa luminosité ou sa vitesse avec le PWM.
- Comment choisir entre les versions AOD4184, LR7843 et FR120N du module.

Matériel nécessaire
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables ESP32 (ESP32 inclus) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
À propos du module MOSFET
Imaginez le module MOSFET comme un robinet pour le courant électrique. L'ESP32 tourne le robinet avec un tout petit signal de 3,3 volts, et un courant bien plus grand, venant d'une alimentation 12 volts séparée, circule vers votre appareil. Les appareils typiques sont les bandes LED, les moteurs DC, les ventilateurs, les pompes, les électrovannes et les petits éléments chauffants.
Beaucoup de débutants essaient d'abord un relais pour ce travail. Un module MOSFET a plusieurs avantages clairs par rapport à un relais :
- Il ne fait aucun clic et n'a pas de pièce mobile, donc il dure beaucoup plus longtemps.
- Il commute très vite, donc il peut faire du PWM. Vous pouvez ainsi atténuer une lumière ou ralentir un moteur. Un relais ne peut faire que tout ouvert ou tout fermé.
Il y a une limite : il ne gère que le courant continu (DC). Il n'est pas du tout fait pour le secteur AC. Si vous devez commander un appareil AC, utilisez plutôt le ESP32 - Relais..
Vous pouvez acheter cette carte avec trois puces MOSFET différentes : AOD4184 (aussi vendue sous le nom D4184), LR7843 et FR120N. À part la puce, c'est la même carte. La taille, l'ordre des broches, le câblage et le code MicroPython ci-dessous sont identiques, donc ce guide couvre les trois.
| AOD4184 | LR7843 | FR120N | |
|---|---|---|---|
| MOSFET | AOD4184A (canal N) | IRLR7843 (canal N) | IRFR120N (canal N) |
| Tension de charge max. (valeur du MOSFET) | 40V DC | 30V DC | 100V DC |
| Courant max. (valeur du MOSFET) | 50A | 161A | 9,4A |
| Résistance à l'état passant RDS(on) | environ 7 mΩ | environ 3,3 mΩ | environ 210 mΩ |
| Courant pratique sans dissipateur | environ 10–15A | environ 15A | environ 2A |
| Signal de commande | logique 3,3V / 5V, actif à l'état HAUT | logique 3,3V / 5V, actif à l'état HAUT | logique 3,3V / 5V, actif à l'état HAUT |
| Isolation | optocoupleur PC817 | optocoupleur PC817 | optocoupleur PC817 |
| PWM | oui, rester ≤ ~1 kHz | oui, rester ≤ ~1 kHz | oui, rester ≤ ~1 kHz |
| Type de charge | DC uniquement | DC uniquement | DC uniquement |
Lequel faut-il acheter ? Un guide rapide :
- Fort courant en 12V ou 24V (par exemple une longue bande LED très lumineuse ou un gros moteur) : prenez le LR7843. Sa résistance est la plus faible, donc il chauffe le moins. Sa tension maximale est de 30V.
- Usage général en 12V, 24V ou 36V : prenez l'AOD4184. C'est un choix équilibré avec un fort courant et jusqu'à 40V.
- Tension plus élevée mais petit courant, comme un appareil 24V ou 48V : prenez le FR120N. Il accepte jusqu'à 100V, mais sa résistance est élevée, donc prévoyez seulement environ 2A sans dissipateur.
Un avertissement sur les gros chiffres du tableau. 50A et 161A sont les limites de la puce seule. La petite carte chauffera bien avant. La chaleur est la vraie limite. Laissez votre appareil fonctionner un moment, puis touchez la puce avec précaution. Si elle est trop chaude pour y garder le doigt, ajoutez un dissipateur ou réduisez la charge.
Brochage

Le module a un côté basse puissance pour l'ESP32 et un côté haute puissance pour la charge.
Côté basse puissance (connecteur 2 broches au pas de 2,54mm, donc il tient sur une breadboard) :
- Broche PWM : à connecter à une broche GPIO de l'ESP32. Ce tutoriel utilise GPIO18.
- Broche GND : à connecter à GND (0 volt) de l'ESP32.
Côté haute puissance (3 borniers à vis) :
- Broche + : à connecter à la sortie positive de l'alimentation de la charge (12 volts dans ce tutoriel). Le fil positif de la charge va aussi dans ce même bornier. Vous pouvez aussi joindre d'abord les deux fils, puis les insérer.
- Broche LOAD : à connecter au fil négatif de la charge. Le MOSFET allume et coupe ce fil.
- Broche − : à connecter à la sortie négative (0 volt) de l'alimentation de la charge.
Le texte imprimé sur la carte peut être un peu différent selon les lots. Vérifiez les marquages de votre module avant de serrer les vis.
Que se passe-t-il à l'intérieur
À l'intérieur de la carte, le signal de GPIO18 entre dans la broche PWM, passe par une petite résistance et arrive à une LED à l'intérieur de l'optocoupleur PC817. La lumière de cette LED active un phototransistor, qui se trouve aussi dans le PC817. Le phototransistor pilote la grille du MOSFET, et une résistance tire cette grille vers 0 volt tant que l'optocoupleur est éteint. Le MOSFET est placé entre la borne LOAD et la borne −, donc il coupe le fil négatif de la charge, pas le positif. Votre charge se trouve entre + et LOAD.
Voyons maintenant ce qui se passe pour chaque type de signal sur GPIO18.
Quand GPIO18 est à 0 volt (LOW)
Vous obtenez cela avec pwm.duty_u16(0), soit un rapport cyclique de 0 %.
- La broche donne 0 volt, donc aucun courant n'entre dans la LED de l'optocoupleur. La LED reste éteinte.
- Sans lumière, le phototransistor reste bloqué. La résistance de rappel à la masse (pull-down) maintient la grille du MOSFET à 0 volt.
- Le MOSFET est OFF. Il se comporte comme un interrupteur ouvert entre LOAD et −.
- Le fil négatif de la charge n'est pas relié à la masse, donc aucun courant ne peut circuler. La charge voit 0 volt et est OFF.
Quand GPIO18 est à 3,3 volts (HIGH)
Vous obtenez cela avec pwm.duty_u16(65535), soit un rapport cyclique de 100 %.
- La broche à 3,3 volts envoie quelques milliampères dans la LED de l'optocoupleur, et elle s'allume. Vous ne pouvez pas la voir, car elle est enfermée dans la puce.
- La lumière active le phototransistor. La grille du MOSFET reçoit alors environ la moitié de la tension d'alimentation de la charge, soit environ 6 volts avec un adaptateur 12 volts.
- Le MOSFET devient complètement ON. Il se comporte comme un interrupteur fermé avec une très faible résistance : seulement quelques milliohms pour l'AOD4184 et le LR7843, et environ 0,2 ohm pour le FR120N.
- Le courant circule dans la boucle : adaptateur + → borne + → charge → borne LOAD → MOSFET → borne − → adaptateur −.
- La charge reçoit presque les 12 volts complets et fonctionne à pleine puissance.
La LED n'a besoin que d'un petit courant. C'est pourquoi une broche ESP32 en 3,3 volts pilote le module sans composant supplémentaire. Une carte en 5 volts fonctionnerait aussi.
Quand GPIO18 envoie un signal PWM
Vous obtenez cela avec n'importe quelle valeur entre 0 et 65535 dans pwm.duty_u16(). Le rapport cyclique est la valeur divisée par 65535.
- La broche passe très vite de 0 volt à 3,3 volts. Le code ici utilise 500 Hz, ce qui veut dire 500 fois par seconde.
- Le MOSFET suit chaque changement. Il est ON pendant chaque partie HIGH et OFF pendant chaque partie LOW.
- La charge reçoit des impulsions de 12 volts. Le rapport cyclique est la part du temps pendant laquelle le signal reste HIGH.
- La tension moyenne et la puissance moyenne sont égales au rapport cyclique multiplié par la valeur maximale.
Trois exemples avec une alimentation de 12 volts :
- duty_u16(6553), rapport cyclique de 10 % : ON pendant un dixième du temps. La moyenne est d'environ 1,2 volt, soit environ un dixième de la puissance.
- duty_u16(32767), rapport cyclique de 50 % : ON pendant la moitié du temps. La moyenne est d'environ 6 volts, soit environ la moitié de la puissance.
- duty_u16(58981), rapport cyclique de 90 % : ON pendant neuf dixièmes du temps. La moyenne est d'environ 10,8 volts, proche de la pleine puissance.
Ce que vous remarquez sur la charge :
- Une bande LED semble moins lumineuse. En fait elle scintille, mais beaucoup trop vite pour vos yeux.
- Un moteur, un ventilateur ou une pompe tourne plus lentement. Sa masse en rotation lisse les impulsions.
Pourquoi la fréquence doit rester basse (environ 500 Hz à 1 kHz) : le PC817 est un composant lent. Si le PWM est trop rapide, le MOSFET ne peut pas passer complètement à ON puis complètement à OFF. La charge ne reçoit pas des impulsions propres, et le MOSFET chauffe.
Le script ci-dessous utilise ces étapes : il passe de 10 % à 100 % par paliers de 10 %.
Points à retenir
- Alimentation d'au moins 6 volts : la tension de grille est fabriquée à partir de l'alimentation de la charge, donc une alimentation de 5 volts est trop faible. Utilisez environ 6 volts ou plus, et 9 volts ou plus si votre charge tire plus de quelques ampères.
- Deux masses séparées : à cause de l'optocoupleur, la masse de l'ESP32 et la masse de la charge ne sont pas reliées sur la carte. Laissez-les séparées.
- Pas de diode de roue libre (flyback) sur la carte : pour les moteurs, ventilateurs, pompes, électrovannes et relais, vous devez en ajouter une vous-même. Voir les exemples de câblage ci-dessous.
Schéma de câblage
L'ESP32 ne touche que les deux broches de commande. L'adaptateur 12 volts se connecte uniquement aux borniers à vis. Gardez le 12 volts loin de toutes les broches de l'ESP32, sinon la carte peut être détruite.
Câblage avec une bande LED 12V
Une bande LED est la charge la plus simple pour commencer. Elle ne demande aucun composant supplémentaire.

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Pas de plaque d'essai ? Le même circuit peut être câblé sans, comme ci-dessous :

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
| Broche du module MOSFET | Se connecte à |
|---|---|
| PWM | ESP32 GPIO18 |
| GND | ESP32 GND |
| + | adaptateur 12V + (via la prise d'alimentation DC) et fil + de la bande LED |
| LOAD | fil − de la bande LED |
| − | adaptateur 12V − (via la prise d'alimentation DC) |
Brancher d'autres appareils 12 volts
La bande LED n'est qu'un choix. Le même module peut aussi commander un moteur, un ventilateur, une pompe ou une électrovanne. Les fils de l'ESP32 restent les mêmes (GPIO18 vers PWM, GND vers GND). Seul l'appareil sur les borniers à vis change, et il suit toujours ce schéma :
- Adaptateur + vers +, adaptateur − vers −.
- Fil + de l'appareil aussi vers +, fil − de l'appareil vers LOAD.
La tension de l'adaptateur doit correspondre à l'appareil. Un appareil 12 volts demande un adaptateur 12 volts, et l'alimentation ne doit jamais être inférieure à 6 volts. Regardez aussi quel courant l'appareil consomme. Le FR120N convient seulement aux petites charges, environ 2 ampères sans dissipateur. Pour des charges plus grosses, prenez l'AOD4184 ou le LR7843.
La plupart de ces appareils ont une bobine à l'intérieur. Chaque fois que le MOSFET coupe le courant, la bobine envoie un court pic de haute tension. Avec le temps, ces pics peuvent détruire le MOSFET. Une diode de roue libre (flyback) (par exemple 1N5819 ou 1N4007) donne au pic un chemin sûr. Placez-la entre les deux fils de l'appareil :
- Cathode de la diode (l'extrémité avec la bande) : au fil + de l'appareil (côté +)
- Anode de la diode : au fil − de l'appareil (côté LOAD)
Si la diode est dans le mauvais sens, elle met l'alimentation en court-circuit quand le MOSFET passe à ON. Vérifiez deux fois la bande.
Vous n'avez pas besoin de modifier le script MicroPython pour les appareils ci-dessous. La seule exception est une électrovanne : appelez seulement set_load(100) et set_load(0), et omettez la variation progressive.
Exemple : moteur DC 12 volts

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Si vous n'utilisez pas de plaque d'essai, câblez-le ainsi :

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
- Fil + du moteur vers +, fil − du moteur vers LOAD.
- La diode de roue libre (flyback) est indispensable ici.
- Le rapport cyclique PWM règle la vitesse du moteur.
Le module ne peut faire tourner le moteur que dans un seul sens. Pour le faire tourner dans les deux sens, il faut un pilote de moteur comme le L298N. Voir ESP32 - moteur à courant continu. pour cela.
Exemple : ventilateur de refroidissement 12 volts

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Voici le même câblage sans plaque d'essai :

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Un ventilateur a un fil rouge (+) et un fil noir (−). Certains ventilateurs ont aussi un fil jaune pour le signal de vitesse. Laissez celui-ci non connecté.
- Fil rouge vers +, fil noir vers LOAD.
- Ajoutez aussi la diode de roue libre (flyback). Elle coûte peu et ne fait pas de mal.
- Le rapport cyclique règle la vitesse. Certains ventilateurs ne démarrent pas avec un rapport très bas, donc commencez au-dessus d'environ 30 %.
Pour plus d'idées sur les ventilateurs, voir ESP32 - Contrôle du ventilateur..
Exemple : électrovanne 12 volts (normalement fermée)

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Si vous n'utilisez pas de plaque d'essai, câblez-le ainsi :

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
- Fil + de la vanne vers +, fil − de la vanne vers LOAD.
- Elle a une bobine, donc ajoutez la diode.
- ON complet ouvre la vanne, et OFF la ferme. Utilisez seulement ON et OFF, pas le PWM.
Exemple : pompe à eau 12 volts

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Vous pouvez aussi monter ce circuit sans plaque d'essai. Voici le même câblage :

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
- Fil + de la pompe vers +, fil − de la pompe vers LOAD.
- La diode est nécessaire ici aussi.
- Le rapport cyclique règle le débit d'eau.
- Ne laissez jamais la pompe fonctionner sans eau.
Exemple : serrure à solénoïde 12 volts

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Le schéma ci-dessous montre les mêmes connexions sans plaque d'essai :

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
- Fil + de la serrure vers +, fil − de la serrure vers LOAD.
- Ajoutez la diode, comme pour les autres appareils à bobine.
- Utilisez seulement 100 % ou 0 %. Ne la variez pas.
- Mettez-la sur ON juste le temps de déverrouiller. Si elle reste sur ON longtemps, elle chauffe.
Exemple : bande LED 12 volts, côté alimentation de près

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Vous pouvez aussi monter ce circuit sans plaque d'essai. Voici le même câblage :

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
- Fil + de la bande (souvent marqué 12V) vers +, fil − de la bande vers LOAD.
- Aucune diode n'est nécessaire, car une bande n'a pas de bobine.
- Le rapport cyclique règle la luminosité. Une bande plus longue consomme plus de courant, donc vérifiez son courant avant de choisir le module.
- Cela fonctionne seulement pour une bande monochrome. Les bandes RGB et adressables fonctionnent différemment.
Code ESP32 MicroPython - Module MOSFET
Aucune bibliothèque supplémentaire n'est nécessaire. Le script utilise machine.PWM, intégré à MicroPython. Il crée une sortie PWM de 500 Hz sur GPIO18. La fonction set_load() prend un pourcentage de 0 à 100, le convertit en valeur duty_u16() de 0 à 65535, et affiche le niveau dans le Shell.
À chaque tour de boucle, la charge est complètement allumée pendant 2 secondes et complètement éteinte pendant 2 secondes. Ensuite, la puissance monte de 10 % à 100 % par paliers de 10 %, avec une demi-seconde par palier. Puis elle redescend à 0 % de la même façon. Une pause de 1 seconde suit, et la boucle recommence.
Étapes rapides
Voici les instructions pour configurer et exécuter votre code MicroPython sur l'ESP32 avec l'IDE Thonny :
- Assurez-vous que Thonny IDE est installé sur votre ordinateur.
- Vérifiez que le firmware MicroPython est chargé sur votre carte ESP32.
- Si vous débutez avec MicroPython sur l'ESP32, commencez par le guide ESP32 - Premiers pas..
- Connectez le module MOSFET, la bande LED (ou le ventilateur) et la prise d'alimentation DC à la carte ESP32 selon le schéma fourni. Laissez l'adaptateur 12V débranché pour l'instant.
- Connectez la carte ESP32 à votre ordinateur avec un câble USB.
- Ouvrez Thonny IDE sur votre ordinateur.
- Dans Thonny, allez dans Outils Options, ouvrez l'onglet Interpréteur, et choisissez MicroPython (ESP32) dans le menu déroulant.
- Copiez le code MicroPython fourni et collez-le dans l'éditeur de Thonny.
- Enregistrez le code sur votre ESP32 en :
- Cliquant sur le bouton Enregistrer ou en appuyant sur Ctrl+S.
- Choisissant Périphérique MicroPython dans la boîte de dialogue d'enregistrement.
- Saisissant main.py comme nom de fichier.
- Branchez l'adaptateur 12V sur la prise d'alimentation DC.
- Cliquez sur le bouton vert Exécuter (ou appuyez sur F5) pour exécuter le script.
- Regardez la bande LED. Elle brille à pleine luminosité pendant 2 secondes, s'éteint pendant 2 secondes, puis monte doucement en luminosité et redescend doucement. Avec un ventilateur, vous entendrez plutôt la vitesse monter et descendre.
- Consultez le message dans le Shell en bas de Thonny.
Si vous nommez votre script main.py et l'enregistrez sur le périphérique MicroPython, il s'exécutera automatiquement à chaque mise sous tension de l'ESP32.
Le Shell affiche les messages, mais la bande reste éteinte ? Mesurez votre alimentation de charge. Elle doit être d'environ 6 volts ou plus, sinon le MOSFET ne s'ouvrira pas.