- Présentation du module RF nRF24L01
- Interfaçage du nRF24L01 avec Arduino
- Côté récepteur: connexions du module Arduino Uno nRF24L01
- Côté émetteur: Connexions du module Arduino Nano nRF24L01
- Utilisation du module émetteur-récepteur sans fil nRF24L01 +
- Programmation nRF24L01 pour Arduino
- Contrôle du servomoteur à l'aide du nRF24L01 sans fil
Alors que l'Internet des objets (IoT), l'industrie 4.0, la communication de machine à machine, etc. deviennent de plus en plus populaires, le besoin de communication sans fil est devenu incontournable, avec plus de machines / appareils pour se parler sur le cloud. Les concepteurs utilisent de nombreux systèmes de communication sans fil tels que Bluetooth Low Energy (BLE 4.0), Zigbee, modules Wi-Fi ESP43, modules RF 433 MHz, Lora, nRF, etc., et le choix du support dépend du type d'application dans lequel il est utilisé.
Parmi tous, le nRF24L01 est un support sans fil populaire pour la communication sur le réseau local. Ces modules fonctionnent sur 2,4 GHz (bande ISM) avec un débit en bauds de 250 Kbps à 2 Mbps, ce qui est légal dans de nombreux pays et peut être utilisé dans des applications industrielles et médicales. Il est également affirmé qu'avec des antennes appropriées, ces modules peuvent transmettre et recevoir jusqu'à une distance de 100 mètres entre eux. Intéressant non !!? Donc, dans ce tutoriel, nous en apprendrons plus sur ces modules nRF24l01 et comment les interfacer avec une plate-forme de microcontrôleur comme Arduino. Nous partagerons également quelques solutions aux problèmes fréquemment rencontrés lors de l'utilisation de ce module.
Présentation du module RF nRF24L01
Les modules nRF24L01 sont des modules émetteurs - récepteurs, ce qui signifie que chaque module peut à la fois envoyer et recevoir des données, mais comme ils sont semi-duplex, ils peuvent envoyer ou recevoir des données à la fois. Le module possède le circuit intégré générique nRF24L01 de semi-conducteurs nordiques qui est responsable de la transmission et de la réception des données. L'IC communique en utilisant le protocole SPI et peut donc être facilement interfacé avec n'importe quel microcontrôleur. Cela devient beaucoup plus facile avec Arduino car les bibliothèques sont facilement disponibles. Le brochage d'un module nRF24L01 standard est illustré ci-dessous
Le module sur la tension de fonctionnement de 1,9V à 3,6V (généralement 3.3V) et consomme très moins de courant de seulement 12mA pendant le fonctionnement normal qui rend la batterie efficace et peut donc même fonctionner sur des cellules de pièces. Même si la tension de fonctionnement est de 3,3 V, la plupart des broches sont tolérantes à 5 V et peuvent donc être directement interfacées avec des microcontrôleurs 5 V comme Arduino. Un autre avantage de l'utilisation de ces modules est que chaque module possède 6 pipelines. Cela signifie que chaque module peut communiquer avec 6 autres modules pour transmettre ou recevoir des données. Cela rend le module adapté à la création de réseaux en étoile ou maillés dans les applications IoT. En outre, ils ont une large plage d'adresses de 125 ID uniques, donc dans une zone fermée, nous pouvons utiliser 125 de ces modules sans interférer les uns avec les autres.
Interfaçage du nRF24L01 avec Arduino
Dans ce tutoriel, nous allons apprendre à interfacer le nRF24L01 avec Arduino en contrôlant le servomoteur connecté à un Arduino en faisant varier le potentiomètre sur l'autre Arduino. Par souci de simplicité, nous avons utilisé un module nRF24L01 comme émetteur et l'autre comme récepteur, mais chaque module peut être programmé pour envoyer et recevoir des données individuellement.
Le schéma de circuit pour connecter le module nRF24L01 à Arduino est illustré ci-dessous. Pour la variété, j'ai utilisé l' UNO pour le côté récepteur et Nano pour le côté émetteur. Mais la logique de connexion reste la même pour les autres cartes Arduino telles que mini, méga également.
Côté récepteur: connexions du module Arduino Uno nRF24L01
Comme indiqué précédemment, le nRF24L01 communique à l'aide du protocole SPI. Sur Arduino Nano et UNO, les broches 11, 12 et 13 sont utilisées pour la communication SPI. Par conséquent, nous connectons les broches MOSI, MISO et SCK de nRF aux broches 11, 12 et 13 respectivement. Les broches CE et CS sont configurables par l'utilisateur, j'ai utilisé les broches 7 et 8 ici, mais vous pouvez utiliser n'importe quelle broche en modifiant le programme. Le module nRF est alimenté par la broche 3,3 V sur Arduino, qui dans la plupart des cas fonctionnera. Sinon, une alimentation séparée peut être essayée. En plus d'interfacer le nRF, j'ai également connecté un servomoteur à la broche 7 et l'ai alimenté via la broche 5V sur Arduino. De même, le circuit de l'émetteur est illustré ci-dessous.
Côté émetteur: Connexions du module Arduino Nano nRF24L01
Les connexions pour l'émetteur sont également les mêmes, en outre, j'ai utilisé un potentiomètre connecté à travers la broche de masse 5V et d'Arduino. La tension analogique de sortie qui variera de 0 à 5 V est connectée à la broche A7 du Nano. Les deux cartes sont alimentées via le port USB.
Utilisation du module émetteur-récepteur sans fil nRF24L01 +
Cependant, pour que notre nRF24L01 fonctionne sans bruit, nous pourrions vouloir considérer les choses suivantes. Je travaille depuis longtemps sur ce nRF24L01 + et j'ai appris les points suivants qui peuvent vous aider à ne pas être touché par un mur. Vous pouvez les essayer lorsque les modules ne fonctionnaient pas normalement.
1. La plupart des modules nRF24L01 + du marché sont faux. Les moins chers que nous pouvons trouver sur Ebay et Amazon sont les pires (ne vous inquiétez pas, avec quelques ajustements, nous pouvons les faire fonctionner)
2. Le problème principal est l'alimentation, pas votre code. La plupart des codes en ligne fonctionneront correctement, j'ai moi-même un code fonctionnel que j'ai personnellement testé, faites-moi savoir si vous en avez besoin.
3. Faites attention car les modules imprimés en tant que NRF24L01 + sont en fait Si24Ri (Oui, un produit chinois).
4. Les modules clone et faux consommeront plus d'énergie, ne développez donc pas votre circuit d'alimentation basé sur la fiche technique nRF24L01 +, car Si24Ri aura une consommation de courant élevée d'environ 250 mA.
5. Méfiez-vous des ondulations de tension et des surtensions, ces modules sont très sensibles et peuvent facilement brûler. (;-(frit jusqu'à 2 modules jusqu'à présent)
6. L'ajout de quelques condensateurs (10 uF et 0,1 uF) à travers Vcc et Gnd du module aide à rendre votre alimentation pure et cela fonctionne pour la plupart des modules.
Si vous rencontrez des problèmes, signalez-le dans la section des commentaires ou lisez ceci, ou posez vos questions sur notre forum.
Consultez également notre projet précédent sur la création d'une salle de chat en utilisant nRF24L01.
Programmation nRF24L01 pour Arduino
Il a été très facile d'utiliser ces modules avec Arduino, grâce à la bibliothèque facilement disponible créée par maniacbug sur GitHub. Cliquez sur le lien pour télécharger la bibliothèque sous forme de dossier ZIP et ajoutez-la à votre IDE Arduino en utilisant l' option Sketch -> Inclure la bibliothèque -> Ajouter une bibliothèque.ZIP . Après avoir ajouté la bibliothèque, nous pouvons commencer la programmation du projet. Nous devons écrire deux programmes, l'un pour le côté émetteur et l'autre pour le côté récepteur. Cependant, comme je l'ai dit plus tôt, chaque module peut fonctionner à la fois comme émetteur et comme récepteur. Les deux programmes sont donnés à la fin de cette page, dans le code de l'émetteur, l'option du récepteur sera commentée et dans le programme du récepteur le code de l'émetteur sera commenté. Vous pouvez l'utiliser si vous essayez un projet dans lequel le module doit fonctionner à la fois. Le fonctionnement du programme est expliqué ci-dessous.
Comme tous les programmes, nous commençons par inclure les fichiers d'en-tête. Puisque le nRF utilise le protocole SPI, nous avons inclus l'en-tête SPI ainsi que la bibliothèque que nous venons de télécharger. La bibliothèque de servo est utilisée pour contrôler le servomoteur.
#comprendre
La ligne suivante est la ligne importante où nous informons la bibliothèque des broches CE et CS. Dans notre schéma de circuit, nous avons connecté CE à la broche 7 et CS à la broche 8 afin que nous définissions la ligne comme
RF24 myRadio (7, 8);
Toutes les variables associées à la bibliothèque RF doivent être déclarées en tant que structure de variables composites. Dans ce programme, la variable msg est utilisée pour envoyer et recevoir des données du module RF.
package struct { int msg; }; typedef struct package Package; Données du package;
Chaque module RF a une adresse unique à l'aide de laquelle il peut envoyer des données à l'appareil respectif. Étant donné que nous n'avons qu'une seule paire ici, nous définissons l'adresse à zéro à la fois dans l'émetteur et dans le récepteur, mais si vous avez plusieurs modules, vous pouvez définir l'ID sur n'importe quelle chaîne unique de 6 chiffres.
adresses d'octet = {"0"};
Ensuite, à l'intérieur de la fonction de configuration du vide, nous initialisons le module RF et le mettons à fonctionner avec une bande 115 qui est exempte de bruit et nous configurons également le module pour qu'il fonctionne en mode de consommation d'énergie minimale avec une vitesse minimale de 250 Kbps.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 bande au-dessus des signaux WIFI myRadio.setPALevel (RF24_PA_MIN); // Puissance MIN basse rage myRadio.setDataRate (RF24_250KBPS); // Vitesse minimale myservo.attach (6); Serial.print ("Setup Initialized"); retard (500); }
La fonction void WriteData () écrit les données qui lui sont transmises. Comme indiqué précédemment, le nRF a 6 canaux différents sur lesquels nous pouvons lire ou écrire des données, ici nous avons utilisé 0xF0F0F0F066 comme adresse pour écrire des données. Du côté du récepteur, nous devons utiliser la même adresse sur la fonction ReadData () pour recevoir les données qui ont été écrites.
void WriteData () { myRadio.stopListening (); // Arrêtez la réception et commencez la transmission myRadio.openWritingPipe (0xF0F0F0F066); // Envoie des données sur cette adresse 40 bits myRadio.write (& data, sizeof (data)); retard (300); }
La fonction void WriteData () lit les données et les place dans une variable. Encore une fois sur 6 canaux différents à l'aide desquels nous pouvons lire ou écrire des données, nous avons utilisé 0xF0F0F0F0AA comme adresse pour lire les données. Cela signifie que l'émetteur de l'autre module a écrit quelque chose sur cette adresse et que nous la lisons donc à partir de la même.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Quel tube à lire, 40 bits Address myRadio.startListening (); // Arrêtez la transmission et démarrez la réévaluation if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
En dehors de ces lignes, les autres lignes du programme sont utilisées pour lire le POT et le convertir en 0 à 180 en utilisant la fonction de carte et l'envoyer au module récepteur où nous contrôlons le servo en conséquence. Je ne les ai pas expliqués ligne par ligne puisque nous l'avons déjà appris dans notre tutoriel sur l'interfaçage des servos.
Contrôle du servomoteur à l'aide du nRF24L01 sans fil
Une fois que vous êtes prêt avec le programme, téléchargez le code de l'émetteur et du récepteur (ci-dessous) sur les cartes Arduino respectives et allumez-les avec le port USB. Vous pouvez également lancer le moniteur série des deux cartes pour vérifier quelle valeur est transmise et ce qui est reçu. Si tout fonctionne comme prévu lorsque vous tournez le bouton POT du côté de l'émetteur, le servo de l'autre côté doit également tourner en conséquence.
Le fonctionnement complet du projet est démontré dans la vidéo ci-dessous. Il est tout à fait normal que ces modules ne fonctionnent pas au premier essai.Si vous avez rencontré un problème, vérifiez à nouveau le code et le câblage et essayez les instructions de dépannage ci-dessus. Si rien ne fonctionne, postez votre problème sur les forums ou dans la section commentaires et je vais essayer de les résoudre.