我正在尝试使用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