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