#include <WiFiManager.h> // Biblioteca para facilitar a configuração do WiFi
#include <ModbusIP_ESP8266.h> // Biblioteca para comunicação Modbus TCP/IP
// Definição dos endereços e pinos para entradas digitais
const int DiscreteInputAddresses[] = {0, 1, 2}; // Endereços das entradas digitais no Modbus
const int DiscreteInputPins[] = {26, 27, 14}; // Pinos que serão utilizados como entradas digitais na ESP32
// Definição dos endereços e pinos para saídas digitais
const int CoilsAddresses[] = {3, 4, 5}; // Endereços das saídas digitais no Modbus
const int CoilPins[] = {32, 33, 25}; // Pinos que serão utilizados como saídas digitais na ESP32
IPAddress remote(192, 168, 18, 103); // Endereço IP do dispositivo Modbus remoto
ModbusIP mb; // Objeto para comunicação Modbus IP
void setup() {
Serial.begin(921600); // Inicialização da comunicação serial
// Configuração dos pinos de entradas digitais
for (int i = 0; i < sizeof(DiscreteInputPins) / sizeof(DiscreteInputPins[0]); i++) {
pinMode(DiscreteInputPins[i], OUTPUT);
}
// Configuração dos pinos de saídas digitais
for (int i = 0; i < sizeof(CoilsAddresses) / sizeof(CoilsAddresses[0]); i++) {
pinMode(CoilPins[i], OUTPUT);
}
// Configuração do WiFi usando WiFiManager
WiFiManager wm;
//wm.resetSettings();
bool res = wm.autoConnect("AutoConnectAP", "password"); // Tenta conectar automaticamente a uma rede WiFi
Serial.println(res ? "Conectado com sucesso" : "Falha ao conectar"); // Mensagem de conexão bem-sucedida ou falha
mb.client(); // Inicialização do Modbus TCP/IP como cliente
}
bool DiscreteInputStates[sizeof(DiscreteInputPins)]; // Estado das entradas digitais
bool CoilStates[sizeof(CoilsAddresses)]; // Estado das saídas digitais
void loop() {
mb.connect(remote); // Conectar ao dispositivo Modbus remoto
// Ler o estado das entradas digitais, atualizar no Modbus e armazenar no array DiscreteInputStates
for (int i = 0; i < sizeof(DiscreteInputPins) / sizeof(DiscreteInputPins[0]); i++) {
DiscreteInputStates[i] = digitalRead(DiscreteInputPins[i]);
mb.writeCoil(remote, DiscreteInputAddresses[i], DiscreteInputStates[i]);
}
// Ler o estado das saídas digitais do Modbus e atualizar os pinos correspondentes
for (int i = 0; i < sizeof(CoilsAddresses) / sizeof(CoilsAddresses[0]); i++) {
mb.readCoil(remote, CoilsAddresses[i], &CoilStates[i]);
digitalWrite(CoilPins[i], CoilStates[i]);
}
mb.task(); // Realizar a tarefa Modbus
delay(100); // Aguardar um curto período de tempo antes de repetir o loop
}