Hello,I am trying to set up communication with the Epever MPPT controller via Modbus. Unfortunately, with Heltec Wireless Stick V3 (Wireless Stick(V3) – Heltec Automation) based on ESP32 the communication does not work - on the serial port it prints periodically same nonsense strings.
I tried the same code on the ESP32 Wroom kit, where the communication works properly and I get data from the controller as:
PV Voltage:
0.00
PV Current:
0.00
Battery Voltage:
12.47
So the registers in the code must be set correctly.
I am using MAX3485 converter, pins DE and RE_NEG are defined and wired the same. I have connected the RO and DI pins of the converter to the RX and TX pins of the Heltec Wireless Stick V3 board.
The connection of MAX3485 and Heltec Wireless Stick is:
RO -> RX (GPIO 44)
RE| -> 46
DE -> 45
DI -> TX (GPIO 43)
The registers are definitely defined correctly, so the problem must be in the communication between Wireless Stick and converter for RS485.
I am attaching the code I was trying using ModbusMaster library:
#include <ModbusMaster.h>
#define MAX485_DE 45
#define MAX485_RE_NEG 46
ModbusMaster node;
void preTransmission()
{
digitalWrite(MAX485_RE_NEG, 1);
digitalWrite(MAX485_DE, 1);
}
void postTransmission()
{
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
}
void setup()
{
// put your setup code here, to run once:
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
// Init in receive mode
digitalWrite(MAX485_RE_NEG, 0);
digitalWrite(MAX485_DE, 0);
// Modbus communication runs at 115200 baud
Serial.begin(115200);
//Modbus slave ID 1
node.begin(1, Serial);
// Callbacks allow us to configure the RS485 transceiver correctly
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
Serial.println("test");
}
void loop()
{
// put your main code here, to run repeatedly:
uint8_t resultMain;
resultMain = node.readInputRegisters(0x3100, 6);
if (resultMain == node.ku8MBSuccess)
{
Serial.println(" - - - - - - - - ");
Serial.println("PV Voltage: ");
Serial.println(node.getResponseBuffer(0x00) / 100.0f);
Serial.println(node.getResponseBuffer(0x00) / 100.0f);
Serial.println(node.getResponseBuffer(0x00) / 100.0f);
Serial.println("PV Current: ");
Serial.println(node.getResponseBuffer(0x01) / 100.0f);
Serial.println("Battery Voltage: ");
Serial.println(node.getResponseBuffer(0x04) / 100.0f);
Serial.println("Battery Charge Current: ");
Serial.println(node.getResponseBuffer(0x05) / 100.0f);
}
else
{
Serial.println("Error ");
Serial.println(resultMain);
}
delay(1000);
}
This if (resultMain == node.ku8MBSuccess)
returns false and resultMain says value 226.
I have tried different combinations of wiring RE| and DE but it didn't help.
I looked at this similar thread: Reading Solar Charger COM via MODBUS (MAX485) Problem - Using Arduino / Networking, Protocols, and Devices - Arduino Forum but it also didn't solve it.
Could you please help me find out where the problem is and how to solve it? Thanks