ESP32 - Optocoupleur PC817 : Surveiller un Signal d'Entrée CC 12V/24V
Ce tutoriel vous explique comment utiliser l'ESP32 pour savoir si un appareil 12V ou 24V - une électrovanne, une pompe, un chauffage, une machine - fonctionne réellement en ce moment, en surveillant sa propre alimentation à travers un module optocoupleur PC817 qui ne partage aucune connexion électrique avec l'ESP32, et en affichant le résultat sur le Moniteur Série. Nous utilisons le module prêt à l'emploi dans la variante 3-5V, 12V ou 24V qui correspond à votre signal, et la puce nue à quatre broches est présentée à la fin pour ceux qui préfèrent construire l'entrée eux-mêmes.
Matériel Requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables ESP32 (ESP32 inclus) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
Vous n'avez pas besoin de plus d'un module. Achetez uniquement la variante qui correspond à la tension que vous allez surveiller, comme expliqué dans la section suivante.
À Propos de l'Optocoupleur PC817
Le PC817 est un optocoupleur à 4 broches, également appelé photocoupleur ou opto-isolateur. À l'intérieur de son petit boîtier noir se trouve une LED infrarouge placée face à un phototransistor, séparés par un espace isolant. Lorsque le courant traverse la LED, sa lumière rend le transistor passant, de sorte que le signal traverse l'espace sous forme de lumière plutôt que sous forme d'électricité. Tout le principe est là : les deux côtés de la puce restent électriquement séparés, et c'est exactement ce qui permet à un ESP32 en 3,3V de surveiller un circuit 12V ou 24V sans partager un seul fil avec lui.
Deux tâches que le PC817 accomplit bien dans un projet ESP32 :
- Surveiller un capteur de proximité industriel 24V ou une sortie d'automate (PLC) et signaler son état via WiFi.
- Savoir si une électrovanne 12V ou la bobine d'un contacteur de pompe est actuellement alimentée.
Dans les deux cas, l'ESP32 ne voit jamais que ses propres niveaux logiques 3,3V, tandis que le côté 12V ou 24V reste derrière la barrière d'isolation.
| Paramètre | Valeur |
|---|---|
| Tension d'isolation | 5000 Vrms (1 minute) |
| Tension directe de la LED d'entrée (Vf) | environ 1,2 V typique, 1,4 V max |
| Courant direct de la LED d'entrée (If) | 20 mA max en continu, 5-20 mA en fonctionnement normal, 10 mA est une bonne cible |
| Tension collecteur-émetteur de sortie (VCEO) | 35 V max |
| Courant de collecteur de sortie (IC) | 50 mA max |
| Dissipation de puissance du collecteur | 150 mW |
| Rapport de transfert de courant (CTR) | 50% à 600% selon la classe |
| Temps de montée / temps de descente | environ 4 us / environ 3 us typique |
| Température de fonctionnement | -30 C à +100 C |
| Boîtier | DIP à 4 broches, broche 1 repérée par un point ou une encoche |
Quel Module Optocoupleur PC817 Me Faut-il ?
Un module optocoupleur PC817 est livré avec sa résistance série déjà montée, et cette résistance est dimensionnée pour une seule tension d'entrée. C'est pourquoi le module est vendu en trois variantes distinctes plutôt que sous la forme d'une seule carte acceptant n'importe quelle tension. Choisissez la variante en fonction du signal que vous souhaitez surveiller :
| Le signal que vous voulez surveiller | La variante de module à acheter |
|---|---|
| Une ligne 12V - une électrovanne, une bobine de contacteur de pompe, un accessoire automobile | Le module 12V |
| Une ligne 24V - une sortie d'automate (PLC), un capteur de proximité industriel, un signal de machine | Le module 24V |
| Un signal logique 3,3V ou 5V - un autre microcontrôleur, une carte capteur, une carte de commande intégrée | Le module 3-5V |
C'est la seule décision d'achat de cette page qui peut vous coûter un composant. Un module 12V alimenté par une ligne 24V fait passer environ le double du courant prévu dans sa LED interne et l'endommagera. Un module 24V alimenté par une ligne 12V a le problème inverse : sa LED est sous-alimentée, donc la sortie peut commuter en retard, commuter de manière peu fiable, ou ne jamais commuter du tout. Avec un module, il n'y a rien à calculer - la variante correspond à la résistance, donc choisissez la variante et le dimensionnement est fait.
Brochage du Module Optocoupleur PC817
La même puce est vendue prête à l'emploi sous forme de module d'isolation à optocoupleur PC817, en versions 1, 2, 4 et 8 canaux. La carte porte la résistance série adaptée à sa variante, généralement une LED d'état par canal, des borniers à vis côté entrée et des broches à en-tête côté sortie :
- Côté entrée : un bornier à vis + (ou IN+) et un bornier - (ou IN-). Connectez ces deux bornes au signal que vous surveillez et à la masse de ce même circuit isolé, à la tension pour laquelle la variante a été conçue et dans le bon sens.
- Côté sortie : des broches à en-tête VCC, GND et OUT (nommées DO ou OUT1..OUTn sur les cartes multicanaux). Connectez cette broche VCC à la broche 3,3V de l'ESP32, cette broche GND à une broche GND de l'ESP32, et cette broche OUT à une broche d'entrée numérique de l'ESP32.

Nous recommandons la version module pour ce projet. La résistance est déjà correcte pour la tension pour laquelle la variante a été conçue, les borniers à vis maintiennent les gros câbles de terrain bien mieux qu'une breadboard, et la LED intégrée vous permet de voir l'état de l'entrée sans lire le moindre code.
Déterminer si Votre Module est Actif à l'État BAS ou Actif à l'État HAUT
La broche de l'ESP32 utilise sa résistance de pull-up interne, elle est donc à l'état HIGH d'elle-même et quelque chose doit la tirer vers le bas. Sur la puce nue, ce quelque chose est le phototransistor, et le résultat relève de la physique pure :
- Le signal externe est PRÉSENT, la LED est allumée, le transistor conduit, et la broche de l'ESP32 lit LOW.
- Le signal externe est ABSENT, la LED est éteinte, le transistor est bloqué, et la broche de l'ESP32 lit HIGH.
Avec un module, c'est une autre histoire, et c'est là qu'on peut perdre une soirée. Certains fabricants relient directement le phototransistor à la broche OUT, ce qui donne exactement le comportement actif à l'état BAS décrit ci-dessus. D'autres ajoutent un étage inverseur sur la carte, de sorte que OUT suit l'entrée et lit HIGH lorsque le signal est présent. Les deux types sont en vente, ils sont impossibles à distinguer sur une photo de produit, et l'annonce indique rarement lequel se trouve dans l'enveloppe. Donc ne supposez rien - vérifiez. Le test prend moins d'une minute :
- Câblez le module comme indiqué ci-dessous et téléversez le sketch de cette page, qui est configuré pour un module actif à l'état BAS.
- Laissez les bornes d'entrée non connectées et lisez ce qu'affiche le Moniteur Série. C'est votre état de repos.
- Appliquez votre signal sur les bornes d'entrée et lisez ce qui s'affiche maintenant.
- Ce que la broche indique lorsque le signal est présent correspond au niveau actif de votre module. Si le Moniteur Série passe de idle à LIVE lorsque vous appliquez le signal, votre module est actif à l'état BAS et le sketch est déjà correct. S'il fait l'inverse, votre module est actif à l'état HAUT.
- La LED d'état du module sert de contre-vérification, car elle s'allume chaque fois que le côté entrée est alimenté. Une LED allumée alors que le Moniteur Série indique toujours idle est la signature d'un module actif à l'état HAUT plutôt que d'un défaut de câblage.
S'il s'avère que c'est l'autre type, rien n'est à réécrire. Le sketch contient une seule constante, MODULE_ACTIVE_LOW, en haut du fichier. Réglez-la sur false, téléversez à nouveau, et chaque lecture du programme s'inverse en conséquence.
La Règle d'Isolation
NE connectez PAS la masse du circuit 12V ou 24V au GND de l'ESP32. Sur un module, cela signifie que la borne d'entrée - reste côté terrain et ne rejoint jamais la broche GND du module. Les deux masses doivent rester séparées. Cette séparation est la seule raison pour laquelle le PC817 se trouve dans le circuit : c'est elle qui empêche un défaut côté 24V d'atteindre l'ESP32. Si vous reliez les masses, le PC817 commute toujours et le code fonctionne toujours, mais l'isolation disparaît et la carte est de nouveau exposée.
Choisir une Broche GPIO Sûre sur l'ESP32
L'ESP32 est une carte 3,3V et ses broches GPIO ne tolèrent PAS le 5V, donc le côté sortie du module PC817 doit être alimenté par la broche 3,3V, jamais par la broche 5V/VIN. Deux autres règles spécifiques à l'ESP32 sont importantes pour ce projet :
- Évitez les broches en entrée seule GPIO34, GPIO35, GPIO36 et GPIO39. Elles n'ont AUCUNE résistance de pull-up interne, donc INPUT_PULLUP n'a aucun effet sur elles et la sortie du PC817 resterait flottante. Si vous avez vraiment besoin de l'une de ces broches, vous devez ajouter vous-même une résistance externe de 10 kohm entre la broche et le 3,3V.
- Évitez les broches de configuration (strapping) GPIO0, GPIO2, GPIO12 et GPIO15. L'ESP32 les lit au démarrage, et un PC817 qui tire l'une d'elles au mauvais niveau à la mise sous tension peut empêcher la carte de démarrer.
Ce tutoriel utilise GPIO19, qui est une broche à usage général avec une résistance de pull-up interne fonctionnelle. GPIO4, GPIO13, GPIO16, GPIO17, GPIO18, GPIO21, GPIO22, GPIO23, GPIO25, GPIO26, GPIO27, GPIO32 et GPIO33 sont des choix tout aussi bons. Consultez le tutoriel sur le brochage de l'ESP32 pour avoir une vue complète.
Schéma de Câblage
Câbler le module optocoupleur PC817 à l'ESP32
Le côté entrée est le même quelle que soit la variante achetée : les deux borniers à vis vont au signal que vous surveillez et à la masse de ce même circuit isolé, et aucune résistance de votre part n'intervient nulle part.
| Module PC817 | Se connecte à |
|---|---|
| Borne IN+ | → le fil de signal que vous surveillez, à la tension de votre variante |
| Borne IN- | → la masse de ce même circuit UNIQUEMENT |
| Broche VCC | → 3,3V de l'ESP32 |
| Broche GND | → GND de l'ESP32 |
| Broche OUT | → GPIO19 de l'ESP32 |
C'est côté sortie que vous avez le choix entre deux façons de rejoindre l'ESP32 :
- Comment connecter l'ESP32 et le module optocoupleur PC817 avec une breadboard

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Si vous ne savez pas comment alimenter l'ESP32 et d'autres composants, consultez les instructions dans le tutoriel suivant : Comment alimenter l'ESP32..
- Comment connecter l'ESP32 et le module optocoupleur PC817 avec un bloc de connexion à vis pour ESP32

La version avec bornier à vis est celle à utiliser dans une installation réelle. Le câblage de terrain d'une machine 24V est épais et il bouge, et un contact de breadboard qui se desserre vous donne une lecture fantôme très difficile à déboguer.
Notez que ces deux schémas ne diffèrent que par la façon dont les trois broches de sortie du module rejoignent l'ESP32. La variante que vous avez achetée détermine ce qui se passe sur les bornes d'entrée et ne change rien côté sortie, il s'agit donc de deux choix de câblage et de trois variantes - pas de six articles différents à acheter.
Câbler le PC817 en parallèle avec la charge 12V à surveiller
Tout ce qui précède suppose que vous disposez déjà d'un fil de signal libre à lire. La plupart des projets réels n'en ont pas. Ce qu'ils ont, c'est une électrovanne 12V, ou la bobine du contacteur qui démarre une pompe, et la question est de savoir si cette bobine est alimentée en ce moment. Le PC817 y répond - mais seulement si vous le branchez correctement sur le circuit.
L'entrée du module se branche aux bornes de l'appareil, en parallèle avec lui, et jamais en série. Placez-la en série et tout le courant de charge de la vanne ou de la bobine du contacteur traverse la minuscule LED à l'intérieur du boîtier et détruit le PC817 dès que le circuit s'active. Câblé en parallèle, rien dans le circuit existant n'est coupé, débranché ou dévié ; vous ajoutez simplement deux fils sur des bornes qui existent déjà.
| Point de connexion | Se connecte à |
|---|---|
| Borne positive (commutée) de la bobine | → bornier à vis IN+ du module 12V |
| Borne négative (retour) de la bobine | → bornier à vis IN- du module 12V |
| Broche VCC du module | → 3,3V de l'ESP32 |
| Broche GND du module | → GND de l'ESP32 |
| Broche OUT du module | → GPIO19 de l'ESP32 |
Il n'y a pas de résistance série à ajouter au point de prélèvement - le module 12V possède déjà celle dont il a besoin, et c'est exactement pour cela que la variante doit correspondre à la tension de la bobine. Le prélèvement ne consomme que le faible courant nécessaire à la LED d'entrée du module. Comparé aux centaines de milliampères qu'une électrovanne ou une bobine de contacteur consomme lorsqu'elle est maintenue, ce n'est rien, donc l'appareil continue de fonctionner exactement comme avant. Il s'agit d'une mesure en lecture seule, pas d'une intervention.
La polarité compte ici. Le côté entrée du PC817 est une LED et elle ne conduit que dans un seul sens, donc si les deux bornes d'entrée sont inversées, le module ne s'active tout simplement jamais, et vous passerez une soirée à chercher une panne qui n'existe pas. Déterminez quel côté du prélèvement est positif avant de dénuder un fil.
Une électrovanne, une bobine de contacteur, une bobine de relais ou un moteur est une charge inductive, et une charge inductive renvoie une forte tension inverse à chaque coupure. La LED d'entrée du PC817 n'est prévue que pour 6 V en inverse, donc ce pic suffit à la détruire.
※ Note:
Montez une diode ordinaire en antiparallèle directement aux bornes des deux bornes d'entrée du module - cathode de la diode sur IN+, anode de la diode sur IN- (sur la puce nue, cathode sur la broche 1 et anode sur la broche 2). En fonctionnement normal, elle est polarisée en inverse et ne fait absolument rien ; lors d'un pic à la coupure, elle conduit et limite la tension inverse à bien moins d'un volt. Une 1N4148 convient pour un petit prélèvement, une 1N4007 pour un prélèvement plus important.
Un autre piège côté machine : certaines sorties à transistor d'automate, sorties à triac et pilotes de lampes LED laissent passer un petit courant de fuite même lorsqu'elles sont coupées. Une fuite suffisante allume partiellement la LED du PC817, et l'ESP32 signale alors la vanne comme en fonctionnement alors qu'elle est au repos. Le symptôme est facile à reconnaître - une lecture qui ne revient jamais à l'état inactif. Le remède est une résistance de décharge d'environ 4,7 kohm à 10 kohm montée en parallèle avec les bornes d'entrée du module, afin que la fuite s'écoule par elle plutôt que par la LED.
Enfin, il s'agit d'une technique réservée au courant continu. L'entrée du PC817 est une seule LED et ne répond qu'à une polarité, ce n'est donc pas le bon composant pour détecter une ligne alternative - cette tâche nécessite un optocoupleur dont l'étage d'entrée comporte deux LED tête-bêche.
Optionnel - Construire la Même Entrée à Partir d'une Puce PC817 Nue
Si vous préférez construire l'entrée vous-même plutôt que d'acheter un module, la puce nue à 4 broches fait le même travail - vous devez simplement fournir la résistance que le module aurait eue. Tenez la puce de façon que le point ou l'encoche marquant la broche 1 soit en haut à gauche ; les broches sont numérotées dans le sens inverse des aiguilles d'une montre à partir de là. Connectez la broche 1 (Anode) au fil de signal à travers la résistance série, connectez la broche 2 (Cathode) à la masse du circuit isolé et nulle part ailleurs, connectez la broche 3 (Émetteur) à une broche GND de l'ESP32, et connectez la broche 4 (Collecteur) à GPIO19. Dimensionnez la résistance pour environ 10 mA dans la LED avec R = (Vin - 1.2) / 0.01, ce qui donne 220 ohm pour un signal 3,3V, 390 ohm pour 5V, 1 kohm pour 12V et 2,2 kohm pour 24V. Ne réutilisez jamais la résistance du 12V sur une ligne 24V : 1 kohm y fait passer environ 22,8 mA dans une LED prévue pour 20 mA. Câblée de cette façon, la puce nue est toujours active à l'état BAS, le sketch n'a donc besoin d'aucune modification.

Ce que la Lecture Vous Apprend sur l'Appareil en Fonctionnement
Comme le prélèvement est placé en parallèle avec la vanne ou la bobine du contacteur plutôt que sur le fil de commande, ce que lit l'ESP32 est l'état réel de l'appareil, et non un écho de l'ordre que vous lui avez donné. Si un pressostat, une minuterie, un automate ou une personne dans l'atelier met la pompe en marche, la lecture suit. Si vous l'avez commandée et qu'elle ne s'est jamais mise en marche - un fusible grillé, une protection de surcharge déclenchée, un fil coupé sur le terrain - la lecture reste inactive et le signale. C'est ce qui transforme ce petit circuit en compteur d'heures de fonctionnement pour une pompe, en alerte « la vanne s'est-elle vraiment ouverte ? », ou en journal des temps d'inactivité d'une machine, le tout transmis via WiFi et sans jamais partager un fil avec le côté 12V.
Soyez toutefois honnête sur ce que prouve la lecture : elle vous indique que l'appareil est alimenté, pas qu'il fait son travail - un moteur de pompe grippé ou une résistance chauffante grillée consomme toujours de l'énergie et sera toujours lu comme étant EN MARCHE.
Comment Programmer l'ESP32 pour Lire le PC817
- Configurez la broche de l'ESP32 en entrée numérique avec la résistance de pull-up interne activée à l'aide de la fonction pinMode(). C'est le pull-up qui met l'état de repos à HIGH. Par exemple, la broche GPIO19 :
- Lisez l'état brut de la broche à l'aide de la fonction digitalRead().
- Convertissez ce niveau brut en état de signal en une seule ligne, via la constante de polarité, afin que le reste du code se lise naturellement et qu'un module de l'autre type ne vous coûte qu'une modification plutôt qu'une réécriture.
- Affichez le résultat à l'aide de Serial.println(), ou utilisez-le pour piloter autre chose - par exemple un ESP32 - Relais..
Code ESP32 - Optocoupleur PC817
Étapes Rapides
- Si c'est la première fois que vous utilisez l'ESP32, consultez Installation du logiciel ESP32..
- Effectuez le câblage selon le schéma de câblage du module ci-dessus, et vérifiez bien que la masse 12V/24V ne touche PAS le GND de l'ESP32.
- Connectez la carte ESP32 à votre PC via un câble USB.
- Ouvrez Arduino IDE sur votre PC.
- Sélectionnez la bonne carte ESP32 (par exemple ESP32 Dev Module) et le port COM.
- Copiez le code ci-dessus et collez-le dans Arduino IDE.
- Cliquez sur le bouton Téléverser dans Arduino IDE pour compiler et téléverser le code vers la carte ESP32.
- Ouvrez le Moniteur Série dans Arduino IDE.
- Activez et désactivez plusieurs fois le signal externe 12V ou 24V.
- Comparez ce qu'affiche le Moniteur Série avec la LED d'état du module. Si les deux ne concordent pas, réglez MODULE_ACTIVE_LOW sur false dans le code et téléversez à nouveau.
- Consultez le résultat dans le Moniteur Série. Il ressemble à ceci :
Si le Moniteur Série continue d'afficher LIVE alors que rien n'est connecté, l'une de deux choses se produit. Soit la broche de l'ESP32 est flottante - vérifiez que vous avez choisi une broche qui possède réellement un pull-up interne, et que le GND du module (ou la broche 3 de la puce nue) rejoint bien une broche GND de l'ESP32 - soit votre module est de type actif à l'état HAUT, ce que la LED d'état vous indiquera en une seconde.
Si vous souhaitez aller plus loin avec les entrées numériques sur cette carte, les tutoriels ESP32 - Bouton. et ESP32 - Interrupteur de fin de course. présentent le même principe de lecture et d'inversion pour les contacts mécaniques, et ESP32 - mesurer la tension. couvre le cas où vous avez besoin de la valeur réelle de la tension plutôt que d'un simple présent/absent.