I have a circuit with ESP32 and max485 and a water level sensor E RS485. I cant read the date of the sensor and i got the erros RS485 "E0" (address incorrect). Thas is my problem i dont know the address of my sensor, so , i put the code to run with all tre address 0xXX possible , but it didnt find out. Could somebody help me.
//https://www.crescerengenharia.com/post/pta8d08-sensores-pt100-arduino-esp32-clps
#include <ModbusMaster.h>
#define MAX485_dir 4
#define MODBUS_RX_PIN 16 // Rx pin
#define MODBUS_TX_PIN 17 // Tx pin
#define MODBUS_SERIAL_BAUD 9600 // Baud rate for esp32 and max485 communication
uint8_t MODBUS_slave_Address = 0x00;
uint16_t MODBUS_slave_RegistersAddress = 0x0001;
ModbusMaster node;
void preTransmission() {
digitalWrite(MAX485_dir, 1);
}
void postTransmission() {
digitalWrite(MAX485_dir, 0);
}
void setup() {
pinMode(MAX485_dir, OUTPUT);
pinMode(2,OUTPUT);
digitalWrite(2,HIGH);
delay(2000);
digitalWrite(2,LOW);
digitalWrite(MAX485_dir, 0);
Serial.begin(115200);
Serial2.begin(MODBUS_SERIAL_BAUD, SERIAL_8E1, MODBUS_RX_PIN, MODBUS_TX_PIN);
node.begin(MODBUS_slave_Address, Serial2);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop() {
uint8_t result = node.readHoldingRegisters(MODBUS_slave_RegistersAddress, 1);
Serial.println("Data Requested");
if (result == node.ku8MBSuccess) {
Serial.print("Nível: ");
Serial.println(float(node.getResponseBuffer(0) / 10.00F ));
digitalWrite(2,HIGH);
Serial.print("MODBUS_slave_Address = ");
Serial.println(MODBUS_slave_Address, HEX);
Serial.print("MODBUS_slave_RegistersAddress = ");
Serial.println(MODBUS_slave_RegistersAddress, HEX);
return;
}else{
Serial.println("comunicação falhou");
Serial.println(result, HEX);
}
Serial.println("");
delay(1000);
MODBUS_slave_Address = MODBUS_slave_Address + 0x01;
// MODBUS_slave_RegistersAddress = MODBUS_slave_RegistersAddress + 0x0001;
// if(MODBUS_slave_RegistersAddress==0xFFFF){
// }
Serial.print("MODBUS_slave_Address = ");
Serial.println(MODBUS_slave_Address, HEX);
Serial.print("MODBUS_slave_RegistersAddress = ");
Serial.println(MODBUS_slave_RegistersAddress, HEX);
node.begin(MODBUS_slave_Address, Serial2);
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);