Bonjour,
J'ai fait un projet avec deux arduino communiquant ensemble via des module nRF24.
J'ai constaté qu'ils consommaient beaucoup (impossible de faire fonctionner sur pile).
J'aimerais donc faire diminuer la consommation électrique en mettant l’émetteur en "stand-by" quand il n'est pas utilisé.
J'ai trouvé sur la toile les commandes suivantes:
Mirf.powerUpRx()
Mirf.powerUpTx()
Mirf.powerDown()
Pour faire des tests simple, j'ai fait deux codes "minimaliste".
Coté récepteur une led s'allume qu'en il recoit "ALARM"
et coté émetteur, un bouton poussoir "allume l'antenne" et envoie "ALARM" , l'autre B.P. "éteint" l'antenne.
Cela fonctionne tant que que le BP off n'est pas activé. Une fois celui-ci activé, le système se bloc et n’émet plus.
Je cherche donc à réactiver "l’antenne".
Voici le code de l'emetteur:
// Test Tx+testAlim
#include <SPI.h> // Pour la communication via le port SPI
#include <Mirf.h> // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI
const int boutonOff = 2; // broche du Bouton
const int boutonOn = 4;
const int ledPinoff = 3;
const int ledPinon = 5;
int buttonState = 0; // etat de la sortie du Bouton
void setup(){
Serial.begin (9600);
pinMode(ledPinoff, OUTPUT); //la broche de la LED est mise en sortie
pinMode(boutonOff, INPUT); //la broche du capteur est mise en entree
pinMode(ledPinon, OUTPUT); //la broche de la LED est mise en sortie
pinMode(boutonOn, INPUT); //la broche du capteur est mise en entree
Mirf.cePin = 9; // Broche CE sur D9
Mirf.csnPin = 10; // Broche CSN sur D10
Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
Mirf.init(); // Initialise la bibliothèque
Mirf.channel = 0; // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
Mirf.payload = 8; // Taille d'un message (maximum 32 octets)
Mirf.config(); // Sauvegarde la configuration dans le module radio
Mirf.setTADDR((byte *) "nrf02"); // Adresse de transmission
Mirf.setRADDR((byte *) "nrf01"); // Adresse de réception
digitalWrite(ledPinon, HIGH);
digitalWrite(ledPinoff, HIGH);
delay (100);
digitalWrite(ledPinon, LOW);
digitalWrite(ledPinoff, LOW);
delay (100);
}
void loop(){
digitalWrite(ledPinon, LOW);
digitalWrite(ledPinoff, LOW);
if (digitalRead(boutonOff) == LOW)
{
digitalWrite(ledPinoff, HIGH);
Mirf.powerDown();
delay (100);
Serial.println("OFF");
}
if (digitalRead(boutonOn) == LOW)
{
digitalWrite(ledPinon, HIGH);
Mirf.powerUpTx();
Mirf.powerUpRx();
Serial.println("Transmission");
byte message[8] = "ALARM";
Mirf.send(message); // On envoi le message
while(Mirf.isSending()); // On attend la fin de l'envoi
delay (100);
Serial.println("ON");
}
}
Et le code du récepteur:
//Test RX
#include <SPI.h> // Pour la communication via le port SPI
#include <Mirf.h> // Pour la gestion de la communication
#include <nRF24L01.h> // Pour les définitions des registres du nRF24L01
#include <MirfHardwareSpiDriver.h> // Pour la communication SPI
const byte PIN_BUTTON = 2;
const byte ledRouge = 3;
void setup() {
Serial.begin(9600);
pinMode(ledRouge, OUTPUT);
pinMode(PIN_BUTTON, INPUT_PULLUP);
Mirf.cePin = 9; // Broche CE sur D9
Mirf.csnPin = 10; // Broche CSN sur D10
Mirf.spi = &MirfHardwareSpi; // On veut utiliser le port SPI hardware
Mirf.init(); // Initialise la bibliothèque
Mirf.channel = 0; // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
Mirf.payload = 8; // Taille d'un message (maximum 32 octets)
Mirf.config(); // Sauvegarde la configuration dans le module radio
Mirf.setTADDR((byte *) "nrf01"); // Adresse de transmission
Mirf.setRADDR((byte *) "nrf02"); // Adresse de réception
Serial.println("Go !");
digitalWrite (ledRouge,HIGH);
delay (500);
digitalWrite (ledRouge,LOW);
}
void loop() {
digitalWrite (ledRouge, LOW);
byte message[8];
if(Mirf.dataReady()){
Mirf.getData(message); // Réception du paquet
if (strcmp((char*) message, "ALARM") == 0) {
Serial.println("ALARM Recus !");
digitalWrite(ledRouge, HIGH);
tone (7,1000,20);
delay (100);
}
}
} //fin loop