Topic "besoin d'aide sur les modules nRF24L01"

Flux RSS des posts récents dans ce topic ( Flux Atom)


Pas de photo de profil

Deutérium

Membre

#173 | Signaler ce message


Bonjour à tous, je lutte depuis 3 jours sur ma communication radio entre un mini PRO et un UNO. L'idée pour l'instant est de juste transmettre l'état de 2 boutons du mini vers l'UNO pour qu'il allume (ou éteigne) 2 LED.

- premier constat, le programme du mini s'arrête à la ligne d'envoi du message (radio.write)… j'ai vérifié le câblage, mis des résistance de 10k sur les PIN CE, CSN, MOSI et SCK et un condensateur de 10uF entre le Vcc et GNd du nRF24L01. Rien n'y fait!!!!!

- deuxième constat, l'UNO reçoit en permanence des trames même si le mini est éteint… bizarre vous avez dis bizarre!!!!

Je vous joins le code du mini (émetteur). merci d'avance pour votre aide

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Emetteur
// Déclaration des librairies
#include <SPI.h> // librairie utilisant le protocole SPI
#include <nRF24L01.h> // librairie de base nRF24L01
#include <RF24.h> // librairie RF24


// Déclaration des constantes I/O
#define CE_ADDRESS 7 // Port CE de la communication SPI
#define CSN_ADDRESS 8 // Port CSN de la communication SPI
#define BOUTON 2 // Capteur d'ouverture


#define DELAY_BTN 250 // Délai de vérification appyui bouton

// Déclaration de la communication radio
RF24 radio(CE_ADDRESS, CSN_ADDRESS); // Utilisation du constructeur radio pin RF24 radio(CE,CSN)
//const uint64_t wAddress = 0x1A0B1E50B5LL;  // Adresse du canal d'écriture
//const uint64_t rAddress = 0x1A0B1E50B1LL;  // Adresse du canal de lecture

long m_diffTransmit; // Mesure du temps pour l'envoi périodique de la présence de l'esclave
int i;

struct
{
  //  byte num_slave; // numéro de l'esclave
  int state_slave[2] = {0}; // état de l'esclave (0 = reed, 1 = tilt, 2 = % batterie)
} m_dataToTransmit; // Structure des données à transférer.


int val[] = {0, 0,};    // État des boutons
int old_val[] = {0, 0,}; // État precedent des boutons
int state[] = {0, 0, }; // État de la LED

void setup()
{
  Serial.begin(9600); // On établie la communication avec le moniteur série.
  while (!Serial); // Attente

  radio.begin(); //on allume la radio
  radio.openWritingPipe(0xF0F0F0F0AA); // ouverture du canal d'écriture

  // configuration des entrées numériques associées aux boutons:

  pinMode(BOUTON , INPUT);
  pinMode(BOUTON + 1, INPUT);
  // petit message d'attente
  Serial.println("Attente appui bouton");
  m_diffTransmit = millis(); // initialisation du compteur de temps
}

void loop()
{
  if (i == 0) // test si la boucle loop() démarre une fois
  {
    Serial.println("je suis dans le loop()");
    Serial.print("Radio disponible : ");
    Serial.println(radio.available());
    i = 1;
  }
  if ((millis() - m_diffTransmit) > 250) // si on a dépassé le temps on vérifie les boutons
  {
    // gestion bouton 1
    val[0] = digitalRead(BOUTON); 
    if ((val[0] == HIGH) && (old_val[0] == LOW)) // si front montant on change la valeur de 'state'
    {
      state[0] = 1 - state[0];
      delay(10);
    }
    old_val[0] = val[0]; // mémorisation état antérieur
    m_dataToTransmit.state_slave[0] = state[0]; // mise à jour du message à envoyer
    
    // gestion bouton 2
    val[1] = digitalRead(BOUTON + 1);
    if ((val[1] == HIGH) && (old_val[1] == LOW)) // si front montant on change la valeur de 'state'
    {
      state[1] = 1 - state[1]; 
      delay(10);
    }
    old_val[1] = val[1]; // mémorisation état antérieur
    m_dataToTransmit.state_slave[1] = state[1]; // mise à jour du message à envoyer
    m_diffTransmit = millis(); // mise à jour du compteur de temps
 
    // on envoie le message
    if (!radio.write(&m_dataToTransmit, sizeof(m_dataToTransmit)))
    {
      Serial.println(" --> Transmission NOK");
    }
    else
    {
      Serial.println(" --> Transmission OK");
    }
  }
  delay(50); // petite pause
}

Derniére modification le par Deutérium


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#177 | Signaler ce message


Bonjour,

Je suis en train de regarder de plus prés la bibliothèque RF24 pour un prochain article.

Pour le moment, je ne pourrais pas te donner beaucoup de conseil. Revérifie le câblage côté récepteur. Si tu reçois continuellement des trames c'est qu'il y a un soucis du côté récepteur.

Sinon essaye de repartir d'un code d'exemple simple pour valider le fonctionnement de ton matériel.


Pas de photo de profil

Deutérium

Membre

#178 | Signaler ce message


Salut,

oui j'ai revérifié mes branchements même combat…

Par contre, je viens de suivre ton tuto sur la communication via la librairie Mirf, et miracle ça fonctionne!!!!

j'ai dû rajouter une variable "adresse" dans le code du serveur pour verrouiller les actions dans la loop().

Merci en tout cas et j'ai hâte de voir ton tuto sur le RF24…

A+


Photo de profil de skywodd

skywodd

Membre

Membre du staff

#179 | Signaler ce message


Par contre, je viens de suivre ton tuto sur la communication via la librairie Mirf, et miracle ça fonctionne!!!!

par Deutérium

La bibliothèque Mirf est beaucoup plus simple que RF24. Ça évite pas mal d'erreur de programmation.

Merci en tout cas et j'ai hâte de voir ton tuto sur le RF24…

par Deutérium

Ça risque de prendre un certain temps … Je me rappelle de plus en plus pourquoi j'avais laissé tomber RF24 pour Mirf. Cette bibliothèque de code est inutilement complexe.