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 に答える