ESP32 - Modbus
Este tutorial le enseña cómo usar ESP32 con el protocolo Modbus.
Acerca de Modbus
Modbus es un protocolo que permite la comunicación de dispositivo a dispositivo, de dispositivo a software/aplicación y de dispositivos a la HMI. Es ampliamente utilizado en dispositivos industriales.
Podemos imaginar que Modbus es un lenguaje de comunicación entre dispositivos, software/aplicación y HMI.
Existen tres tipos de Modbus de amplio uso: Modbus RTU, Modbus ASCII y Modbus TCP:
- Modbus RTU y Modbus ASCII se utilizan sobre la línea serie (RS-232/RS-422/RS-485)
- Modbus TCP se utiliza sobre Ethernet o WiFi
¿Por qué usar Modbus?
Tomemos un caso específico, por ejemplo:
- Un ESP32 #1 conectado a un interruptor
- Un ESP32 #2 conectado a un LED
- ESP32 #1 y ESP32 #2 están lejos entre sí
- Cuando el interruptor esté en ENCENDIDO, encienda el LED.
- Cuando el interruptor esté en APAGADO, apague el LED.

La forma más fácil de implementar el ejemplo anterior es definir un protocolo sencillo por nuestra cuenta:
- ESP32 #1 envía un byte de datos para informar ESP32 #1 sobre el cambio en el estado del interruptor. El valor del byte de datos es:
- 1: Cuando el interruptor se enciende
- 0: Cuando el interruptor se apaga
- Cuando ESP32 #2 recibe un byte de datos de ESP32 #1, si el valor es:
- 1: Encender LED
- 0: Apagar LED
- ESP32 #1 quiere recibir la confirmación de si el comando ha sido recibido y ejecutado con éxito por ESP32 #2 o no
- ESP32 #1 quiere controlar varios LEDs en ESP32 #2
- ESP32 #2 quiere leer activamente el estado de los interruptores en ESP32 #1
- ESP32 #2 quiere usar un interruptor para controlar un LED en ESP32 #1
- Y cada vez más casos.
- NO necesitamos definir los comandos; Modbus los definió para todos los casos de uso.
- El ESP32 puede trabajar con cualquier dispositivo o software que use Modbus.
La definición anterior hace que el interruptor en ESP32 #1 controle el LED en ESP32 #2. Sin embargo, imaginemos algunos casos:
No es fácil cubrir todos los casos de uso por nuestra cuenta.
Otro problema surge al usar un protocolo por nuestra cuenta. El ESP32 no puede comunicarse con otros dispositivos que utilizan otro protocolo.
⇒ Necesitamos un protocolo estándar que solucione todos los problemas anteriores ⇒ El protocolo Modbus es un protocolo estándar que podemos usar.
La ventaja del protocolo Modbus sobre un protocolo definido por uno mismo:
Cuándo se debe usar y cuándo NO se debe usar Modbus
Porque el protocolo Modbus no es fácil de entender e implementar, incluso hay una biblioteca Modbus disponible. Puedes usar un protocolo simple definido por ti mismo, como se describe arriba, cuando:
- El sistema es simple: un interruptor en ESP32 #1 controla un LED en ESP32 #2
- ESP32 no necesita trabajar con otros dispositivos/software
Debemos usar Modbus cuando:
- El sistema es complicado
- El sistema requiere una alta fiabilidad
- El ESP32 necesita trabajar con otros dispositivos/software
Cómo funciona el protocolo Modbus
Conceptos
Hay seis conceptos importantes en Modbus:
- Maestro y Esclavo
- Solicitud y Respuesta
- Código de Función (FC) y Dirección
Cuando dos ESP32 se comunican entre sí usando Modbus:
- Un ESP32 funciona como un Maestro
- El otro ESP32 funciona como un Esclavo.
El Maestro envía una solicitud al esclavo, y el esclavo envía una respuesta al Maestro.

Una solicitud enviada desde un maestro a un esclavo contiene la información a continuación:
- Código de Función (FC): 1 byte, es el comando que indica al Esclavo qué hacer. Por ejemplo, lee el estado de un pin de entrada digital, un pin de salida digital o un pin de entrada analógica, y controla un pin de salida digital.
- Dirección: 2 bytes, es la dirección que indica al Esclavo dónde actuar. Por ejemplo, a cada pin de entrada/salida digital y de entrada analógica se le asigna una dirección única.
- Datos (p. ej. valor de control)
Al recibir una solicitud de un Maestro, el Esclavo toma la acción correspondiente y devuelve el resultado en una respuesta
Código de Función
El estándar Modbus define muchos Códigos de Función. Para evitar sobrecargar a los principiantes, vamos a ver algunos Códigos de Función esenciales:
- FC 01 (Leer bobinas): es un comando que lee el estado de los pines de salida digitales
- FC 02 (Leer entradas discretas): es un comando que lee el estado de los pines de entrada digitales
- FC 05 (Escribir una única bobina): es un comando que controla (escribe) el estado de los pines de salida digitales
FC 01 indica que el valor del Código de Función es 0x01.
Al usar la biblioteca Modbus para ESP32, debes determinar:
- Qué Código de Función usar
- Qué Dirección usar
Vamos a realizar el ejemplo que mencionamos al principio:
- ESP32 Maestro está cableado al LED #M, INTERRUPTOR #M
- ESP32 Esclavo está cableado al LED #S, INTERRUPTOR #S
- Hagamos que el INTERRUPTOR #M controle el LED #S, y que el INTERRUPTOR #S controle el LED #M

Cómo hacerlo:
- ESP32 Maestro lee el estado del INTERRUPTOR #M → envía una solicitud a Esclavo para controlar LED #S ⇒ Esclavo controla LED #S y envía la respuesta
- ESP32 Maestro envía una solicitud Esclavo para leer el estado del INTERRUPTOR #S ⇒ Esclavo responde con el estado del INTERRUPTOR #S → Maestro controla LED #M
Modbus RTU/ASCII y Modbus TCP
Como se mencionó al principio, existen tres tipos de Modbus ampliamente utilizados: Modbus RTU, Modbus ASCII y Modbus TCP.
- Diagrama del sistema

- Pila de protocolos

La biblioteca Modbus para ESP32 está disponible. Las instrucciones detalladas para usar la biblioteca Modbus se presentarán en otro tutorial; síguenos en nuestra página de Facebook para obtener la actualización.