ESP32 - Modbus
Ce tutoriel vous explique comment utiliser l'ESP32 avec le protocole Modbus.
À propos de Modbus
Modbus est un protocole qui permet la communication de dispositif à dispositif, de dispositif à logiciel/application et de dispositifs à IHM. Il est largement utilisé dans les appareils industriels.
Nous pouvons imaginer que Modbus est un langage de communication entre les dispositifs, les logiciels/applications et les interfaces homme-machine (IHM).
Il existe trois types de Modbus largement utilisés : Modbus RTU, Modbus ASCII et Modbus TCP.
- Modbus RTU et Modbus ASCII sont utilisés sur ligne série (RS-232/RS-422/RS-485)
- Modbus TCP est utilisé sur Ethernet ou WiFi
Pourquoi utiliser Modbus ?
Prenons un cas spécifique comme exemple :
- Un ESP32 n°1 connecté à un interrupteur
- Un ESP32 n°2 connecté à une LED
- ESP32 n°1 et ESP32 n°2 sont éloignés l'un de l'autre
- Lorsque l'interrupteur est mis en position ON, allumez la LED.
- Lorsque l'interrupteur est mis en position OFF, éteignez la LED.
Le moyen le plus simple de mettre en œuvre l'exemple ci-dessus est de définir un protocole simple par nous-mêmes :
- ESP32 #1 envoie un octet de données pour informer ESP32 #1 du changement d'état de l'interrupteur. La valeur de l'octet de données est :
- 1 : Lorsque l'interrupteur est mis en position ON
- 0 : Lorsque l'interrupteur est mis en position OFF
- Lorsque ESP32 #2 reçoit un octet de données de ESP32 #1, si la valeur est :
- 1 : Allumez la LED
- 0 : Éteignez la LED
- L'ESP32 #1 souhaite obtenir une confirmation de la réception et de l'exécution réussie de la commande par l'ESP32 #2
- L'ESP32 #1 souhaite contrôler plusieurs LED sur l'ESP32 #2
- L'ESP32 #2 souhaite lire activement l'état des interrupteurs sur l'ESP32 #1
- L'ESP32 #2 souhaite utiliser un interrupteur pour contrôler une LED sur l'ESP32 #1
- Et bien d'autres cas.
- Nous n'avons PAS besoin de définir les commandes, Modbus les a définies pour tous les cas d'utilisation.
- L'ESP32 peut fonctionner avec n'importe quel dispositif/logiciel utilisant Modbus.
La définition ci-dessus fait en sorte que l'interrupteur sur ESP32 #1 contrôle la LED sur ESP32 #2. Cependant, imaginons quelques cas :
Il n'est pas facile de prendre en charge tous les cas d'utilisation par nous-mêmes.
Un autre problème survient lorsque nous utilisons un protocole par nous-mêmes. L'ESP32 ne peut pas communiquer avec d'autres dispositifs qui utilisent un autre protocole.
⇒ Nous avons besoin d'un protocole standard qui résout tous les problèmes mentionnés ci-dessus ⇒ Le protocole Modbus est un protocole standard que nous pouvons utiliser.
L'avantage du protocole Modbus sur un protocole auto-défini :
Quand utiliser et ne PAS utiliser Modbus
Parce que le protocole Modbus n'est pas facile à comprendre et à mettre en œuvre, même si la bibliothèque Modbus est disponible. Vous pouvez utiliser un protocole simple défini par vous-même comme décrit ci-dessus lorsque :
- Le système est simple, un interrupteur sur ESP32 #1 contrôle une LED sur ESP32 #2
- L'ESP32 n'a pas besoin de fonctionner avec d'autres appareils/logiciels
Nous devrions utiliser Modbus lorsque :
- Le système est compliqué
- Le système nécessite une grande fiabilité
- L'ESP32 doit fonctionner avec d'autres dispositifs/logiciels
Comment fonctionne le protocole Modbus
Concepts
Il y a six concepts importants dans Modbus :
- Maître et Esclave
- Requête et Réponse
- Code de Fonction (FC) et Adresse
Lorsque deux ESP32 communiquent entre eux en utilisant Modbus :
- Un ESP32 fonctionne comme un Maître
- L'autre ESP32 fonctionne comme un Esclave.
Le Maître envoie une demande au Esclave, et l'Esclave envoie une réponse au Maître.
Une demande envoyée d'un Maître à un Esclave contient les informations suivantes :
- Code de fonction (FC) : 1 octet, est la commande qui indique au esclave quoi faire. Par exemple, lit l'état d'une broche d'entrée numérique, d'une broche de sortie numérique ou d'une broche d'entrée analogique, contrôle une broche de sortie numérique.
- Adresse : 2 octets, est l'adresse qui indique au esclave où agir. Par exemple, chaque broche d'entrée/sortie numérique et broche d'entrée analogique se voit attribuer une adresse unique.
- Données (par ex. valeur de contrôle)
Lors de la réception d'une demande d'un Maître, l'Esclave prend l'action correspondante et renvoie le résultat dans une réponse
Code de fonction
La norme Modbus définit de nombreux codes de fonction. Pour ne pas surcharger les débutants, abordons quelques codes de fonction essentiels :
- FC 01 (Lire les bobines) : est une commande qui lit l'état des broches de sortie numériques
- FC 02 (Lire les entrées discrètes) : est une commande qui lit l'état des broches d'entrée numériques
- FC 05 (Écrire une seule bobine) : est une commande qui contrôle (écrit) l'état des broches de sortie numériques
FC 01 indique que la valeur du Code de Fonction est 0x01.
Lorsque vous utilisez la bibliothèque Modbus ESP32, vous devez déterminer :
- Quel code de fonction utiliser
- Quelle adresse utiliser
Réalisons l'exemple que nous avons mentionné au début :
- ESP32 Maître est connecté à LED #M, INTERRUPTEUR #M
- ESP32 Esclave est connecté à LED #S, INTERRUPTEUR #S
- Faisons en sorte que l'INTERRUPTEUR #M contrôle LED #S, et que l'INTERRUPTEUR #S contrôle LED #M
Comment faire :
- ESP32 Maître lit l'état de l'INTERRUPTEUR #M → envoie une demande au Esclave pour contrôler la LED #S ⇒ Esclave contrôle la LED #S et envoie la réponse
- ESP32 Maître envoie une demande à Esclave pour lire l'état de l'INTERRUPTEUR #S ⇒ Esclave répond avec l'état de l'INTERRUPTEUR #S → Maître contrôle la LED #M
Modbus RTU/ASCII et Modbus TCP
Comme mentionné au début, il existe trois types de Modbus largement utilisés : Modbus RTU, Modbus ASCII et Modbus TCP.
- Schéma du système
- Pile de protocoles
La bibliothèque Modbus pour ESP32 est disponible. Les instructions détaillées pour utiliser la bibliothèque Modbus seront présentées dans un autre tutoriel, aimez notre page Facebook pour obtenir la mise à jour.