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

1×38-pin ESP32 ESP-WROOM-32 Dev Module - Narrow
1×Alternativement: 38-pin ESP32 ESP-WROOM-32 Dev Module - Wide
1×Alternativement: 30-pin ESP32 ESP-WROOM-32 Dev Module - Wide
1×Alternativement: ESP32 Uno-form board
1×Alternativement: ESP32 S3 Uno-form board
1×Câble USB Type-A vers Type-C (pour PC USB-A)
1×Câble USB Type-C vers Type-C (pour PC USB-C)
1×PC817 Optocoupler Module - 3-5V input
1×PC817 Optocoupler Module - 12V input
1×Plaque d'essai
1×Fils de connexion
1×Optionnel: Connecteur d'alimentation DC
1×Recommandé: Carte d'extension à bornier à vis pour ESP32
1×Recommandé: Breakout Expansion Board for ESP32
1×Recommandé: Répartiteur d'alimentation pour ESP32

Ou vous pouvez acheter les kits suivants:

1×Kit de Démarrage DIYables ESP32 (ESP32 inclus)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

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.
Brochage du module d'isolation à optocoupleur PC817 pour 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
Schéma de câblage du module optocoupleur PC817 avec ESP32 sur 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

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.

Brochage de l'optocoupleur PC817 avec ESP32 pour une entrée isolée 12V et 24V

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 :
pinMode(19, INPUT_PULLUP);
  • Lisez l'état brut de la broche à l'aide de la fonction digitalRead().
int raw = digitalRead(19);
  • 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.
const bool MODULE_ACTIVE_LOW = true; bool signalActive = MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH);

Code ESP32 - Optocoupleur PC817

/* * Ce code ESP32 a été développé par newbiely.fr * Ce code ESP32 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32/esp32-pc817-optocoupler-monitor-12v-24v-dc-input-signal */ // ESP32 pin GPIO19 connected to the PC817's collector (pin 4), or to the module's OUT pin #define PC817_PIN 19 // Most PC817 modules pull the output LOW when the input signal is present. // If your module works the other way round, change this to false. const bool MODULE_ACTIVE_LOW = true; bool signalActive; void setup() { Serial.begin(9600); // initialize serial pinMode(PC817_PIN, INPUT_PULLUP); // enable the ESP32 internal pull-up resistor } void loop() { int raw = digitalRead(PC817_PIN); // active-LOW module or bare chip: LOW => the external 12V/24V signal is PRESENT // active-HIGH module: HIGH => the external 12V/24V signal is PRESENT signalActive = MODULE_ACTIVE_LOW ? (raw == LOW) : (raw == HIGH); if (signalActive) Serial.println("PC817 channel -> LIVE, external voltage detected"); else Serial.println("PC817 channel -> idle"); delay(200); }

É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 :
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32 Dev Module' on 'COM15')
New Line
9600 baud
PC817 channel -> idle PC817 channel -> idle PC817 channel -> idle PC817 channel -> LIVE, external voltage detected PC817 channel -> LIVE, external voltage detected PC817 channel -> LIVE, external voltage detected PC817 channel -> LIVE, external voltage detected PC817 channel -> idle PC817 channel -> idle
Ln 11, Col 1
ESP32 Dev Module on COM15
2

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.

Vidéo

Commentaires

Tutoriels connexes

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !