【问题标题】:how to send a struct larger than 32byte over nrf24l01如何通过 nrf24l01 发送大于 32 字节的结构
【发布时间】:2019-08-17 14:24:03
【问题描述】:

我有三个 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));
      }
  }
}

【问题讨论】:

    标签: nodemcu arduino-esp8266


    【解决方案1】:

    RF24Network 库处理负载拆分。像这样发送你的结构:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      相关资源
      最近更新 更多