コミュニケーションのために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;
startListening後の遅延以外のすべての遅延を削除します。
あなたはそれを "真実になるために利用可能である、または50msが経過した"というコードで置き換えることができます。メッセージが例えば受信後に既に受信されている場合、50ms待つ必要はない。 10ms。
NRFのACKパッケージ機能を使用する方が良いでしょう。この機能により、マスターはすでにスレーブ用のパッケージを用意しています。スレーブがメッセージを送信すると(毎時間)、準備されたパッケージがACK(確認応答)パケットに含まれます。
それをさらに最適化する。スリープコードを最適化してから、送信コードを最適化する方がよいでしょう。スリープパーツは送信するコードよりも1時間で多くの電力を消費しますが、それには10秒かかる場合もあります。
紛失したパッケージについて。別のチャンネルを使用してみてください。また、実際のアンテナを備えたNRFモジュール、さらにはアンプ用のマスターモジュールを入手することもできます。
PS配備されたバージョンのserial.printを削除できます。