1

我正在尝试使用RF24Network库创建一个传感器网络,其中根节点使用PubSubCient库连接到 MQTT 代理。

我已经完成了一项基本测试,将 MQTT 主题和消息有效负载从 MQTT 中继到网络中的另一个节点,它通过在根节点上sprintf创建当前millis()时间的分隔字符串、存储的主题和消息来做到这一点在大小为 200 的汽车阵列中(因为必须预定义 RF 有效载荷的大小),我可以从串行输出中看到这是正确完成的。

然而,从接收节点的串行输出中,我发现只接收到字符串的前 24 个字符,我不知道为什么会这样。

发送节点代码:

void ByteToChar(byte* bytes, char* chars, unsigned int count){
    for(unsigned int i = 0; i < count; i++)
         chars[i] = (char)bytes[i];
    chars[count] = '\0';
}

void callback(char* topic, byte* message, unsigned int length) {
  Serial.println("Sending...");

  char buf[length + 1];
  ByteToChar(message, buf, length);

  char payload[200];
  sprintf(payload, "%lu:%s:%s", millis(), topic, buf);

  Serial.println(payload);
  Serial.println(sizeof(payload));

  RF24NetworkHeader header(other_node);
  bool ok = network.write(header, payload, sizeof(payload));
  if (ok)
    Serial.println("ok.");
  else
    Serial.println("failed.");

  free(payload);
}

和接收节点:

while ( network.available() )
  {
    RF24NetworkHeader header;
    char payload[200];
    memset(payload, 0, 200);
    network.read(header, &payload, sizeof(payload));

    Serial.println(payload);
    Serial.println(sizeof(payload));
    free(payload);
  }

我只是忽略了一些非常简单的事情,这并非不可能。任何帮助是极大的赞赏。

编辑:这可能会有所帮助,这是我从根节点发送的数据: 4203:in_3:hello world again

这就是我得到的: 4203:in_3:hello world ag

4

2 回答 2

1

查看 size_t RF24Network::read 的来源

bufsize = min(maxlen,frame_size-sizeof(RF24NetworkHeader));

最多为 24 个字节。

于 2013-08-11T10:19:10.550 回答
0

我已经尝试过大于 24 字节的有效载荷,它可以工作。不知何故,该库支持 FRAGMENTATION 功能。72 字节有效负载适用于 UNO,但不会更大。

https://tmrh20.github.io/RF24Network/AdvancedConfig.html

于 2017-11-11T19:13:28.570 回答