Bonsoir a tous
Toujours pour ma domotique, je bloque depuis pas mal de temps avec les nRF24L01+ pour transmettre mes données en utilisant les ACK.
Pour faire mon test, j'ai :
une MEGA (funduino) qui sert de maitre.
une UNO et deux standalone en recepteur.
Quand, depuis le maitre, j'envoi des données à un recepteur, le recepteur m'affiche bien la donnée, mais le maitre me dit que l'emission n'est pas passée.
Voici les codes
Recepteur
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(8,7); //(CE,CS) 3,2 --> LCD Shield
void setup()
{
Serial.begin(115200);
radio.begin();
radio.setAutoAck(true);
radio.enableAckPayload();
radio.setRetries(0,15);
radio.setChannel(100);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setPayloadSize(sizeof(long));
radio.openWritingPipe((byte *)"CENTR");
radio.openReadingPipe(1,(byte *)"0MODU");
radio.openReadingPipe(2,(byte *)"3MODU");
radio.startListening();
}
void loop(void)
{
byte pipeNo;
unsigned long recept; // Dump the payloads until we've gotten everything
pipeNo=1;
while( radio.available(&pipeNo)){
radio.read( &recept, sizeof(unsigned long));
radio.writeAckPayload(pipeNo,&recept, sizeof(unsigned long) );
Serial.print("Reception sur pipe ");
Serial.print(pipeNo);
Serial.print(" Valeur : ");
Serial.println(recept);
}
}
Maitre
#include <BoutonsAnalogique.h> //boutons analogique
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
#define BA_AUCUN 0
#define BA_MOINS 1
#define BA_PLUS 3
#define BA_VALIDER 2
#define BA_ANNULER 4
#define BA_BAS 7
#define BA_HAUT 6
#define BA_GAUCHE 8
#define BA_DROITE 5
RF24 radio(48,49);
BoutonsAnalogique BA(A7, 8, 20, 250, NULL); //&handleButtons //Pin,Nb boutons, AntiRebond, Repetition, Fonction
void setup(){
Serial.begin(115200);
Serial.println("MEGA en maitre");
radio.begin();
radio.setAutoAck(true);
radio.enableAckPayload(); // Allow optional ack payloads
radio.setRetries(0,15);
radio.setChannel(100);
radio.setDataRate(RF24_250KBPS);
radio.setPALevel(RF24_PA_MAX);
radio.setPayloadSize(sizeof(unsigned long));
radio.openWritingPipe((byte *)"1MODU");
radio.openReadingPipe(1,(byte *)"CENTR");
radio.startListening();
radio.powerUp();
}
void loop(){
unsigned long time;
byte tmp=BA.get();
switch (tmp) {
case BA_HAUT:
//Envoi vers le module 1
Serial.print("Envoi au module 1 : ");
time=millis();
radio.stopListening();
radio.openWritingPipe((byte *)"1MODU");
if (radio.write(&time, sizeof(unsigned long)),0)
{
Serial.println("OK");
}
else
{
Serial.println("HS");
}
radio.startListening();
break;
case BA_BAS:
//Envoi vers le module 2
Serial.print("Envoi au module 2 : ");
time=millis();
radio.stopListening();
radio.openWritingPipe((byte *)"2MODU");
if (radio.write(&time, sizeof(unsigned long)),0)
{
Serial.println("OK");
}
else
{
Serial.println("HS");
}
radio.startListening();
break;
case BA_DROITE:
//Envoi vers le module 3
Serial.print("Envoi au module 3 : ");
time=millis();
radio.stopListening();
radio.openWritingPipe((byte *)"3MODU");
if (radio.write(&time, sizeof(unsigned long)),0)
{
Serial.println("OK");
}
else
{
Serial.println("HS");
}
radio.startListening();
break;
case BA_GAUCHE:
//Envoi vers tous les modules
Serial.print("Envoi au module 0 : ");
time=millis();
radio.stopListening();
radio.openWritingPipe((byte *)"0MODU");
if (radio.write(&time, sizeof(unsigned long)),1)
{
Serial.println("OK");
}
else
{
Serial.println("HS");
}
radio.startListening();
break;
} //fin switch
//######################### fin bouton analogique #############################
// Teste si reception de données
if(radio.available())
{
unsigned long recept;
Serial.print(" Reception de nRF : ");
radio.read((byte *) &recept,sizeof(long)); //lecture des données reçues
Serial.println(recept);
} // if
} // loop
Le moniteur du maitre me retourne :
MEGA en maitre
Envoi au module 2 : HS
Envoi au module 1 : HS
Envoi au module 3 : HS
et les recepteurs
Reception sur pipe 2 Valeur : 52738
Reception sur pipe 2 Valeur : 53188
Reception sur pipe 2 Valeur : 53567
Reception sur pipe 2 Valeur : 79857
Reception sur pipe 2 Valeur : 82217
Je suis parti de l'exemple de la lib "RF24" --> GettingStarted qui fonctionne mais que j'ai un peu modifié.
J'ai mis a jour la lib aujourd'hui et ça ne fonctionne pas mieux.
Qui a une idée du pourquoi ça ne fonctionne pas correctement?
Merci (et bonne nuit)