nRF24L01+ ack fallisce sempre con dati ricevuti, pipe corrette?

Buonasera, utilizzo due moduli nRF24L01 PA LNA dal 2021 per inviare dati tra due arduino mega2560 di una stazione meteo (invio uno struct da 31byte). Qualche mese fa ho sostituito i moduli rf24, probabilmente non genuini, con due rf24 E01 della ebyte.
Comunicazione bidirezionale con ackPayload di 1byte, sketch di partenza preso dal Simple tutorial di Robin
Moduli alimentati con LM2596, condensatore da 10uF tra VCC e GND.
Distanza fra i moduli di circa 500 metri con un muro nel mezzo.
Ho sempre ricevuto i dati dal master (posto all'esterno), inviati ogni 10 secondi e riscontrato un ack nella maggioranza delle trasmissioni.
Da quando ho installato i moduli E01 ebyte, i dati continuano ad essere inviati dal master allo slave egregiamente ma non c'è traccia di ack nel master.

Mi sono letto un po' di volte la documentazione della libreria RF24 di TMRh20 v 1.4.8 (che uso) e il suo blog, ipotizzando un problema di configurazione delle pipe.
Mi sembra di capire che sia importante che la reading pipe 0 del master abbia lo stesso indirizzo della writing pipe del master.
E' normale, invece, che nello slave ci sia la reading pipe 0 closed?
Ho recentemente fatto il test con i codici del tutorial di Robin: master invia i dati che vengono ricevuti corretamente ma nessun ack riscontrato.
Un chiarimento di teoria:
il master scrive con l'indirizzo specifico, lo slave riceve sulla pipe 1, lo slave scrive con il suo indirizzo l'ack, il master riceve l'ack sulla pipe0. Corretto?
Grazie in anticipo.

Codice master (solo la parte inerente alla radio):

#include <RF24.h>
#include <nRF24L01.h>
RF24 radio(A12,A13); //CE E CSN
const byte slaveAddress[5] = {'R','x','A','A','A'};
//setup
void initRadio() {
  if (!radio.begin()) //verifica corretta inizializzazione
    Serial.println(F("radio error"));
  else 
    Serial.println(F("radio ok"));
  
  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS );
  
  //radio.enableDynamicPayloads();
  radio.setAutoAck(true);
  radio.enableAckPayload();
  radio.setRetries(15,15); // delay, count // 5 gives a 1500 µsec delay which is needed for a 32 byte ackPayload  
  radio.openWritingPipe(slaveAddress);

  printf_begin();
  radio.printPrettyDetails();
}

//loop
if (millis() - previousSend >= intervalSend && writeFirst){
    previousSend = long(millis()/1000)*1000;  
    //RADIO STUFF
    bool okSent = radio.write( &radioTx, sizeof(radioTx) );
    if (okSent) { //ACK RECEIVED
      digitalWrite(15, HIGH);
      if ( radio.available() ) {
        radio.read(&resetRx, sizeof(resetRx));
        Serial.println(F("Reset status received"));
      }
      else
        Serial.println(F("  Acknowledge but no data "));
      }
    else  //ACK FAIL
      digitalWrite(15, LOW);
  }

Restituisce questo output di configurazione:

SPI Frequency		= 10 Mhz
Channel			= 76 (~ 2476 MHz)
Model			= nRF24L01+
RF Data Rate		= 250 KBPS
RF Power Amplifier	= PA_MAX
RF Low Noise Amplifier	= Enabled
CRC Length		= 16 bits
Address Length		= 5 bytes
Static Payload Length	= 32 bytes
Auto Retry Delay	= 4000 microseconds
Auto Retry Attempts	= 15 maximum
Packets lost on
    current channel	= 0
Retry attempts made for
    last transmission	= 5
Multicast		= Disabled
Custom ACK Payload	= Enabled
Dynamic Payloads	= Enabled
Auto Acknowledgment	= Enabled
Primary Mode		= TX
TX address		= 0x4141417852
pipe 0 ( open ) bound	= 0x4141417852
pipe 1 ( open ) bound	= 0x4141417852
pipe 2 (closed) bound	= 0xc3
pipe 3 (closed) bound	= 0xc4
pipe 4 (closed) bound	= 0xc5
pipe 5 (closed) bound	= 0xc6

Codice slave:

#include <RF24.h>
#include <nRF24L01.h>
RF24 radio(41,39);
const byte thisSlaveAddress[5] = {'R','x','A','A','A'};
//setup 
void initRadio() {
  erradioRX = radio.begin();

  radio.setPALevel(RF24_PA_MAX);
  radio.setDataRate(RF24_250KBPS);

  //radio.enableDynamicPayloads();
  radio.setAutoAck(true);
  radio.enableAckPayload();
  //radio.openWritingPipe(thisSlaveAddress);//altrimenti TX address non corretto

  radio.openReadingPipe(1, thisSlaveAddress);
  radio.startListening();
  bool resetTx = false;
//
  radio.flush_tx();
  radio.writeAckPayload(1, &resetTx, sizeof(resetTx)); // pre-load data
  printf_begin();
  radio.printPrettyDetails();
}

//loop
bool radioLink=false; //no collegamento radio con master
void radioRX(){
  if ( radio.available() ) {
      bool writeACK = radio.writeAckPayload(1, &resetTx, sizeof(resetTx)); // pre-load data
      radio.read( &radioRx, sizeof(radioRx) );
      radioLink = true;  
  }else{
      radioLink = false;
  }
}

Output configurazione slave:

SPI Frequency= 10 Mhz
Channel = 76 (~ 2476 MHz)
Model = nRF24L01+
RF Data Rate= 250 KBPS
RF Power Amplifier = PA_MAX
RF Low Noise Amplifier = Enabled
CRC Length= 16 bits
Address Length= 5 bytes
Static Payload Length = 32 bytes
Auto Retry Delay = 1500 microseconds
Auto Retry Attempts = 15 maximum
Packets lost on
    current channel = 0
Retry attempts made for
    last transmission = 15
Multicast= Disabled
Custom ACK Payload = Enabled
Dynamic Payloads = Enabled
Auto Acknowledgment = Enabled
Primary Mode= RX
TX address= 0x4141417852
pipe 0 (closed) bound = 0x4141417852
pipe 1 ( open ) bound = 0x4141417852
pipe 2 (closed) bound = 0xc3
pipe 3 (closed) bound = 0xc4
pipe 4 (closed) bound = 0xc5
pipe 5 (closed) bound = 0xc6

Aggiornamento: ho aggiunto un log che registra quando l'ack viene ricevuto.
Viene ricevuto un singolo ack al master 1 o 2 volte ogni ora. Considerando che in 1 ora invio 360 volte dal master (tutte ricevute con successo) è un rateo molto basso.
Qualcuno sa consigliarmi dei test da fare?
Grazie

... non so aiutarti, ma, so per certo, che di moduli nRF24L01 ce ne sono un'infinità "farlocchi" fatti in Cina che funzionano pessimamente (sono copie a basso costo mal fatte). Non conosco i moduli che hai indicato, ma ... su Amazon, purtroppo, sempre più spesso, è presente "monnezza" Cinese a basso costo :roll_eyes:

Prova a comprarne una coppia da un distributore serio di materiale elettronico e vedi se cambia qualche cosa ...

Guglielmo