MODBUS IP com esp32


#22

Bobeira, era isso mesmo, esqueci de instalar a Modbus.h. Agora tá funcionando. Muito bom.


#23

Eu também meu amigo. Fiz uma comunicacao utilizando o scada 1.0, o esp32s e o protocolo modbus ip. mas fica muito instavel. Ja coloquei ate o computador com o scada e os esp em um roeador separado , só eles em uma rede exclusiva! Mas mesmo assim, tem horas que da muita perda de pacote, de conexao,aff! Estou pensando em passar a utilizar o modulo rs485 com o esp32s. alguem ja utilizou?


#24

dear mainlcl , i did a project using esp32 serial2 port. and it worked very well using the great Prof André Sarmento’s Modbus serial library. what you need is to by an rs485 to ttl converter like the one in the link


and connect it to esp32.
good luck if you need a code i can help.


#25

Boa noite, alguem poderia passar o codigo para modbusip no esp32?


#26

Ola, boa noite, por acaso teria a biblioteca para comunicar o esp32 com o scadabr via modbus ip? Recebi esta semana meu esp e estava querendo começar os teste


#27

João,
Tentei utilizar a sua biblioteca mas continuo com o erro “Erro compilando para a placa DOIT ESP32 DEVKIT V1”
Minha placa é a ESP32 DEV KIT V1, qualquer código que eu coloque, como por exemplo o blink funciona sem problemas. Mas quando carrego o sensor de temperatura na biblioteca ModbusIP fico com esse erro.
Pode me ajudar?


#28

Bom dia!
Gostaria de sua ajuda , não consegui comunicação com o meu ESP 32 com scadaBr.
O ESP 8266 consigo.


#29

OBRIGADO PESSOAL!

CONSEGUI ESTABELECER COMUNICAÇÃO COM SCADABR EO ESP.32 DE FORMA ESTÁVEL.

ESTOU UTILIZANDO
O CLP ( https://opller.com/pt/produtos/ops010/)
NAS MINHAS APLICAÇÕES NA INDUSTRIA.

SEGUE O CÓDIGO QUE UTILIZEI:

/*

OPS010 COM ESP32

*/
#ifdef ESP8266
#include <ESP8266WiFi.h>
#else //ESP32
#include <WiFi.h>
#endif
#include <ModbusIP_ESP8266.h>

//DADOS DE CONEXÃO
const char* ssid = "**************";
const char
password = “************”;

IPAddress ip(192,168,10,49); // IP desta placa
IPAddress gateway(192,168,1,1); //GATEWAY
IPAddress subnet(255,255,255,0); //MASCARA DE REDE
//REGISTRO DE OFFSETS

const int VACUO= 99;

// =======MAPEAMENTO DE HARDWARE_ SAIDA DIGITAIS=======

#define pin_Y1 13
#define pin_Y2 12
#define pin_Y3 27
#define pin_Y4 26
#define pin_Y5 25
#define pin_Y6 33
#define pin_Y7 32
#define pin_Y8 4

#define statusconexao 2
// =======MAPEAMENTO DE HARDWARE_ ENTRADAS DIGITAIS=======
#define pin_X1 15
#define pin_X2 34
#define pin_X3 35
#define pin_X4 5
#define pin_X5 18
#define pin_X6 19
#define pin_X7 14
#define pin_X8 36

//=======Entradas analógicas=======
#define pin_AI1 36

//=======Saídas analógicas=======
#define pin_AO1 23

//VARIAVEIS
int delayLoop = 10;
float tensao = 0; // Variável que armazenará
int val=0;
float vacuo = 0;
float vacuometro;
// =======OBJETO MODBUS IP========
ModbusIP mb;

long ts;

void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password); //
WiFi.config(ip, gateway, subnet); //
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}

 Serial.println("");
Serial.println("WiFi connected");  
Serial.println("IP address: ");
Serial.println(WiFi.localIP());

digitalWrite(statusconexao,HIGH);
mb.server();

//DEFINIÇÃO DOS PINOS/BORNES(SAIDA /ENTRADA) 

pinMode(statusconexao, OUTPUT);
//REGISTRADORES ENDEREÇAMENTO
mb.addIreg(VACUO);
ts = millis();
}

void loop() {
//Call once inside loop() - all magic here
mb.task();
//TRATAMENTO SAIDAS SETADAS PELO SUPERVISRIO( Coil)
//digitalWrite(rele, mb.Coil(RELE));

// TRATAMENTO REGISTRO DE ENTRADA DIGITAL
//mb.Ists(CONTATO_AUX , digitalRead(contato_NA ));

// DEFINIR TEMPO DE ATUALIZAÇÃO/ENVIO ANALOGICO
if (millis() > ts + 1000) {
ts = millis();
val = analogRead(pin_AI1);

// RELAÇÃO: RESOLUÇÃO - RANGER - VÁCUO : 1675mmH2O
// 12 bits /2^12 = 4095 - 10 bits / 2^10= 4095
tensao = val * (3.3 / 4095.0);
vacuo = tensao * (1675.0 / 3.3);

vacuometro = map(vacuo, 0, 1675, 1675, 0);

//DIRECIONAMENTO REGISTRO DE ENTRADA ANALOGICA
mb.Ireg(VACUO ,vacuometro);
Serial.println(“TENSÃO”);
Serial.println(tensao);
Serial.println(“VACUO”);
Serial.println(vacuometro);
}

delay(delayLoop);
}