Salve, ho finalmente trovato un po di tempo per cercare di far funzionare i regolatori serie BN, mi serve però il tuo aiuto Gigi600, visto che hai un server di prova.
Dovresti provare a modificare questo blocco di codice:
bool update()
{
Serial.write(0xAA);
Serial.write(0x55);
Serial.write(0xAA);
Serial.write(0x55);
Serial.write(0xAA);
Serial.write(0x55);
Serial.write(0xEB);
Serial.write(0x90);
Serial.write(0xEB);
Serial.write(0x90);
Serial.write(0xEB);
Serial.write(0x90);
Serial.write(0x16);
Serial.write(0xA0);
Serial.write(0x00);
Serial.write(0xB1);
Serial.write(0xA7);
Serial.write(0x7F);
delay(500);
if (Serial.available())
{
data_long = Serial.available();
for (int n = 0; n < data_long; n++)
{
data[n] = Serial.read();
}
tensione_pannello = (data[12] << 8) | data[11];
corrente_pannello = 0;
tensione_batteria = (data[10] << 8) | data[9];
corrente_batteria = (data[31] << 8) | data[30];
tensione_carico = tensione_batteria;
corrente_carico = (data[16] << 8) | data[15];
temperatura = data[29] - 30;
lettura_ah_consumati = ((float)corrente_carico / 3600) * (millis() - time_Ah_old) *10; //restituisce la lettura in micro Ah
lettura_ah_prodotti = ((float)corrente_batteria / 3600) * (millis() - time_Ah_old) *10; //restituisce la lettura in micro Ah
ah_consumati += lettura_ah_consumati;
ah_prodotti += lettura_ah_prodotti;
time_Ah_old = millis();
calcolo_soc();
return true;
}
else
{
return false;
}
}
con questo:
bool update()
{
byte t[] = {0x01, 0x04, 0x31, 0x04, 0x00, 0x01};
Serial.write(t, 6);
Serial.write(0x7E);
Serial.write(0xF7);
delay(500);
if (Serial.available())
{
int data_long = Serial.available();
for (int n = 0; n < data_long; n++)
{
data[n] = Serial.read();
}
tensione_batteria = (data[3] << 8) | data[4];
}
return true;
}
In questo modo il regolatore dovrebbe inviare solo il dato della tensione batteria...
Almeno vediamo se funziona, poi eventualmente andiamo avanti

Logicamente devi usare il convertitore automatico ttl a rs485 che hai acquistato
Un saluto.