RF24 libコマンドの理想的な遅延時間は何ですか?

コミュニケーションのためにRF24ライブラリを利用するWiFiベースの灌漑システムに取り組んでいます。 リモートセンサーのプロトタイプを稼働させ、0.036mAのスタンバイ電流を持ち、毎時12mAのピーク付近でデータを送信します。 プロトタイプを走らせている間、私はいつも同じ条件の下で設定されているにもかかわらず、すべての送信で変化するようなさまざまな再試行を見ます。私はリトライループをコード化してこれをマスタに接続する10回の試行に制限します - マスタからの確認を得ずにセンサが連続して送信されないようにします

私が探しているのは、電力使用を節約するために、できるだけ送信時間を制限するために、さまざまなRF24コマンドの間に必要な理想的な遅延です。 何か案は?? (コードスニペットが添付されています)

   pinMode(mostureSensorVCC, OUTPUT);
   digitalWrite (mostureSensorVCC, HIGH); //VCC to sensor   
   pinMode(mostureSensor1, INPUT);      //moisture sensor on
   delay(10); 
   int sensorValue1 = analogRead(mostureSensor1);//read the input on analog pin 
   Serial.print("Current Value Sensor 1 is : ");//debugging
   Serial.println(sensorValue1);//print out the value you read:  
   msg[0] = sensorValue1;
    digitalWrite(mostureSensor1, LOW);
    digitalWrite(mostureSensorVCC, LOW);    
      while (message != sensorValue1)
        { 

          Serial.print("sensorValue in while loop is ");//debugging
          Serial.println(sensorValue1);                  //debugging
          Serial.print("Message One is ");               //debugging
          Serial.println(message);                       //debugging  
          radio.powerUp();
          delay(70);

          radio.stopListening();
          delay(50);
          radio.write(msg, 2);
          delay(40);
          radio.startListening();
          delay(50);

         Serial.println(d);              //debugging


          if (radio.available())
            {   
             Serial.println("Radio available");    //debugging
              radio.read(msg, sizeof(msg));
              message = msg[0];
              Serial.print("Check Message received from master ");// debugging
              Serial.println(message);

            }
            if(d>=10)
            {
              Serial.println("Unable to send to master");
              break;
            }
       d++;   
  }

delay(1000);       
radio.powerDown();
message = 0; 
msg[0] = 0;
1
1.遅延を使わず、まったく必要ありません。2.例、PingPairなどを見てください。
追加された 著者 user67244,
あなたは最終的にいくつかの試行の後で確認を受け取りますか?ノードが送信を開始しているときのマスターの状態は、どのような状態(省電力とすべて)ですか?遅れている(または欠けている)と思われる原因は何ですか?代わりに送信電力とデータレートを調整しようとしましたか?
追加された 著者 passing through,
こんにちは、偉大な応答のおかげで返信の異なる数の後に確認を取得 - マスターに2から8または9の試行の範囲。それは時々それが応答するように見える3つのメッセージを受信することをマスターで見たことがあります。下のマスターから関連するコードクリップを含む
追加された 著者 Erf,
私は自分のエリアで最も使用されていない特定のチャンネルを設定しており、リモートセンサーの推奨設定を使用しています//...startラジオとパイプ..... Serial.println( "Start radio ..." );//debugging radio.begin();遅延(30); radio.setPALevel(RF24_PA_MAX); radio.setDataRate(RF24_250KBPS); //十分に速い..より良いrange radio.setChannel(108); //2.508 Ghz上記のほとんどのWifiチャンネルradio.openWritingPipe(pipes [0]); radio.openReadingPipe(1、pipes [1]);
追加された 著者 Erf,

1 答え

startListening後の遅延以外のすべての遅延を削除します。

あなたはそれを "真実になるために利用可能である、または50msが経過した"というコードで置き換えることができます。メッセージが例えば受信後に既に受信されている場合、50ms待つ必要はない。 10ms。

NRFのACKパッケージ機能を使用する方が良いでしょう。この機能により、マスターはすでにスレーブ用のパッケージを用意しています。スレーブがメッセージを送信すると(毎時間)、準備されたパッケージがACK(確認応答)パケットに含まれます。

それをさらに最適化する。スリープコードを最適化してから、送信コードを最適化する方がよいでしょう。スリープパーツは送信するコードよりも1時間で多くの電力を消費しますが、それには10秒かかる場合もあります。

紛失したパッケージについて。別のチャンネルを使用してみてください。また、実際のアンテナを備えたNRFモジュール、さらにはアンプ用のマスターモジュールを入手することもできます。

PS配備されたバージョンのserial.printを削除できます。

1
追加された
また、この電池の計算機をチェックして、どれだけの実行時間が得られるかを確認してください。
追加された 著者 Al.,
こんにちは、お返事ありがとうございます。 ACKパッケージ機能の設定方法がわかりません。スリープコードはかなりうまく設定されています。私はスリープ中に約0.035mAを描画します。Serial.Printステートメントはすべてデバッグのためのもので、デプロイされたコードから削除します。
追加された 著者 Erf,