Bonjour
Dans ce présent sujet je vais vous expliquer comment programmer facilement un émetteur/récepteur 2.4Ghz avec le composant nRF24L01+. Ces exemples fonctionnent avec MODULE℠, le système que j'ai développé qui est une alternative à Arduino™, et l'ATmega328P, voir ici pour télécharger et comprendre ce projet:
MODULE℠ l'alternative à Arduino™ pour l'ATmega328P
Comprendre ce qu'est MODULE℠
Cet article a pour but de vous montrer l'ergonomie de programmation avec la classe Nrf24l01p.h, et surtout la simplicité de programmation par rapport aux bibliothèques tierces.
Une radiocommande R/C avec Nrf24l01p.h et le composant nRF24L01+
Nrf24l01p.h permet de transmettre de manière bi-directionnelle des informations (sur 32 bits quelles qu'elles soient) sur la bande fréquence des 2.4Ghz. Cette classe utilise le composant nRF24L01+ qui communique en SPI avec le microcontrôlleur.
Exemple d'émetteur:
#include "../module/Nrf24l01p.h"
int main()
{
Nrf24l01p myChannel = Nrf24l01p (1);
unsigned long increment = 0;
Nrf24l01p::start (11, 1524003746, true);
while (true)
{
myChannel.transmit (increment);
increment++;
}
return 0;
}
Dans cet exemple, un objet myChannel de type Nrf24l01p est déclaré, en paramètre est indiqué le canal 1 sur lequel communiquer les informations. À la ligne suivante une variable de type unsigned long (32 bits non signés) est déclarée avec une valeur de 0, elle va servir à incrémenter un nombre entier.
Puis, le composant nRF24L01+ est démarré en appelant la fonction statique start prenant plusieurs paramètres:
- Le 1er paramètre 11 est le numéro du port de l'automate sur lequel est connectée la broche SS (slave select) du composant nRF24L01+.
Ce paramètre est utile lorsque vous souhaitez connecter en SPI différents composants en série ou en parallèle avec le microcontrôleur.
- Le 2ème paramètre 1524003746 correspond à la clé unique qui permet de sécuriser la communication entre deux nRF24L01+.
C'est à vous de choisir cette clé unique, plus le nombre est complexe et plus la communication sera sécurisée et protégée contre les parasites.
- Le 3ème paramètre true indique d'émettre à la puissance maximale. Une valeur sur false serait la puissance minimale, ce qui peut être suffisant en communication courte distance (par exemple en intérieur).
Puis dans la boucle while, la fonction transmit de l'objet myChannel est utilisée pour transmettre une information 32 bits à un autre nRF24L01+. Dans ce cas c'est la valeur de la variable increment qui est transmise, variable dont la valeur est incrémentée à la ligne suivante.
Ce petit bout de programme est simple, mais il permet déjà d'assurer une communication 2.4Ghz efficace et sécurisée entre deux nRF24L01+.
Envoyer la valeur d'une variable qui s'incrémente au cours du temps peut servir à programmer simplement une fonction "fail-safe" sur la partie récepteur du montage. En effet, si la valeur reçue ne s'incrémente plus pendant un certain temps (1 seconde par exemple), il peut être alors intéressant de déclencher une mise au neutre des servo-moteurs, une coupure de la motorisation d'un aéronef, une procédure de vol automatisée par gyroscope, etc...
Exemple de récepteur:
#include "../module/Nrf24l01p.h"
int main()
{
Nrf24l01p myChannel = Nrf24l01p (1);
unsigned long increment = 0;
Nrf24l01p::start (11, 1524003746, true);
while (true)
{
myChannel.receive();
//myChannel.value est la valeur reçue:
increment = myChannel.value;
}
return 0;
}
Dans cet exemple le seul changement notable est l'appel de la fonction receive de l'objet myChannel afin de recevoir les informations émises, en l'occurrence ici la valeur de la variable incrémentée dans le montage coté émetteur.