ESP32 - Optocoupleur PC817 : Surveiller un Signal d'Entrée CC 12V/24V

Savoir si une vanne, une pompe ou un chauffage fonctionne réellement en ce moment implique généralement de lire la tension sur la ligne qui l'alimente - et cette ligne est en 12 ou 24 volts, pas en 3,3. L'ESP32 fonctionne en 3,3 volts et ne tolère pas le 5V, donc câbler une telle ligne directement sur l'une de ses broches détruirait la carte - un module d'isolation à optocoupleur PC817 résout ce problème, et ce guide vous montre comment le lire depuis MicroPython sur l'ESP32. Nous aborderons les points suivants :

Entrée 24V isolée par optocoupleur PC817 avec ESP32 MicroPython

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 Isolation Module 12V
1×PC817 Optocoupler Isolation Module 3-5V
1×Plaque d'essai
1×Fils de connexion
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.

Achetez un seul module : la bonne variante dépend de la ligne que vous surveillez, et la section suivante vous indique laquelle.

À Propos de l'Optocoupleur PC817

Le PC817 est une puce à 4 broches qui transmet un signal numérique à travers un espace en utilisant la lumière au lieu d'un fil. À l'intérieur 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 passe sous forme de lumière plutôt que d'électricité - c'est pourquoi les deux côtés restent électriquement séparés. Le PC817 est également vendu sous les noms de photocoupleur, opto-isolateur et optoisolateur.

La plupart des projets n'utilisent jamais la puce nue. Ce que vous achetez réellement est un module d'isolation à optocoupleur PC817 : la même puce sur une petite carte, avec la résistance série, une LED d'état et des borniers à vis déjà montés, vendue en versions 1, 2, 4 et 8 canaux. C'est ce que ce tutoriel câble, et la puce nue est présentée à la fin pour ceux qui préfèrent la monter à la main.

L'isolation est exactement ce dont un ESP32 a besoin lorsque ce qu'il doit surveiller n'est pas un capteur en 3,3 volts mais une ligne industrielle ou automobile. Deux tâches visées par ce tutoriel :

  • Surveiller la ligne d'une électrovanne d'irrigation 24 volts, afin que l'ESP32 sache quelle zone le programmateur d'irrigation a réellement ouverte.
  • Surveiller le signal de marche 12 volts d'un groupe électrogène de secours ou d'un onduleur, afin que l'ESP32 puisse enregistrer quand l'appareil a démarré et s'est arrêté.

Aucune de ces lignes ne doit jamais rejoindre directement l'ESP32. Le PC817 se place au milieu et ne transmet rien d'autre que de la lumière.

Quel Module Optocoupleur PC817 Me Faut-il ?

Voici ce que les photos de produit ne vous disent jamais : un seul module ne couvre pas toutes les tensions d'entrée. La résistance soudée sur la carte est dimensionnée pour une seule tension, donc les modules sont vendus en trois variantes distinctes et vous achetez celle qui correspond à votre signal.

Ligne que vous voulez surveiller Module à acheter Où vous rencontrez cette ligne
24 volts CC Module 24V Vannes d'irrigation, sorties d'automate, câblage de machines et de camions
12 volts CC Module 12V Signaux de marche de groupes électrogènes et d'onduleurs, centrales d'alarme, circuits automobiles
3,3 ou 5 volts CC Module 3-5V La sortie d'une autre carte, ou une carte de commande basse tension que vous voulez tenir à distance

Si vous vous trompez de variante, l'une de deux choses se produit :

  • Un module 12V alimenté par une ligne 24 volts reçoit environ le double du courant pour lequel sa résistance a été choisie, et ce surplus de courant traverse directement la LED interne. Le module ne tiendra pas.
  • Un module 24V alimenté par une ligne 12 volts pose le problème inverse : la LED est sous-alimentée, donc la sortie peut commuter en retard, commuter seulement de temps en temps, ou ne jamais commuter du tout. Rien ne brûle, mais rien ne fonctionne non plus.

※ Note:

Choisir la bonne variante est l'équivalent, pour le possesseur d'un module, du dimensionnement de la résistance série - c'est la seule décision d'achat de cette page qui compte vraiment. Une fois le bon module sur l'établi, il n'y a aucune résistance à calculer et aucun calcul à rater.

Brochage

Un module d'isolation à optocoupleur PC817 à un canal possède deux borniers à vis côté terrain isolé et un connecteur à trois broches côté ESP32. Une LED d'état à côté des bornes d'entrée s'allume chaque fois que le côté entrée est alimenté, ce qui est utile à observer pendant les tests.

  • IN+ - la borne d'entrée positive. À connecter à la ligne de la vanne 24 volts que vous voulez surveiller.
  • IN- - la borne d'entrée négative. À connecter à la masse de ce même circuit 24 volts, PAS à la masse de l'ESP32.
  • VCC - l'alimentation du côté sortie. À connecter à la broche 3V3 de l'ESP32, qui fournit 3,3 volts.
  • GND - la masse du côté sortie. À connecter à une broche GND de l'ESP32, qui est à 0 volt.
  • OUT - la sortie isolée. À connecter à une broche d'entrée de l'ESP32 avec son pull-up interne activé, GPIO19 dans ce tutoriel.

IN+ et IN- appartiennent au côté terrain, VCC, GND et OUT appartiennent au côté ESP32, et rien d'autre que l'espace d'isolation à l'intérieur du PC817 ne les relie.

Caractéristiques

Voici les valeurs de la puce PC817 elle-même - le composant situé sous le plastique sur chacune des trois variantes de module.

Caractéristique Valeur
Boîtier DIP à 4 broches
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, plage normale de 5-20 mA
Tension de sortie (VCEO) 35 V max
Courant de sortie (IC) 50 mA max
Dissipation de puissance du collecteur 150 mW
Tension d'isolation 5000 Vrms pendant 1 minute
Rapport de transfert de courant (CTR) 50% à 600% selon la classe
Vitesse de commutation temps de montée d'environ 4 us, temps de descente d'environ 3 us
Température de fonctionnement -30 C à +100 C

La tension d'isolation de 5000 Vrms est la valeur qui compte ici. C'est la raison pour laquelle un pic côté 24 volts n'a aucun chemin vers l'ESP32.

Pourquoi la Lecture est Inversée

Le côté sortie du PC817 ne produit pas de tension propre. Tout ce qu'il peut faire, c'est relier la broche de l'ESP32 à GND ou la laisser tranquille, donc la broche a besoin d'un pull-up pour avoir un niveau défini lorsque le transistor est bloqué. Sur l'ESP32, le pull-up interne est le choix le plus simple, et une résistance de 10 kohm entre la broche et le 3,3 volts fait le même travail.

Avec le pull-up en place :

  • Signal 12V/24V PRÉSENT : la LED s'allume, le phototransistor conduit, et la broche de l'ESP32 est tirée vers le bas, elle lit donc LOW.
  • Signal 12V/24V ABSENT : la LED est éteinte, le phototransistor est bloqué, et le pull-up l'emporte, donc la broche de l'ESP32 lit HIGH.

La lecture est donc à l'inverse de ce à quoi on pourrait s'attendre, et le code MicroPython doit la réinverser. C'est la même logique active à l'état BAS que vous rencontrez dans les tutoriels ESP32 - Bouton. et ESP32 - Interrupteur de fin de course..

Une autre chose propre à l'ESP32 : choisissez une broche GPIO normale pour ce projet. Les broches GPIO34 à GPIO39 sont en entrée seule et n'ont aucun pull-up interne, donc la sortie du module y resterait flottante. Ce tutoriel utilise GPIO19.

Votre Module est-il Actif à l'État BAS ou Actif à l'État HAUT ?

Tout ce qui précède relève de la physique pure pour la puce nue. Un module est une autre affaire, car certains fabricants ajoutent un étage inverseur sur la carte afin que OUT suive l'entrée au lieu de s'y opposer. Les deux types sont en vente, ils se ressemblent sur les photos, et l'annonce indique rarement lequel vous allez recevoir. Donc ne supposez rien - prenez une minute et mesurez.

  • Câblez le module à l'ESP32 comme indiqué ci-dessous, mais laissez IN+ et IN- déconnectées pour l'instant.
  • Ouvrez le script ci-dessous dans Thonny et appuyez sur le bouton vert Exécuter. Il affiche le niveau brut de GPIO19 entre parenthèses à la fin de chaque ligne.
  • Observez le Shell en bas de la fenêtre de Thonny et notez le nombre qui apparaît lorsqu'il n'y a aucun signal sur l'entrée.
  • Appliquez maintenant le signal sur IN+ et IN-. La LED d'état du module devrait s'allumer.
  • Notez le nombre affiché par le Shell lorsque le signal est présent. Ce nombre est le niveau actif de votre module : 0 signifie actif à l'état BAS, 1 signifie actif à l'état HAUT.

La LED d'état sert de contre-vérification. Elle est câblée côté entrée, donc elle s'allume exactement lorsque le signal de terrain est présent - si la LED est allumée et que le Shell indique toujours la ligne comme OFF, c'est la polarité qu'il faut corriger, pas le câblage.

Corrigez-la ensuite à un seul endroit. Le script contient une seule constante en haut, MODULE_ACTIVE_LOW, fournie à True car c'est ainsi que se comportent la plupart des modules. Si votre test indique que le niveau actif est 1, réglez-la sur False et tout ce qui suit sera dans le bon sens. Rien d'autre dans le script n'a besoin d'être modifié.

Gardez les Deux Masses Séparées

C'est tout l'intérêt de l'exercice, il vaut donc la peine de le dire clairement : NE connectez PAS la masse du circuit 12V/24V à la broche GND de l'ESP32. L'alimentation 12 volts ou 24 volts garde sa propre masse, l'ESP32 garde sa propre masse, et les deux ne se rejoignent jamais. Si vous les reliez, le module commutera toujours et le code fonctionnera toujours, mais l'isolation disparaît et l'ESP32 est de nouveau exposé à tout ce qui se passe du côté haute tension.

Schéma de Câblage

Câbler le Module d'Isolation à Optocoupleur PC817

Avec la bonne variante en main, il n'y a rien à calculer. La ligne de la vanne 24 volts va sur IN+, la masse de cette même alimentation 24 volts va sur IN-, et cette masse reste sur le module et n'atteint jamais l'ESP32. De l'autre côté de l'espace d'isolation, VCC, GND et OUT vont à l'ESP32.

  • Voici comment connecter l'ESP32 et le module d'isolation à optocoupleur PC817 avec une breadboard. Alimentez le VCC du module depuis la broche 3V3 de l'ESP32, qui fournit 3,3 volts, car l'ESP32 est une carte 3,3 volts et ne tolère pas le 5V.
Schéma de câblage du module d'isolation à optocoupleur PC817 avec ESP32 MicroPython

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

  • Voici comment connecter l'ESP32 et le module d'isolation à optocoupleur PC817 avec un bloc de connexion à vis pour ESP32, qui est le choix le plus propre dès que le câblage de terrain 24 volts est un vrai câble plutôt que des fils de connexion.
Comment connecter l'ESP32 et le module d'isolation à optocoupleur PC817

Si votre module comporte plus d'un canal, chaque canal possède sa propre paire de bornes d'entrée et sa propre broche OUT, et tous les canaux de la carte sont conçus pour la même tension d'entrée.

Câbler le Module PC817 en Parallèle pour Surveiller la Marche ou l'Arrêt d'un Appareil

Le câblage ci-dessus suppose que vous disposez d'un fil de signal qui vous attend. La plupart du temps, ce n'est pas le cas - ce que vous avez, c'est un appareil déjà installé et déjà en fonctionnement, et ce que vous voulez savoir, c'est s'il tourne en ce moment précis. La solution consiste à brancher l'entrée du module aux bornes de cet appareil, en parallèle avec lui, et à laisser chaque fil existant à sa place.

Prenez l'électrovanne d'irrigation 24 volts à laquelle ce tutoriel revient sans cesse. Le programmateur d'irrigation alimente la bobine de la vanne par son propre câble et vous n'en coupez rien. Vous ajoutez seulement deux fils, et tous deux arrivent sur les borniers à vis d'un module 24V :

  • De la borne commutée de la bobine de la vanne vers IN+.
  • De la borne de retour de la même bobine vers IN-.

Il n'y a aucune résistance à ajouter ici - le module possède déjà celle qui convient au 24 volts, et c'est exactement pour cela que la variante devait être la bonne. Le prélèvement consomme environ 10 mA. Comparé à ce que consomme une bobine d'électrovanne, ce n'est rien, donc la vanne continue de s'ouvrir et de se fermer exactement comme avant. Il s'agit d'une mesure en lecture seule ajoutée sur un circuit sous tension.

WARNING

Ne câblez jamais le module en série avec la vanne. En série, tout le courant de la bobine doit traverser la minuscule LED interne, et la puce est détruite dès que le programmateur alimente la zone. L'entrée de l'optocoupleur se branche aux bornes de l'appareil, jamais en ligne avec lui.

Deux autres points à respecter côté entrée. D'abord la polarité : IN+ et IN- alimentent une LED qui ne conduit que dans un seul sens, donc les inverser n'endommage rien mais l'entrée ne s'activera tout simplement jamais - déterminez quel côté du prélèvement est positif avant de dénuder un fil. Ensuite, la bobine est inductive, et un solénoïde, un relais, un contacteur ou un moteur produit un fort pic inverse au moment où il est coupé. La LED d'entrée du PC817 n'est prévue que pour 6 V en inverse, donc ce pic peut la détruire. Montez une diode ordinaire en antiparallèle directement aux bornes des deux bornes d'entrée - cathode de la diode sur IN+, anode de la diode sur IN-. En fonctionnement normal, elle est polarisée en inverse et ne fait absolument rien ; lors d'un pic, elle conduit et limite la tension inverse à bien moins d'un volt. Une 1N4148 convient pour un petit prélèvement comme celui-ci, une 1N4007 pour un prélèvement plus important.

Une fausse lecture est aussi possible dans l'autre sens. 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, et une fuite suffisante maintient la LED interne faiblement allumée, de sorte que l'ESP32 continue d'indiquer la vanne comme alimentée alors que le programmateur l'a déjà fermée. Le symptôme est une lecture qui ne revient jamais à l'état inactif. Montez une résistance de décharge d'environ 4,7 kohm à 10 kohm entre IN+ et IN-, et la fuite passera par elle plutôt que par la LED. Et une limite à connaître avant de commencer : l'entrée du PC817 est une seule LED, elle ne répond donc qu'à une seule polarité et n'est pas le bon composant pour détecter une ligne alternative, qui nécessite un optocoupleur dont l'étage d'entrée comporte deux LED tête-bêche.

Comme le prélèvement est placé aux bornes de l'appareil plutôt que sur la commande du programmateur, ce que lit l'ESP32 est l'état réel de l'appareil - y compris les moments où autre chose a alimenté la zone, et les moments où le programmateur l'a demandée sans que rien ne s'allume. C'est ce qui transforme le script en compteur d'heures de fonctionnement pour chaque vanne, en alerte « la pompe a-t-elle vraiment démarré ? », ou en journal des temps d'inactivité d'une machine. Soyez toutefois honnête sur ce que cela prouve : cela vous indique que l'appareil est alimenté, pas qu'il fonctionne, et un moteur grippé ou une résistance chauffante grillée consomme toujours de l'énergie et sera toujours lu comme EN MARCHE.

Optionnel : Le Construire à Partir de la Puce PC817 Nue

Vous préférez souder vous-même ? Le PC817 brut à 4 broches fait le même travail une fois la résistance série montée, ce qui vaut la peine lorsque la tension d'entrée est fixe. Un point ou une encoche marque la broche 1 et la numérotation se fait dans le sens inverse des aiguilles d'une montre : broche 1 anode et broche 2 cathode de la LED côté terrain, broche 3 émetteur et broche 4 collecteur du phototransistor côté ESP32.

Brochage de l'Optocoupleur PC817

Dimensionnez la résistance avec R = (Vin - 1.2) / 0.01 pour environ 10 mA : 220 ohm à 3,3 volts, 390 ohm à 5 volts, 1 kohm à 12 volts, et 2,2 kohm à 24 volts avec un composant de 1/2 W. Laissez une résistance de 1 kohm sur une ligne 24 volts et environ 22,8 mA circulent, au-delà de la limite de 20 mA de la puce.

Ensuite, câblez la résistance entre le signal et la broche 1, la broche 2 à la masse de ce circuit externe, la broche 3 à une broche GND de l'ESP32, qui est à 0 volt, et la broche 4 à GPIO19. Le code ci-dessous fonctionne sans modification.

Code ESP32 MicroPython - Optocoupleur PC817

Aucune bibliothèque n'est nécessaire. Lire un module PC817 est un simple travail d'entrée numérique, donc un objet Pin avec Pin.PULL_UP constitue tout le pilote. Le script ci-dessous surveille l'entrée isolée et n'affiche une ligne que lorsqu'elle change d'état, ce qui garde le Shell de Thonny lisible lorsque la vanne reste ouverte un moment. Chaque ligne se termine par le niveau brut de GPIO19, ce qui rend possible le test de polarité décrit ci-dessus.

/* * Ce code ESP32 MicroPython a été développé par newbiely.fr * Ce code ESP32 MicroPython 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-micropython/esp32-micropython-pc817-optocoupler-monitor-12v-24v-dc-input-signal */ from machine import Pin import utime PC817_PIN = 19 # The ESP32 pin GPIO19 connected to the PC817 module OUT pin # Most PC817 optocoupler modules pull OUT down to 0 when the input signal is present. # Some modules invert it on-board, so OUT follows the input instead. # If your module works the other way round, change this to False. MODULE_ACTIVE_LOW = True # Pin.PULL_UP turns on the ESP32 internal pull-up resistor. # The pull-up holds the pin HIGH while the PC817 phototransistor is off. # When the external 12V/24V signal is present, the phototransistor conducts # and drags the pin down to 0, so the reading is inverted. opto = Pin(PC817_PIN, Pin.IN, Pin.PULL_UP) last_state = None while True: raw = opto.value() # the level on GPIO19 as it is, before any inversion signal_active = (raw == 0) if MODULE_ACTIVE_LOW else (raw == 1) # Print only when the isolated input changes, so the Shell stays readable if signal_active != last_state: if signal_active: print("24V valve line: ENERGIZED (GPIO19 = {})".format(raw)) else: print("24V valve line: OFF (GPIO19 = {})".format(raw)) last_state = signal_active utime.sleep(0.2)

Étapes Rapides

Voici les instructions pour configurer et exécuter votre code MicroPython sur l'ESP32 avec Thonny IDE :

  • Câblez le module à l'ESP32 comme indiqué sur le schéma de câblage du module ci-dessus, et vérifiez bien que la masse 12V/24V n'est nulle part près du GND de l'ESP32 avant de mettre quoi que ce soit sous tension.
  • Assurez-vous que Thonny IDE est installé sur votre ordinateur.
  • Vérifiez que le firmware MicroPython est chargé sur votre carte ESP32.
  • Si c'est la première fois que vous utilisez un ESP32 avec MicroPython, consultez le guide ESP32 - Premiers pas. pour des instructions étape par étape.
  • Connectez la carte ESP32 à votre ordinateur avec un câble USB.
  • Ouvrez Thonny IDE sur votre ordinateur.
  • Dans Thonny IDE, allez dans Outils Options.
  • Dans l'onglet Interpréteur, choisissez MicroPython (ESP32) dans le menu déroulant.
  • Assurez-vous que le bon port est sélectionné. Thonny IDE le détecte généralement automatiquement, mais vous devrez peut-être le sélectionner manuellement (comme COM12 sur Windows ou /dev/ttyACM0 sur Linux).
  • 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.
    • Dans la boîte de dialogue d'enregistrement, choisissez périphérique MicroPython.
    • Nommez le fichier main.py.
  • Cliquez sur le bouton vert Exécuter (ou appuyez sur F5) pour exécuter le script.
  • Mettez la ligne de la vanne 24 volts sous tension, laissez-la ainsi quelques secondes, puis coupez-la à nouveau.
  • Consultez le message dans le Shell en bas de Thonny.
Shell x
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot 24V valve line: OFF (GPIO19 = 1) 24V valve line: ENERGIZED (GPIO19 = 0) 24V valve line: OFF (GPIO19 = 1) 24V valve line: ENERGIZED (GPIO19 = 0) 24V valve line: OFF (GPIO19 = 1)
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡

Si le Shell indique l'inverse de ce que fait la LED d'état du module, c'est le cas actif à l'état HAUT vu précédemment - réglez MODULE_ACTIVE_LOW sur False et exécutez à nouveau le script.

Comme le script a été enregistré sur le périphérique MicroPython sous le nom main.py, il démarre tout seul à chaque mise sous tension de l'ESP32, sans ordinateur connecté. C'est ce qui en fait un moniteur d'entrée isolée autonome - associez-le au tutoriel ESP32 - Relais. et l'ESP32 pourra réagir à la ligne 24 volts au lieu de simplement la signaler.

Vidéo

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 !