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: 60

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.

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2020   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço