ESP32 - Modbus
Dieses Tutorial erklärt dir, wie du den ESP32 mit dem Modbus-Protokoll verwendest.
Über Modbus
Modbus ist ein Protokoll, das die Kommunikation von Gerät zu Gerät, von Gerät zu Software/App und von Geräten zu HMI ermöglicht. Es wird in industriellen Geräten häufig eingesetzt.
Wir können uns vorstellen, dass Modbus eine Kommunikationssprache zwischen Geräten, Software/Apps und HMI ist.
Es gibt drei weit verbreitete Modbus-Typen: Modbus RTU, Modbus ASCII und Modbus TCP:
- Modbus RTU und Modbus ASCII werden über serielle Leitungen (RS-232/RS-422/RS-485) verwendet
- Modbus TCP wird über Ethernet oder WLAN verwendet
Warum Modbus verwenden?
Nehmen wir zum Beispiel einen konkreten Fall:
- Ein ESP32 #1 ist an einen Schalter angeschlossen.
- Ein ESP32 #2 ist an eine LED angeschlossen.
- ESP32 #1 und ESP32 #2 sind weit voneinander entfernt.
- Wenn der Schalter auf AN gestellt wird, schalte die LED ein.
- Wenn der Schalter auf AUS gestellt wird, schalte die LED aus.

Der einfachste Weg, das obige Beispiel umzusetzen, besteht darin, selbst ein einfaches Protokoll zu definieren:
- ESP32 #1 sendet ein Byte an ESP32 #1, um ESP32 #1 über die Änderung des Zustands des Schalters zu informieren. Der Wert des Datenbytes ist:
- 1: Wenn der Schalter auf AN geschaltet wird
- 0: Wenn der Schalter auf AUS geschaltet wird
- Wenn ESP32 #2 ein Byte Daten von ESP32 #1 erhält, lautet der Wert:
- 1: LED einschalten
- 0: LED ausschalten
- ESP32 #1 möchte bestätigt bekommen, ob der Befehl von ESP32 #2 empfangen und erfolgreich ausgeführt wird oder nicht
- ESP32 #1 möchte mehrere LEDs auf ESP32 #2 steuern
- ESP32 #2 möchte aktiv den Zustand des Schalters auf ESP32 #1 auslesen
- ESP32 #2 möchte einen Schalter verwenden, um eine LED auf ESP32 #1 zu steuern
- Und immer mehr Fälle
- Wir müssen die Befehle nicht definieren; Modbus hat sie für alle Anwendungsfälle definiert.
- Der ESP32 kann mit allen Geräten oder Software arbeiten, die Modbus verwenden.
Die obige Definition bewirkt, dass der Schalter auf ESP32 #1 die LED auf ESP32 #2 steuert. Allerdings wollen wir uns einige Fälle vorstellen:
Es ist nicht einfach, alle Anwendungsfälle selbst zu unterstützen.
Ein weiteres Problem tritt auf, wenn wir ein eigenes Protokoll verwenden. Der ESP32 kann nicht mit anderen Geräten kommunizieren, die ein anderes Protokoll verwenden.
⇒ Wir benötigen ein Standardprotokoll, das alle der oben genannten Probleme löst ⇒ Das Modbus-Protokoll ist ein Standardprotokoll, das wir verwenden können.
Der Vorteil des Modbus-Protokolls gegenüber einem selbstdefinierten Protokoll:
Wann sollte man Modbus verwenden und wann sollte man ihn nicht verwenden.
Da das Modbus-Protokoll nicht leicht zu verstehen und zu implementieren ist, steht sogar eine Modbus-Bibliothek zur Verfügung. Sie können ein einfaches, selbst definiertes Protokoll verwenden, wie oben beschrieben, wenn:
- Das System ist einfach, ein solcher Schalter am ESP32 #1 steuert eine LED am ESP32 #2.
- Der ESP32 muss nicht mit anderen Geräten oder Software arbeiten.
Wir sollten Modbus verwenden, wenn:
- Das System ist kompliziert.
- Das System erfordert eine hohe Zuverlässigkeit.
- Der ESP32 muss mit anderen Geräten und Software zusammenarbeiten.
Wie das Modbus-Protokoll funktioniert
Konzepte
Es gibt sechs wichtige Konzepte im Modbus:
- Master und Slave
- Anfrage und Antwort
- Funktionscode (FC) und Adresse
Wenn zwei ESP32 miteinander über Modbus kommunizieren:
- Ein ESP32 arbeitet als Master
- Der andere ESP32 arbeitet als Slave
Der Master sendet eine Anfrage an den Slave, und der Slave sendet eine Antwort an den Master.

Eine Anfrage, die von einem Master an einen Slave gesendet wird, enthält die untenstehenden Informationen:
- Funktionscode (FC): 1 Byte, ist der Befehl, der dem Sklaven sagt, was zu tun ist. Zum Beispiel liest er den Zustand eines digitalen Eingangspins, eines digitalen Ausgangspins oder eines analogen Eingangspins und steuert einen digitalen Ausgangspin.
- Adresse: 2 Byte, ist die Adresse, die dem Sklaven sagt, wo er zu handeln hat. Zum Beispiel erhält jeder digitale Ein-/Ausgang und jeder analoge Eingangspin eine eindeutigeAdresse.
- Daten (z.B. Steuerwert)
Wenn eine Anfrage von einem Master empfangen wird, führt der Slave die entsprechende Aktion aus und sendet das Ergebnis in einer Antwort zurück.
Funktionscode
Der Modbus-Standard definiert viele Funktionscodes. Um Anfänger nicht zu überfordern, lass uns einige wesentliche Funktionscodes betrachten:
- FC 01 (Lesen von Spulen): ist ein Befehl, der den Zustand der digitalen Ausgangspins liest
- FC 02 (Lesen von diskreten Eingängen): ist ein Befehl, der den Zustand der digitalen Eingänge liest
- FC 05 (Schreiben einer einzelnen Spule): ist ein Befehl, der den Zustand der digitalen Ausgangspins steuert (schreibt)
FC 01 zeigt an, dass der Funktionscode den Wert 0x01 hat.
Bei der Verwendung der ESP32-Modbus-Bibliothek müssen Sie feststellen:
- Welchen Funktionscode verwenden
- Welche Adresse verwenden
Lass uns das Beispiel umsetzen, das wir am Anfang erwähnt haben.
- ESP32 Primär ist an LED #M angeschlossen, Schalter #M
- ESP32 Sekundär ist an LED #S angeschlossen, Schalter #S
- Lassen Sie Schalter #M so einstellen, dass LED #S gesteuert wird, und Schalter #S so einstellen, dass LED #M gesteuert wird

So macht man das:
- ESP32 Meister liest den Zustand des Schalters #M → sende eine Anfrage an Slave, um LED #S zu steuern ⇒ Slave steuert LED #S und sendet die Antwort
- ESP32 Meister sendet eine Anfrage an Slave, um den Zustand des Schalters #S zu lesen ⇒ Slave antwortet mit dem Zustand des Schalters #S → Meister steuert LED #M
Modbus RTU/ASCII und Modbus TCP
Wie am Anfang erwähnt wurde, gibt es drei weit verbreitete Modbus-Typen: Modbus RTU, Modbus ASCII und Modbus TCP.
- Systemdiagramm

- Protokollstapel

Die Modbus-Bibliothek für ESP32 ist verfügbar. Die detaillierte Anleitung zur Verwendung der Modbus-Bibliothek wird in einem weiteren Tutorial vorgestellt. Besuchen Sie unsere Facebook-Seite, um das Update zu erhalten.