如何通过nrf24l01发送大于32byte的结构

时间:2019-08-17 14:24:03

标签: nodemcu arduino-esp8266

我有三个nodemcu,我想通过nRF24l01 +发送一个结构,但是我的结构大小为52字节,而nRf24l01 +模块只是发送32字节! 我应该如何发送我的结构?

我的结构:

struct fullData{
  unsigned long ttime;
  String data1;
  String data2;
  String data3;
  String data4;
  }sndData,recData;

我尝试过这种方法,但是没用:

发射器代码:

void sendOverRadio(){
  char data[sizeof(sndData)];
  memcpy(data, &sndData, sizeof(sndData));
  radio.stopListening();
  int z = 0;
  for(int i= 0 ; i<2 ; i++){
    char dt[32];
    dt[0] = i;
    for(int j =1 ; j<32;j++){
      dt[j]=data[z];
      z +=1;
    }
    radio.write(&dt , sizeof(dt));
  }
  radio.startListening();
}

接收方代码:

char data[sizeof(recData)];
void loop(){
  if(radio.available()){
    Serial.println("Radio Available...");
    char dt[32];

    while (radio.available()){
      radio.read(&dt, sizeof(dt));
    }
    if(dt[0]==0){
         memset(data, 0, sizeof(data));
         memcpy(data, &dt[1], 32);
      }else if(dt[0]==1){
        memcpy(&data[32], &dt[1], 32);
        memcpy(&recData, data, sizeof(recData));
      }
  }
}

1 个答案:

答案 0 :(得分:0)

RF24Network库处理有效载荷拆分。像这样发送您的结构:

  RF24NetworkHeader header(0, 'D');
  if (!NETWORK.write(header, &sndData, sizeof(sndData))) {
    Serial.println(F("Error."));
  } else {
    Serial.println(F("Success."));
  }