ESP32 S3 - Optocoupleur PC817 : surveiller un signal d'entrée DC 12V/24V
Les équipements industriels et automobiles parlent en 12V et en 24V, mais l'ESP32 S3 est une carte strictement 3,3V sans aucune tolérance au 5V — touchez une broche GPIO avec 24V et cette broche disparaît instantanément. Un module d'isolation optocoupleur PC817 élimine complètement le danger en transportant le signal à travers un espace isolant sous forme de lumière, si bien que votre ESP32 S3 peut surveiller une sortie d'automate 24V ou un circuit de véhicule 12V comme une simple entrée numérique ordinaire, rien de plus exotique, et comme le module porte déjà la résistance série dont sa LED interne a besoin, tout le travail se résume à acheter la variante qui correspond à votre signal et à poser deux fils de terrain sur un bornier à vis. En pratique, cela répond à la question que la plupart des gens se posent réellement — la machine, la pompe, le convoyeur fonctionne-t-il vraiment en ce moment ? — car le module se branche directement sur l'alimentation propre de l'équipement et rapporte son état réel sans modifier un seul de ses fils.
Ce que vous allez construire dans ce tutoriel :
- Un étage d'entrée isolé qui transforme un signal DC de 12V ou 24V en un niveau logique 3,3V sûr pour l'ESP32 S3
- La seule décision d'achat qui décide si tout fonctionne : choisir la variante de module 24V, 12V ou 3-5V
- Un test sur table d'une minute qui vous indique si votre module lit en actif-LOW ou en actif-HIGH, et un sketch avec une seule constante pour s'adapter à l'un ou l'autre
- Une prise en parallèle sur un gyrophare 24V ou un verrouillage de protection qui vous indique si l'équipement est réellement sous tension
- La même entrée construite à partir de la puce PC817 nue et d'une résistance que vous dimensionnez vous-même, pour quand vous préférez souder plutôt qu'acheter

Matériel nécessaire
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Démarrage DIYables ESP32 S3 (ESP32 S3 inclus) | |
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
Vous avez besoin d'exactement un module - celui dont la tension d'entrée correspond au signal que vous allez surveiller, ce que la section suivante détermine pour vous.
À propos de l'optocoupleur PC817
Le PC817 — également vendu comme photocoupleur ou opto-isolateur — est un composant DIP à 4 broches qui contient deux composants se faisant face à travers un espace isolant : une LED infrarouge d'un côté et un phototransistor de l'autre. Quand un courant traverse la LED, sa lumière active le transistor, si bien que le signal traverse l'espace sous forme de lumière plutôt que d'électricité, et les deux côtés ne partagent jamais de chemin de cuivre. C'est exactement cette propriété qui permet à un ESP32 S3 en 3,3V de se tenir en sécurité à côté d'un circuit de machine en 24V, et c'est le même PC817 qui fait le travail, que vous soudiez la puce brute vous-même ou que vous achetiez le module d'isolation prêt à l'emploi autour duquel ce tutoriel est construit.
Spécifications clés
| Paramètre | Valeur |
|---|---|
| Boîtier | DIP 4 broches (broche 1 marquée par un point ou une encoche) |
| Tension directe de la LED (Vf) | environ 1,2 V typique, 1,4 V max |
| Courant direct de la LED (If) | 20 mA continu max, 5-20 mA normal, 10 mA une bonne cible |
| Tension collecteur-émetteur (VCEO) | 35 V max |
| Courant de collecteur (IC) | 50 mA max |
| Dissipation de puissance au collecteur | 150 mW |
| Tension d'isolation | 5000 Vrms pendant 1 minute |
| Taux de transfert de courant (CTR) | 50% à 600% selon le rang |
| Vitesse de commutation | montée environ 4 us, descente environ 3 us |
| Température de fonctionnement | -30 C à +100 C |
Brochage
Le PC817 porte ses quatre broches en deux paires opposées, la broche 1 étant marquée par un point ou une encoche et la numérotation se poursuivant dans le sens antihoraire à partir de là. Sur un module, ces quatre broches sont déjà câblées vers les borniers à vis et le connecteur à broches, mais les connaître explique toujours tout ce que fait le module.
- Broche 1 - Anode (A) — anode de la LED, le pôle positif du côté entrée ; le signal 12V ou 24V arrive ici à travers une résistance série, déjà installée pour vous sur un module.
- Broche 2 - Cathode (K) — cathode de la LED, le pôle négatif du côté entrée ; connectez cette broche à la masse du circuit 12V/24V, jamais au GND de l'ESP32 S3.
- Broche 3 - Émetteur (E) — émetteur du phototransistor du côté sortie ; connectez cette broche au GND de l'ESP32 S3.
- Broche 4 - Collecteur (C) — collecteur du phototransistor du côté sortie ; connectez cette broche à une broche d'entrée numérique de l'ESP32 S3.

De quel module optocoupleur ai-je besoin — 24V, 12V ou 3-5V ?
Un module d'isolation PC817 arrive avec sa résistance de limitation de courant déjà soudée, et cette résistance ne peut être dimensionnée que pour une seule tension d'entrée. C'est pourquoi ces cartes ne sont pas vendues comme une pièce universelle unique mais comme trois variantes distinctes, et pourquoi choisir la bonne équivaut, au niveau du module, à faire vous-même le calcul de résistance. Relevez la tension du signal que vous prévoyez de surveiller, puis achetez en conséquence :
- Module 24V — pour les signaux DC 24V : sorties transistor d'automate, verrouillages de protection de machine, bobines de contacteur et de solénoïde, gyrophares d'état de convoyeur, la plupart du câblage de terrain en usine.
- Module 12V — pour les signaux DC 12V : circuits automobiles et marins, sorties d'alarme et de congélateur 12V, alimentations de rubans LED, petits contrôleurs de portail et de porte.
- Module 3-5V — pour les signaux logiques 3,3V et 5V provenant d'un autre microcontrôleur, d'une carte de capteur, ou d'une carte de contrôle que vous voulez garder électriquement séparée de l'ESP32 S3.
Installer la mauvaise variante est la seule erreur qui vous coûte le module plutôt qu'un après-midi. Faites fonctionner un module 12V sur une ligne 24V et environ le double du courant prévu traverse sa LED interne, ce qui l'endommagera. Faites fonctionner un module 24V sur une ligne 12V et c'est l'inverse qui se produit : la LED est sous-alimentée, donc la sortie peut commuter en retard, commuter de façon peu fiable, ou ne jamais commuter du tout — et une lecture intermittente de ce genre est bien plus difficile à diagnostiquer qu'une carte morte. Vérifiez l'inscription sur le module par rapport à la tension sur votre multimètre avant de connecter quoi que ce soit ; avec un module vous ne calculez jamais, vous choisissez simplement correctement.
Isoler un signal logique 3,3V ou 5V
Les signaux basse tension valent aussi la peine d'être isolés, et c'est à cela que sert la variante 3-5V. Chaque fois que les deux circuits fonctionnent sur des alimentations séparées, se trouvent aux extrémités opposées d'un long câble, ou que l'un d'eux est électriquement bruyant — un pilote de moteur, un étage de moteur pas à pas, la carte de contrôle 5V enfouie dans un appareil alimenté par le secteur — le travail que fait le PC817 est de rompre le chemin de masse partagé, pas de survivre à une haute tension. Il vaut aussi la peine de se rappeler que l'entrée du PC817 se préoccupe du courant, pas de la tension : un rail 5V capable de délivrer dix ampères n'est pas plus dur pour l'optocoupleur qu'un rail qui en délivre dix milliampères, car la résistance embarquée fixe le courant de la LED dans les deux cas — ce que change vraiment l'alimentation plus costaude, c'est à quel point une erreur de câblage ailleurs se termine mal, ce qui est un argument supplémentaire pour l'isoler. La carte 3-5V couvre les signaux 3,3V et 5V avec la même variante, et 3,3V est le plancher pratique du PC817 sous toute forme, puisque la LED interne seule en absorbe déjà environ 1,2 V.
Schéma de câblage
Le côté 12V/24V et le côté ESP32 S3 sont câblés comme deux circuits complètement séparés qui ne se rencontrent qu'à l'intérieur du boîtier plastique du PC817. Avec un module, cette séparation est physique et évidente : le câblage de terrain se pose sur les borniers à vis à une extrémité de la carte, l'ESP32 S3 se connecte au connecteur à broches à l'autre extrémité, et rien ne se croise entre eux.
Notes de sécurité
Ne connectez pas la masse du circuit 12V ou 24V au GND de l'ESP32 S3. Le fait que ces deux masses restent séparées est la raison même pour laquelle ce circuit protège votre carte — reliez-les ensemble et le module commutera quand même, mais l'isolation pour laquelle vous l'avez construit disparaît et un défaut du côté industriel atteint directement l'ESP32 S3. Tout aussi important, installez la variante de module qui correspond à la tension que vous mesurez réellement plutôt que celle qui se trouvait déjà dans le tiroir, car un module 12V sur une ligne 24V pilote sa LED interne à environ le double du courant pour lequel elle a été conçue et l'endommagera, tandis qu'un module 24V sur une ligne 12V est sous-alimenté et peut commuter en retard ou pas du tout ; si vous construisez à la place la version à puce nue, cette même règle devient le dimensionnement de la résistance série pour la tension d'entrée. Faites attention à la polarité de cette entrée en même temps, car c'est une LED et elle ne conduit que dans un sens — inversez IN+ et IN- et le circuit reste simplement éteint au lieu de rapporter quoi que ce soit, donc établissez quel côté de votre prise est positif avant de le câbler. Si ce que vous surveillez est inductif — une bobine de relais, un contacteur, une électrovanne, un démarreur de moteur ou la bobine qui pilote un gyrophare — installez une diode ordinaire en parallèle inverse directement sur les bornes d'entrée, cathode vers IN+ et anode vers IN- : le champ qui s'effondre envoie une grande impulsion inverse sur une LED d'entrée prévue pour seulement 6 V en inverse, et bien que cette diode ne fasse absolument rien en fonctionnement normal, lors d'une impulsion elle conduit et limite la tension inverse à bien moins d'un volt. Une 1N4148 convient pour les petites prises et une 1N4007 pour les plus lourdes. Du côté sortie, gardez tout référencé au 3,3V : l'ESP32 S3 ne tolère pas le 5V, alimentez donc le module depuis le rail 3,3V de la carte et jamais depuis le 5V. Enfin, choisissez le GPIO avec un peu de soin. Ce tutoriel utilise le GPIO19, qui sur l'ESP32 S3 fait aussi office de ligne USB native D-, le GPIO20 étant D+ — mais ce second rôle ne réclame les broches que lorsque votre sketch utilise réellement le périphérique USB natif, et sur une carte qui rejoint l'Arduino IDE via un pont USB-UART, comme le font la plupart des cartes de développement ESP32 S3, les GPIO19 et GPIO20 sont des GPIO ordinaires avec une résistance de tirage interne fonctionnelle. Si vous utilisez l'USB natif à la place — série USB CDC sur le port natif de la carte, USB HID, ou tout ce qui est construit sur TinyUSB — alors ces deux broches appartiennent au périphérique USB et la sortie du module doit aller ailleurs ; les GPIO16 et GPIO17 sont libres de tout rôle spécial et l'un ou l'autre convient. Séparément, sur les modules N16R8, évitez les GPIO26 à GPIO37, qui sont réservés à la flash SPI octale et à la PSRAM. Le guide de brochage de l'ESP32 S3 liste les contraintes de chaque broche si vous en avez besoin d'une autre.
Câblage avec un module d'isolation optocoupleur PC817 :

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
| Borne/broche du module | Se connecte à |
|---|---|
| IN+ (bornier à vis) | positif du signal 12V/24V |
| IN- (bornier à vis) | masse du circuit 12V/24V UNIQUEMENT |
| VCC (connecteur) | ESP32 S3 3.3V |
| GND (connecteur) | ESP32 S3 GND |
| OUT / DO (connecteur) | ESP32 S3 GPIO19 |
Les modules existent en versions à 1, 2, 4 et 8 canaux, et chaque canal répète le même schéma : sa propre paire de borniers à vis d'entrée, sa propre broche de sortie, et généralement sa propre LED d'état qui s'allume tandis que le côté entrée de ce canal est sous tension. Seuls VCC et GND sont partagés entre les canaux.
Connecter le PC817 en parallèle avec l'appareil pour voir s'il fonctionne
L'entrée du module doit aller en travers de l'appareil que vous surveillez — en parallèle avec lui — et jamais en série avec lui. Le câbler en série ferait passer tout le courant de charge de l'appareil à travers une LED infrarouge prévue pour 20 mA, et le PC817 serait détruit à l'instant où le circuit se fermerait. Prenons le gyrophare "en marche" 24V du convoyeur comme exemple pratique : le gyrophare garde ses deux fils intacts, et vous faites simplement courir une seconde paire le long d'eux jusqu'aux borniers à vis du module — sans aucune résistance à ajouter vous-même, car le module 24V en porte déjà une.
| Point de prise sur l'appareil | Se connecte à |
|---|---|
| Borne commutée / positive du gyrophare | bornier IN+ du module |
| Borne négative / de retour du gyrophare | bornier IN- du module |
Rien dans le circuit existant n'est coupé ou redirigé, et la prise ne tire qu'environ 10 mA — négligeable comparé à ce que consomme un gyrophare, une bobine de contacteur ou un démarreur de moteur de convoyeur — donc la machine continue de fonctionner exactement comme avant. C'est une mesure en lecture seule.
Parce que la prise surveille l'alimentation propre de l'appareil plutôt qu'une commande émise par votre sketch, l'ESP32 S3 suit l'état réel de l'équipement : il voit le convoyeur qu'un opérateur a démarré depuis le panneau, et il voit également le verrouillage de protection qui a été commandé en marche mais n'est en fait jamais entré en marche. C'est ce qui rend la lecture digne d'être enregistrée — les totaux d'heures de fonctionnement, les relevés de temps d'inactivité et les alertes « a-t-il vraiment démarré ? » en découlent tous. Une limite honnête vaut la peine d'être énoncée clairement : cela vous dit que l'appareil est sous tension, pas qu'il fonctionne, donc un moteur grippé ou un élément chauffant brûlé consomme quand même de l'énergie et signale quand même ÉNERGISÉ.
Deux bizarreries de terrain valent la peine d'être connues avant de vous brancher sur une vraie machine. Certaines sorties transistor d'automate, sorties triac et pilotes de gyrophare à LED laissent fuiter un petit courant même en position éteinte, et cette fuite suffit à allumer à moitié la LED du PC817, si bien que l'ESP32 S3 signale ÉNERGISÉ en permanence ; le signe révélateur est une lecture qui ne revient jamais à OUVERT, et le remède est une résistance de décharge d'environ 4,7 kohm à 10 kohm installée en parallèle des bornes d'entrée du module, donnant à cette fuite un chemin qui contourne la LED. La seconde bizarrerie est que l'entrée est une seule LED et ne conduit donc que dans un sens, ce qui fait du PC817 un composant DC uniquement — détecter une ligne AC demande un optocoupleur dont l'étage d'entrée porte deux LED dos à dos à la place.
Votre module optocoupleur est-il actif HIGH ou actif LOW ?
Sur la puce nue, la réponse est une question de physique établie. La broche de l'ESP32 S3 est maintenue haute par sa résistance de tirage interne tandis que le phototransistor la tire vers le bas, donc la lecture est inversée :
- Signal externe 12V/24V présent → LED allumée → transistor conduit → la broche lit LOW
- Signal externe 12V/24V absent → LED éteinte → transistor éteint → la broche lit HIGH
Sur un module, vous devez vérifier dans quel sens se trouve le vôtre, car les deux types sont vendus : de nombreux fabricants sortent le phototransistor directement et se comportent exactement comme la puce nue, tandis que d'autres ajoutent un étage inverseur sur la carte pour que la sortie suive l'entrée à la place. L'inscription sur la carte est rarement assez explicite pour être fiable, et le test prend moins d'une minute :
- Câblez le module comme dans le tableau ci-dessus et téléversez le sketch de ce tutoriel, qui affiche l'état à chaque interrogation.
- Laissez les borniers d'entrée déconnectés et lisez ce qu'affiche le Serial Monitor — c'est votre état de repos.
- Appliquez le vrai signal sur IN+ et IN- et relisez le Serial Monitor.
- Quel que soit le niveau qui apparaît tandis que le signal est présent, c'est le niveau actif de votre module. Si le sketch signale déjà ÉNERGISÉ à ce moment, votre module est actif-LOW et il n'y a rien à changer.
- Vérifiez par recoupement avec la propre LED d'état du module, qui s'allume dès que le côté entrée est sous tension. Si cette LED est allumée alors que le sketch dit encore OUVERT, le vôtre est du type inverseur.
Le corriger est une simple modification plutôt qu'une réécriture : le sketch ci-dessous porte une seule constante, MODULE_ACTIVE_LOW, réglée sur true par défaut. Changez-la en false et chaque lecture s'inverse pour convenir à un module actif-HIGH.
Optionnel : le construire à partir de la puce PC817 nue
Si vous préférez souder la puce nue à 4 broches plutôt qu'acheter un module, tout ce qui précède s'applique encore — vous fournissez simplement la résistance que le module aurait eue. Câblez-le en utilisant le brochage indiqué plus tôt : le fil de signal à travers la résistance vers la broche 1, la masse du circuit externe vers la broche 2, le GND de l'ESP32 S3 vers la broche 3, et le GPIO19 vers la broche 4. Dimensionnez la résistance avec R = (Vin - Vf) / If, en prenant Vf = 1,2 V et un courant cible de 10 mA, ce qui donne 220 ohms à 3,3V, 390 ohms à 5V, 1 kohm à 12V et 2,2 kohm à 24V. Utilisez un composant 1/2 W sur une ligne 24V ; 1/4 W convient partout en dessous. Réutiliser une résistance de 1 kohm sur du 24V est l'erreur classique ici — cela pousse environ 22,8 mA à travers une LED prévue pour 20 mA en continu, et raccourcit la durée de vie du PC817 tout aussi sûrement qu'un module mal assorti.
Comment programmer
Aucune bibliothèque n'est nécessaire pour ce projet — le module remet à l'ESP32 S3 un simple niveau numérique, donc pinMode() et digitalRead() constituent tout l'outillage. Configurez le GPIO19 en INPUT_PULLUP afin que la broche repose à HIGH quand rien ne la pilote, puis laissez le sketch traduire ce niveau brut en un état réel plutôt que de disperser des comparaisons LOW et HIGH dans le reste de votre code. Cette traduction se fait en un seul endroit exactement, contre la constante MODULE_ACTIVE_LOW en haut du fichier : laissez-la à true pour le module actif-LOW courant et pour la puce nue, et réglez-la à false si le test de polarité ci-dessus a montré que votre module inverse sur la carte. Le sketch interroge la broche deux fois par seconde, affiche l'état actuel de la ligne surveillée, et ajoute un message de transition supplémentaire à l'instant où le circuit externe s'allume ou s'éteint.
Code ESP32 S3 - Optocoupleur PC817
Étapes rapides
- Nouveau sur ESP32 S3 ? Complétez d'abord notre guide ESP32 S3 - Premiers pas.
- Mesurez le signal que vous voulez surveiller et choisissez le module correspondant — le module 24V pour une ligne 24V, le module 12V pour une ligne 12V, le module 3-5V pour un signal de niveau logique.
- Posez le câblage de terrain sur les borniers à vis : le positif commuté vers IN+, le retour du circuit externe vers IN-.
- Câblez le côté sortie : VCC vers la broche 3,3V de l'ESP32 S3, GND vers GND, et OUT vers le GPIO19.
- Vérifiez bien que la masse du circuit externe n'est connectée nulle part sur l'ESP32 S3.
- Branchez l'ESP32 S3 à votre ordinateur avec le câble USB Type-C.
- Ouvrez l'Arduino IDE et sélectionnez votre carte ESP32 S3 et son port COM.
- Copiez le code ci-dessus dans l'éditeur et appuyez sur le bouton Upload.

- Ouvrez le Serial Monitor et réglez-le sur 115200 bauds.

- Allumez et éteignez le signal externe 12V ou 24V et regardez l'état rapporté le suivre. S'il lit à l'envers, réglez MODULE_ACTIVE_LOW sur false et téléversez à nouveau.
- Astuce Pro : Avant de câbler quoi que ce soit d'industriel, répétez le circuit avec une alimentation de table ou un adaptateur 12V de rechange — si l'état affiché reste ÉNERGISÉ avec l'entrée déconnectée, vos deux masses sont accidentellement reliées quelque part.
Sortie du Serial Monitor
※ Note:
Si le Serial Monitor signale ÉNERGISÉ tout le temps et ne change jamais, vérifiez quatre choses dans cet ordre : que la variante du module correspond à votre tension d'entrée, que MODULE_ACTIVE_LOW est réglé dans le bon sens pour votre module, la polarité de IN+ et IN- (la LED interne ne conduit que dans un sens), et si la masse externe s'est infiltrée sur le rail GND de l'ESP32 S3. S'il signale OUVERT tout le temps, la LED d'entrée ne s'allume presque certainement pas — la propre LED d'état du module vous le dit en un coup d'œil, et un module 24V alimenté par une ligne 12V en est une cause fréquente.
Idées d'applications
Une fois que votre ESP32 S3 peut lire une entrée numérique isolée, presque n'importe quel équipement 12V ou 24V devient quelque chose que vous pouvez surveiller sans le modifier.
- Enregistreur de verrouillage de protection de machine : Surveillez la ligne de verrouillage 24 V d'une machine protégée et enregistrez chaque fois que le circuit de protection s'ouvre, afin de voir à quelle fréquence la production est réellement interrompue.
- Moniteur d'heures de fonctionnement de convoyeur : Branchez-vous sur la ligne de lampe 24 V qui pilote les gyrophares « en marche » et « défaut » d'un convoyeur, reflétez l'état de l'atelier sur un tableau de bord Wi-Fi servi par l'ESP32 S3, et totalisez les heures pendant lesquelles le convoyeur fonctionne réellement afin qu'une alerte « a-t-il vraiment démarré ? » se déclenche quand il devrait bouger et ne bouge pas.
- Surveillance d'alarme de congélateur : Détectez quand la sortie d'alarme 12 V d'un congélateur commercial devient active — un travail pour le module 12V — et envoyez une notification bien avant que quelqu'un ne passe devant l'appareil.
- Compteur d'actionnements de bobine de solénoïde : Surveillez une bobine de solénoïde ou de contacteur 24 V et comptez les actionnements, afin que la maintenance puisse être planifiée selon les cycles de service réels plutôt que le calendrier.
- Entrée de commutateur de portail longue distance : Lisez un commutateur 24 V à l'extrémité éloignée d'un long câble où un simple fil 3,3V capterait trop de bruit pour être fiable — un cousin plus robuste du projet ESP32 S3 - Interrupteur de fin de course.
- Déclencheur isolé pour une charge commutée : Laissez un signal de terrain 24 V validé décider quand l'ESP32 S3 ferme un ESP32 S3 - Relais, gardant la logique de contrôle séparée du câblage de terrain aux deux extrémités.
Vidéo
Regardez la vidéo pas à pas de ce projet ESP32 S3 ci-dessous.
Défiez-vous
Le circuit est petit, mais il y a beaucoup de place pour le faire évoluer vers quelque chose de vraiment utile sur un établi.
- Débutant : Allumez la LED RGB intégrée de l'ESP32 S3 sur le GPIO48 chaque fois que l'entrée isolée est sous tension, pour obtenir un indicateur visible d'un coup d'œil sans ouvrir le Serial Monitor.
- Intermédiaire : Chronométrez combien de temps le signal externe reste sous tension à chaque activation, affichez la durée en secondes, et gardez un total cumulé du temps de marche depuis le démarrage.
- Avancé : Ajoutez un anti-rebond logiciel pour les signaux pilotés par contact et étendez le projet à un module optocoupleur 24V à 4 canaux, lisant quatre lignes de terrain indépendantes et publiant leur état combiné via Wi-Fi.