ESP32 - Modbus
Este tutorial ensina você a usar o ESP32 com o protocolo Modbus
Sobre o Modbus
O Modbus é um protocolo que permite a comunicação de dispositivo para dispositivo, de dispositivo para software/aplicativo e de dispositivos para IHM (HMI). Ele é muito usado em dispositivos industriais.
Podemos imaginar o Modbus como uma linguagem de comunicação entre dispositivos, software/aplicativos e IHM.
Existem três tipos de Modbus muito usados: Modbus RTU, Modbus ASCII e Modbus TCP:
- Modbus RTU e Modbus ASCII são usados em linha serial (RS-232/RS-422/RS-485)
- Modbus TCP é usado em Ethernet ou WiFi
Por que usar o Modbus?
Vamos pegar um caso específico como exemplo:
- Um ESP32 #1 conectado a uma chave
- Um ESP32 #2 conectado a um LED
- O ESP32 #1 e o ESP32 #2 ficam longe um do outro
- Quando a chave é ligada (ON), acenda o LED.
- Quando a chave é desligada (OFF), apague o LED.

A forma mais fácil de implementar o exemplo acima é definir nós mesmos um protocolo simples:
- O ESP32 #1 envia um byte de dados para informar o ESP32 #1 sobre a mudança no estado da chave. O valor do byte de dados é:
- 1: Quando a chave é ligada (ON)
- 0: Quando a chave é desligada (OFF)
- Quando o ESP32 #2 recebe um byte de dados do ESP32 #1, se o valor for:
- 1: Acenda o LED
- 0: Apague o LED
- O ESP32 #1 quer receber a confirmação se o comando foi recebido e executado com sucesso pelo ESP32 #2 ou não
- O ESP32 #1 quer controlar vários LEDs no ESP32 #2
- O ESP32 #2 quer ler ativamente o estado das chaves no ESP32 #1
- O ESP32 #2 quer usar uma chave para controlar um LED no ESP32 #1
- E muitos outros casos.
- NÃO precisamos definir os comandos, o Modbus já os definiu para todos os casos de uso.
- O ESP32 pode trabalhar com qualquer dispositivo/software que use Modbus.
A definição acima faz a chave do ESP32 #1 controlar o LED do ESP32 #2. Porém, vamos imaginar alguns casos:
Não é fácil suportar todos os casos de uso por conta própria.
Outro problema surge ao usar um protocolo próprio. O ESP32 não consegue se comunicar com outros dispositivos que usam outro protocolo.
⇒ Precisamos de um protocolo padrão que resolva todos os problemas acima ⇒ O protocolo Modbus é um protocolo padrão que podemos usar.
A vantagem do protocolo Modbus sobre um protocolo definido por nós:
Quando usar e quando NÃO usar o Modbus
Como o protocolo Modbus não é fácil de entender e de implementar, mesmo existindo uma biblioteca Modbus, você pode usar um protocolo simples definido por você, como descrito acima, quando:
- O sistema é simples, como uma chave no ESP32 #1 controlando um LED no ESP32 #2
- O ESP32 NÃO precisa trabalhar com outros dispositivos/software
Devemos usar o Modbus quando:
- O sistema é complicado
- O sistema exige alta confiabilidade
- O ESP32 precisa trabalhar com outros dispositivos/software
Como o protocolo Modbus funciona
Conceitos
Existem seis conceitos importantes no Modbus:
- Master e Slave
- Requisição e Resposta
- Código de Função (FC) e Endereço
Quando dois ESP32 se comunicam usando Modbus:
- Um ESP32 trabalha como Master
- O outro ESP32 trabalha como Slave.
O Master envia uma requisição ao Slave, e o Slave envia uma resposta ao Master.

Uma requisição enviada de um Master para um Slave contém as seguintes informações:
- Código de Função (FC): 1 byte, é o comando que diz ao Slave o que fazer. Por exemplo, ler o estado de um pino de entrada digital, de um pino de saída digital ou de um pino de entrada analógica, ou controlar um pino de saída digital.
- Endereço: 2 bytes, é o endereço que diz ao Slave onde fazer. Por exemplo, cada pino de entrada/saída digital e de entrada analógica recebe um endereço único.
- Dados (por exemplo, valor de controle)
Ao receber uma requisição de um Master, o Slave executa a ação correspondente e devolve o resultado em uma resposta
Código de Função
O padrão Modbus define muitos Códigos de Função. Para não sobrecarregar os iniciantes, vamos ver alguns Códigos de Função essenciais:
- FC 01 (Read Coils): é um comando que lê o estado dos pinos de saída digital
- FC 02 (Read Discrete Inputs): é um comando que lê o estado dos pinos de entrada digital
- FC 05 (Write Single Coil): é um comando que controla (escreve) o estado dos pinos de saída digital
FC 01 indica que o valor do Código de Função é 0x01.
Ao usar a biblioteca Modbus do ESP32, você precisa determinar:
- Qual Código de Função usar
- Qual endereço usar
Vamos realizar o exemplo que mencionamos no início:
- O ESP32 Master está ligado ao LED #M e à CHAVE #M
- O ESP32 Slave está ligado ao LED #S e à CHAVE #S
- Vamos fazer a CHAVE #M controlar o LED #S, e a CHAVE #S controlar o LED #M

Como fazer:
- O ESP32 Master lê o estado da CHAVE #M → envia uma requisição ao Slave para controlar o LED #S ⇒ o Slave controla o LED #S e envia a resposta
- O ESP32 Master envia uma requisição ao Slave para ler o estado da CHAVE #S ⇒ o Slave responde com o estado da CHAVE #S → o Master controla o LED #M
Modbus RTU/ASCII e Modbus TCP
Como mencionado no início, existem 3 tipos de Modbus muito usados: Modbus RTU, Modbus ASCII e Modbus TCP.
- Diagrama do sistema

- Pilha de protocolos

A biblioteca Modbus para ESP32 está disponível. As instruções detalhadas de uso da biblioteca Modbus serão apresentadas em outro tutorial. Curta nossa página no Facebook para receber as atualizações.