MODBUS IP com esp32

Prezados,

adaptei a biblioteca ModbusIP do Prof André Sarmento do ESP8266 para o ESP32. Já testei e funcionou. A única mudança foi a troca do cabeçalho de WifiESP8266 para Wifi. Quem não conhece o ESP32, recomendo dar uma pesquisada sobre ela, é uma placa muito poderosa.

Fica aqui o Link:

5 curtidas

Muito bom o compartilhamento, é o caminho que estou começando a percorrer, sabe se o código tem alguma orientação a interconectar com serial RS485 ?

Vou acompanhar o post, pois já estou usando o ESP8266 faz tempo.
Já sou um hard user.

Esta biblioteca é uma adaptação para o CHIP ESP32 que é diferente do ESP8266. Fica aqui o link para você ver em detalhes o quanto é poderosa esta nova placa da Espressif:

http://espressif.com/en/products/hardware/esp32/overview

Pergunta sobre o ESP12, também já utilizo a LIB do Prof. Sarmento para modbus IP, porém no ESP, percebi o seguinte para enviar valores, totalizadores tipo um valor decimal “2345”, ele o faz apenas em HEX, porém quando utilizo a LIB para o arduino ethernet shiel, não tem este problema, podem me ajudar, preciso enviar valores decimais acumulados na memoria do ESP via modbus ip.

Você quer mandar valores float, é isso? Tipo, como exemplo, o valor “32.8”?

Consegui resolver depois de muita pesquisa, chega ser idiota o problema, mas como não conhecia o tipo de variável usada na Lib do Sarmento, abri o código dele e vi que era word, então fiz o seguinte:

  • meu contador é do tipo int

“…
contador = contaPulso/2;
variavelChar = char(contador);
mb.Hreg(HOLDING_REGISTER,variavelChar);
…”

Com isso o valor chega no Scada igual a variavel original do contador, se não for desta forma não manda nada.

1 curtida

Oi. Sou novo aqui então se minha pergunta estiver no lugar errado me desculpem. Mais estou com um grave problema estou necessitando muito da biblioteca modbus rtu para esp 32 já rodei na Internet em tudo que é lugar caso alguém possa me dar essa super ajuda visto que no caso da modbus IP se conseguiu uma solução. Desde já muito obrigado galera.

Eu fiz uma contribuição para a biblioteca do Sarmento no Modbus Serial. Mas ele ainda não revisou meu commit.
Nele eu reduzi o uso da memória SRAM significativamente por mudar o uso estático da tabela de CRC da SRAM para a flash.

Caso alguém precisar, posso puxar essa melhoria para meu github também.

Bom dia , João.

Muito bom. Realizei testes e realmente funcionou muito bem.

Abraço.

Chegou a hora de fazer essa adaptação. Quero o modbus no ESP32. Veremos o que dou conta de fazer sozinho.

Tô usando a biblioteca e funciona muito bem! Excelente trabalho. A única coisa que não consegui foi manter o socket aberto. Existe essa possibilidade?

Eu estou na luta. Quero colocar para funcionar no ESP32.

Existe algum exemplo/tutorial desta biblioteca funcionando com o scadaBR?

/*
Controle de Ar Condicionado
Autor: Will Douglas (github.com/willdowglas)
*/

/* Bibliotecas */
#include <Arduino.h>
#include <Modbus.h>
#include <ModbusIP_ESP32.h>

/* Constantes */
#define SSID lulu2// Insira aqui nome e senha do wifi.
#define PASSWD bebeth08
//Portas do ESP32
const unsigned int ar_condicionado_001 = 18;
const unsigned int ar_condicionado_002 = 19;
//Registradores do Modbus IP
const unsigned int mb_reg_ar_condicionado_001 = 0;
const unsigned int mb_reg_ar_condicionado_002 = 0;

/* Objetos */
ModbusIP mb;

void setup(){
mb.config(“lulu2”, “bebeth08”);
pinMode(ar_condicionado_001, OUTPUT);
pinMode(ar_condicionado_002, OUTPUT);
mb.addCoil(mb_reg_ar_condicionado_001);
mb.addCoil2(mb_reg_ar_condicionado_002);
}

void loop(){
mb.task();
digitalWrite(ar_condicionado_001, !mb.Coil(mb_reg_ar_condicionado_001)); //envia 0v para acionar relé
digitalWrite(ar_condicionado_002, !mb.Coil2(mb_reg_ar_condicionado_002)); //envia 0v para acionar relé
}

esse codigo funciona.
Eu preciso em vez de enviar um comando, preciso enviar um valor de uma variavel do tipo int, pode me ajudar?
Obrigado

Pra enviar int tem que usar o addHreg e .Hreg
Se não me engano tem um exemplo pronto quando baixa a biblioteca.

Amigo, muito obrigado, ja consegui fazer com a sua ajuda? ainda trabalha com o scadabr? quer me ajudar em um projeto? obrigado!

*? = ! < --------------------------------------------erro meu, desculpe!

vc usa qual lib com ethernet shield? Uso uma “mudbus” porém os arduinos perdem comunicação com o supervisório. Eu implementei um reset via software e mesmo assim a comunicação ainda se perde.

1 curtida

Boa noite João. Ótima inciativa, a placa esp32 é realmente muito poderosa.

Testei a biblioteca e deu erro de compilação:

C:\Users\LEONIDASLOPESDEMELO\Documents\Arduino\libraries\ModbusIP_ESP32-master\ModbusIP_ESP32.cpp: In member function ‘void ModbusIP::task()’:
C:\Users\LEONIDASLOPESDEMELO\Documents\Arduino\libraries\ModbusIP_ESP32-master\ModbusIP_ESP32.cpp:50:10: error: ‘class ModbusIP’ has no member named ‘receivePDU’
this->receivePDU(_frame);
^
C:\Users\LEONIDASLOPESDEMELO\Documents\Arduino\libraries\ModbusIP_ESP32-master\ModbusIP_ESP32.cpp:53:18: error: ‘MB_REPLY_OFF’ was not declared in this scope
if (_reply != MB_REPLY_OFF) {
^
Estou com a impressão que falta alguma coisa.
Seria o arquivo modbus.h ?

Obrigado pela atenção.