DÉVELOPPEMENT DES COMPÉTENCES PROJET Fiche de synthèse Module RF24 Présentation
DÉVELOPPEMENT DES COMPÉTENCES PROJET Fiche de synthèse Module RF24 Présentation : Les modules nRF24L01 sont des émetteurs / récepteurs qui utilisent la bande de fréquence 2.4 Ghz. Ils possèdent une antenne intégrée et fonctionnent en modulation GFSK avec 125 canaux possibles . La vitesse de fonctionnement maximale est de 2 Mbps (Mégabits par secondes), avec une faible consommation électrique. La modulation FSK : La modulation par déplacement de fréquence, plus connue sous sa dénomination anglophone de frequency-shift keying (FSK) est un mode de modulation de fréquence utilisé pour des communications numériques, dans lequel le signal modulé varie entre deux fréquences prédéterminées f0 et f1 en fonction de la valeur des bits à transmettre. La modulation numérique de fréquence GFSK (Gaussian Frequency Shift Keying) est une variété de la modulation FSK. La modulation GFSK permet la réduction de l’occupation spectrale d’un signal modulé en FSK. La modulation GFSK est utilisée dans les communications Bluetooth. Elle repose sur le même principe que la FSK mais avec l’ajout d’un filtre passe bas Gaussien. Pour une modulation GMSK, l'expression du signal émis est : m(t) = a0 . cos( 2π . (fp ± ΔF/2) . t) où : a0 et fp représentent l'amplitude et la fréquence de la porteuse et ΔF la différence de fréquence entre l'émission d'un état logique 0 et 1 : f0 = fp – ΔF/2 et f1 = fp + ΔF/2. nRF24L01 La liaison SPI : La liaison SPI (pour Serial Peripheral Interface) est une liaison série synchrone (bi-directionnelle) qui opère en mode full- duplex . Les circuits communiquent selon un schéma maître-esclaves, où le maître s'occupe totalement de la communication. Plusieurs esclaves peuvent coexister sur un même bus, dans ce cas, la sélection du destinataire se fait par une ligne dédiée entre le maître et l'esclave appelée Slave Select (SS). Le module RF24 : Le module RF24 peut être considéré comme un bus SPI dont les connexions ne sont pas filaires mais hertziennes. Principe de fonctionnement : Les modules nRF24L01 sont des émetteurs / récepteurs qui utilisent la bande de fréquence 2.4 Ghz . Le protocole de transmission ShockBurst permet de garantir une transmission fiable sans s'occuper des détails. Les paquets ShockBurst transmis lors d'une émission contiennent cinq champs : un champ préambule, un champ d'adresse permettant de communiquer avec un autre module bien identifié un champ de contrôle de paquets, un champ dit « payload » constitué des octets à transmettre (de 0 à 32 octets). et un champ de détection d'erreur CRC. Une modulation GFSK avec 125 canaux, des sauts de fréquence, couplés à un dispositif intégré de détection d'erreur CRC, un adressage des messages,... permettent un anti-parasitage très efficace. Le bus S PI utilis e qua tre s ig na ux lo g ique s : S CLK — Se ria l Clock, Horloge (gé né ré pa r le m a ître ) MOS I — Ma ste r Output, Sla ve Input (gé né ré pa r le m a ître ) MIS O — Ma ste r Input, Sla ve Output (gé né ré pa r l'e scla ve ) S S — Sla ve Se le ct, Actif à l'é ta t ba s (gé né ré pa r le m a ître ) Transmission : La vitesse de fonctionnement maximale est de 2 Mbps, avec une faible consommation électrique. La distance de transmission est relativement élevée et permet le pilotage de robots, la transmission à distance de données (alarmes, mesures de capteurs, périphériques d'ordinateurs...). Le module avec antenne incorporée (visible sur le circuit) peut transmettre sur environ 100 mètres Pour de plus longue portée (1 km) il existe des modules analogues mais amplifiés et avec une antenne plus grande, à brancher dessus. Branchements : Les modules sont alimentés en 3.3V, les entrées tolèrent 5V. Câblage des 8 broches du module → Carte Arduino : 1 GND → masse 2 VCC → 3.3V (et non 5V !) 3 CE (Pin controls RX / TX) → digital pin9 4 CSN (Chip select) → digital pin10 5 SCK → digital pin13 6 MOSI → digital pin11 7 MISO → digital pin12 8 IRQ → non utilisé Exemple de programmation en émission : #include <SPI.h> #include <RF24_config.h> #include <nRF24L01.h> #include <RF24.h> #include "printf.h" #define RF24_CEPIN 9 // broche ce du spi #define RF24_CSPIN 10 // broche cs du spi RF24 radio(RF24_CEPIN, RF24_CSPIN); // le module char payload[32+1] = {0}; // champ payload (de 0 à 32 octets) const uint64_t txPipe = 0xE8E8E8E8E8LL; // adresse du canal de transmission // cette adresse doit être identique à l'adresse du canal de réception du récepteur const uint64_t rxPipe = 0xF6F6F6F6F1LL; // adresse du canal de réception // cette adresse doit être identique à l'adresse du canal de transmission du récepteur /***************************************************************************/ // déclaration des variables …/... void setup(){ Serial.begin(9600); // communication printf_begin(); radio.begin(); radio.printDetails(); // affiche les caractéristiques spécifiques au module // Initialisations radio : // - validation d'une gestion dynamique de la taille du payload radio.enableDynamicPayloads(); // payload de taille variable // - réglage de la vitesse de transmission des données radio.setDataRate(RF24_1MBPS); // 1 Mbits/s // - réglage de la puissance de l'amplificateur de transmission radio.setPALevel(RF24_PA_MAX); // puissance maxi // - réglage de la fréquence du canal de transmission radio.setChannel(0x10); // ici fréquence = 2,4GHz + 16*1Mhz // - réglage du nombre et du retard des réitérations avant l'abandon des transmissions // delais 4 ms, 15 essais ( 0 - 250us, 15 - 4000us ) radio.setRetries(15,15); // essais & délais radio.openWritingPipe(txPipe); // ouverture du canal logique de transmission radio.openReadingPipe(1,rxPipe); // ouverture du canal de réception (n° pipe de 0 à 5, adresse) radio.setAutoAck(true); // valide les acquittements automatiques radio.startListening(); // commence l'écoute sur les canaux ouverts pour la lecture } /***************************************************************************/ void loop() { // à faire toutes les 500 ms : { // lecture des 3 voies de l'ADXL335 …/... // calcul des 3 angles : Roulis, Tangage et DeltaVertical. …/... // formation du payload"%d" sprintf(payload,"T%dR%dV%d", (int)Tangage, (int)Roulis, (int)DeltaVertical); Serial.println(payload); //Serial.print('\t'); if (!radio.testCarrier()) { // vérification si canal disponible // envoi du payload radio.stopListening(); // en émission radio.write((void *)payload, strlen(payload)); radio.startListening(); } // } } Exemple de programmation en réception : #include <SPI.h> #include <RF24_config.h> #include <nRF24L01.h> #include <RF24.h> #include "printf.h" #define RF24_CEPIN 9 // broche ce du spi #define RF24_CSPIN 10 // broche cs du spi RF24 radio(RF24_CEPIN, RF24_CSPIN); // le module char payload[32+1] = {0}; // champ payload (de 0 à 32 octets) const uint64_t rxPipe = 0xE8E8E8E8E8LL; // adresse du pipe de réception // cette adresse doit être identique à l'adresse du canal de transmission de l'émetteur const uint64_t txPipe = 0xF6F6F6F6F1LL; // adresse du pipe de transmission // cette adresse doit être identique à l'adresse du canal de réception de l'émetteur /***************************************************************************/ // déclaration des variables …/... void setup(){ Serial.begin(9600); // communication printf_begin(); radio.begin(); radio.printDetails(); // affiche les caractéristiques spécifiques au module // Initialisations radio : // - validation d'une gestion dynamique de la taille du payload radio.enableDynamicPayloads(); // payload de taille variable // - réglage de la vitesse de transmission des données radio.setDataRate(RF24_1MBPS); // 1 Mbits/s // - réglage de la puissance de l'amplificateur de transmission radio.setPALevel(RF24_PA_MAX); // puissance maxi // - réglage de la fréquence du canal de transmission (même fréquence qu'en émission) radio.setChannel(0x10); // ici fréquence = 2,4GHz + 16*1Mhz // - réglage du nombre et du retard des réitérations avant l'abandon des transmissions // delais 4 ms, 15 essais ( 0 - 250us, 15 - 4000us ) radio.setRetries(15,15); // essais & délais radio.openWritingPipe(txPipe); // ouverture du canal logique de transmission radio.openReadingPipe(1,rxPipe); // ouverture du canal de réception (n° pipe de 0 à 5, adresse) radio.setAutoAck(true); // valide les acquittements automatiques radio.startListening(); // commence l'écoute sur les canaux ouverts pour la lecture } /***************************************************************************/ void loop() { int a,b,c ; if (radio.available()) { // quelque chose est il arrivé ? int pls = radio.getDynamicPayloadSize(); // récupération de la taille du payload if (pls >= 1 && pls < 32) { // forcément radio.read((void*)payload, pls); // lecture du payload payload[pls] = 0; sscanf(payload, "T%dR%dV%d",&a,&b,&c); // lecture de la chaîne formatée à l'émission Serial.print(a); Serial.print(" "); // affichage des 3 octets émis Serial.print(b);Serial.print(" "); Serial.print(c); Serial.print('\n'); } } uploads/Management/ fs-rf24.pdf
Documents similaires
-
10
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Dec 23, 2022
- Catégorie Management
- Langue French
- Taille du fichier 0.3082MB