Olá,

Estou tentando utilizar a biblioteca ESPsoftwareserial com o ESP32 e não estou conseguindo fazer leitura, apenas escrita com um conversor RS485 para comunicação com um Inversor via Modbus.

Eu sei que o ESP32 possui 3 portas UARTS físicas, porém meus periféricos não permitem que eu possa utiliza-las, por isso a tentativa de utilizar a softwareserial.

O código para escrita e leitura estão funcionando corretamente pois já testei com outro hardware.

Minha dificuldade está em fazer o pino RX configurado para o softwareserial funcionar. Estou utilizando um divisor de tensão para reduzir de 5V para 3.3V.

O baudrate, quantidade de bit, paridade e stop bits estão corretos.

Testei vários pinos para o RX mas até agora nenhum funcionou.

Alguém já tentou algo do tipo?

Exibições: 3191

Responder esta

Respostas a este tópico

Bom dia José Gustavo,

Obrigado pela atenção.

O ESP32 possui 3 portas UART físicas, porém no meu módulo elas já estão sendo todas utilizadas. No entanto pelo que pesquisei é possível utilizar qualquer GPIO como serial, assim como é feito no Arduino.

Minha dificuldade que era fazer a biblioteca ESPSoftwareserial funcionar na verdade talvez seja um problema na biblioteca Modbusmaster.. Pelo que pesquisei essa biblioteca Modbus não funciona corretamente para o ESP32 assim como funciona para o Arduino. Há um problema para execução de leitura, e é exatamente o que está acontecendo com meus testes.

Utilizando um Arduino UNO, a leitura e escrita de registros num Inversor de Frequência funcionam perfeitamente, porém com o ESP32 no lugar do Arduino só funciona a escrita. Como disse, a princípio achei que fosse um problema na biblioteca ESPSoftwareserial, mas provavelmente seja na Modbusmaster.

Estou a procura da solução. Na internet encontrei casos que confirmam que é possível usar a biblioteca Modbus fazendo algumas alterações ou também fazer tudo manual sem o uso de biblioteca, porém nada do que eu pesquisei resolveu minha situação ainda. 

Ola.
Vc esta' usando todas as uarts ou usando os pinos que originalmente são para a uart ?
Se for os pinos, é só mudar.
Quando vc abre a serial vc usa, por ex:

Serial.begin(19200);
Serial1.begin(9600, SERIAL_8N1, 14, 26);
Serial2.begin(9600, SERIAL_8N1, 27, 25);

Matou Eduardo! 

Bem lembrado ! Uma das caraterísticas fantásticas do ESP32 é que os pinos GPIOs podem ser configurados para qualquer função. 

I love ESP32 ! KKKKKK

Boa tarde Eduardo,

No meu módulo todos os pinos "originais" para UART estão sendo utilizados.

Compreendi que as 3 seriais que posso criar não precisam utilizar necessariamente os pinos "originais" para UART, e que ao contrário do que eu tinha entendido, não preciso utilizar uma biblioteca específica para isso, basta fazer a declaração conforme você exemplificou.

Como ainda não consegui fazer a comunicação completa utilizando o conversor RS485, resolvi fazer um teste preliminar, sendo a comunicação entre o ESP32 e um Arduino UNO via serial. 

O resultado foi o mesmo problema que acontecia no MODBUS, em que eu só conseguia enviar informação do ESP32 para o Inversor, e o contrário não funcionava. 

Portanto nesse meu teste, o envio de informação da serial do ESP32 para o Arduino UNO funciona, quando tento o contrário (do UNO para o ESP32) a informação chega distorcida.

Segue o código (Arduino envia para ESP32) para análise:

--------------------------------------------------------

CÓDIGO NO ARDUINO UNO

void setup() {

Serial.begin(4800, SERIAL_8N1);

}
void loop() {
Serial.println("giovanni"); // envia o texto Giovanni para a serial do ESP32
delay(1000);
}

 --------------------------------------------------------

--------------------------------------------------------

CÓDIGO NO ESP32

void setup() {

Serial.begin(9600); // para utilizar serial monitor
Serial2.begin(4800, SERIAL_8N1, 26, 27); // para receber dados do arduino

}
void loop() {

while (Serial2.available()) {
char c = Serial2.read();
Serial.print(c);
}
}

 --------------------------------------------------------

Isso é o que o ESP32 interpreta:

Estou tentando várias configurações para as portas seriais (baudrate, paridade, etc), mas até agora nenhuma funcionou.

Estou utilizando um divisor de tensão para rebaixar os 5V do Arduino para 3.3V no RX do ESP32.

Veja por favor se pode me ajudar a identificar onde estou falhando.

Acabei de fazer o teste aqui trocando o pino do RX, de 26 pelo 0 e funcionou.

Serial2.begin(4800, SERIAL_8N1, 0, 27); // para receber dados do arduino

Vou testar para o MODBUS agora.

Funcionou dessa forma pessoal. Deu certo com outros pinos também.

Olá Giovanni, estou precisando pegar no Esp32 os dados de uma balança que está conectada a um conversor rs232. Você pode me explicar como fez com o conversor rs485? Obrigado!

Olá Carlos, eu utilizei esse conversor na serial do ESP32:

https://www.filipeflop.com/produto/modulo-conversor-rs485-para-ardu...'

No seu caso tem quer ser um conversor para RS232.

E utilizei a biblioteca ModbusMaster: https://github.com/4-20ma/ModbusMaster

Configurei os parâmetros de comunicação entre os dispositivos e li e escrevi nos endereços que precisava.

Obrigado Giovanni pela ajuda.

Você poderia me enviar um email (carlos.martins@ifc.edu.br) para conversarmos.

Att

Boa tarde  Giovanni Rasera, sei que o topico ja e bem antigo, mas consigo fazer ao contrario, envia comando para os pinos do Arduino?

Exemplo: envia um comando 010101 para o pino 10 do arduino e demais comandos para outros pinos?

RSS

© 2022   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço