Arduino et NRF24L01

La raison de cette courte courbe d'apprentissage:

Mon fils aime être enfermé dans sa chambre loin du reste de la famille bruyante. Sa maman a besoin de sa présence de temps en temps pour aider son frère autiste et ses repas, etc. Il m'a demandé d'avoir quelque chose dans sa chambre qui sauverait sa maman de monter et descendre les escaliers pour le récupérer et j'ai suggéré une sonnette wi-fi . Solution simple. Il voulait quelque chose à double sens. Pas plus de détails que ça, comme audio ou visuel. J'avais entendu dire que le NRF24L01 était un petit appareil radio très rentable et pourtant efficace, alors j'ai décidé de faire des recherches et de voir ce que je pouvais trouver.

Il existe un certain nombre d'instruments disponibles qui montrent comment utiliser le module radio NRF24L01 avec un Arduino. J'ai trouvé qu'il était difficile de trouver une configuration simple où deux Arduino pouvaient communiquer exactement de la même manière. Je voulais que les deux configurations transmettent et reçoivent chacune de la même manière et cela définirait la manière la plus simple de faire les deux choses sur deux Arduinos. Une fois que j'ai deux Arduinos qui communiquent d'avant en arrière, j'ai alors le cadre de base pour les étendre pour faire d'autres choses.

Cet Instructable ne produit pas le produit que mon fils veut, mais produit le cadre pour cela et de nombreuses autres applications bidirectionnelles simples.

Étape 1: Le module NRF24L01

Les principales caractéristiques du NRF24L01 sont les suivantes:

Fonctionne dans la bande ISM 2.4HGz La tension d'alimentation est de 3, 3 V (très important de s'en souvenir) Les broches SPI sont tolérantes à 5 V, ce qui est utile pour les applications Arduino.Elle dispose de 126 canaux (fréquences) sélectionnables, les canaux peuvent aider à éviter toute interférence possible avec les appareils à proximité qui utilisent la même fréquence. Peut être un essai et une erreur. Canaux sélectionnables par incréments de 1 MHz

Dimensions des modules (environ): Petite carte avec antenne intégrée: - 30 mm X 16 mm Petite avec support d'antenne verticale: - 30 mm X 16 mm Grande avec support d'antenne horizontale: - 41 mm X 16 mm (le support d'antenne dépasse encore 7 mm)

Les planches ne sont pas adaptées à la planche à pain, elles doivent donc être connectées à des fils femelles dupont. Il existe également une plaque adaptatrice, qui n'est toujours pas adaptée à la maquette, mais qui répartit les broches sur une seule rangée avec Vcc et GND par elles-mêmes. Un autre avantage de la plaque d'adaptation est qu'elle dispose d'un régulateur embarqué de 3, 3 V (et de condensateurs de dérivation), ce qui signifie que vous pouvez utiliser une alimentation de 5 V.

Il y a eu des problèmes avec l'utilisation de l'alimentation 3, 3 V de l'Arduino en ce que vous devez souder des condensateurs sur la carte pour aider avec les surtensions, etc.J'ai opté pour l'option la plus simple et j'ai utilisé la plaque adaptatrice et j'ai tout fait à partir de 5 V. Dimensions de la plaque adaptatrice: - 27 mm X 19 mm. Ajoute environ 17 mm à la longueur de chaque planche et évidemment un peu de profondeur aussi. Il est possible de déssouder les embases mâles et femelles et de souder les cartes ensemble. Cela vous donnerait une empreinte plus petite mais pas pour les timides.

Étape 2: Assembler

Liste des pièces:

  • 2 X Arduinos
  • 2 X Breadboards
  • 2 X NRF24L01
  • [en option] 2 cartes de dérivation X YL-105 pour le NRF24L01. Cela permet une connexion 5v et un câblage plus facile
  • 2 X interrupteurs momentanés
  • 2 X LED rouges
  • 2 X LED jaunes
  • 4 résistances de 220 ohms
  • Fils de connexion

J'utilise AliExpress pour presque tous mes composants bon marché, surtout si j'ai besoin de plus d'un article.

Ce sont principalement des composants bon marché en provenance de Chine, mais je n'ai pas encore eu un seul mauvais composant.

J'adore utiliser l'Arduino et donc tout ce que je fais est basse tension et les composants bon marché sont à la hauteur. Cependant, si jamais je passais à quelque chose de plus critique ou de hautes tensions, etc., je me procurerais très probablement mes composants ailleurs.

Connexions:

Le module communique en utilisant le protocole SPI. Bus d'interface périphérique série

La disposition des broches utilisée ici était:

NRF24L01 broche Arduino

VCC 3, 3 V Si vous utilisez la carte de dérivation YL-105, le fil Vcc peut aller à la broche Arduino 5v

GND GND

CS 8 (peut être n'importe quelle broche inutilisée mais est définie dans le code)

CE 7 (peut être n'importe quelle broche inutilisée mais est définie dans le code)

MOSI 11 (Doit être la broche SPI MOSI 11 ou la broche ICSP 4)

MISO 12 (Doit être la broche 12 SPI MISO ou la broche ICSP 1)

SCK 13 (Doit être la broche SPI SCK 13 ou la broche ICSP 3)

Câblage pour LED et interrupteur:

  • Arduino broche 2 à LED jaune long fil - anode
  • Fil jaune court - cathode à résistance 220ohm, puis deuxième fil de résistance à GND
  • Arduino broche 3 à LED rouge long fil - anode
  • Fil rouge court - cathode à résistance 220ohm, puis deuxième fil de résistance à GND
  • Arduino broche 4 pour commuter, de l'autre côté du commutateur à GND

La construction physique des deux planches est identique.

Il existe des différences logicielles mineures pour les tuyaux de lecture et d'écriture pour les cartes respectives.

Étape 3: Le code

Le code que j'ai créé pour les deux Arduinos est presque identique, je n'en montrerai donc qu'un seul.

Tous les fichiers de code sont disponibles en téléchargement.

#include // est livré avec Arduino

#include "RF24.h" // peut être trouvé via l'IDE: Esquisser / Inclure la bibliothèque / Gérer les bibliothèques / Rechercher RF24 et localiser RF24 par TMRh20 / plus d'infos / Installer

// configurer le bouton et les LED

# bouton définir 4

#define confirmLed 2

#define led 3

RF24 NRF24L01 (7, 8); // crée un objet appelé NRF24L01. spécifiant les broches CE et CSN à utiliser sur l'Arduino

adresse d'octet [] [6] = {"pipe1", "pipe2"}; // définir les adresses des 2 canaux pour la lecture et l'écriture

booléen buttonState = false; // utilisé pour la transmission et la réception

void setup() {

// configurer les broches Arduino

pinMode (bouton, INPUT_PULLUP);

pinMode (confirmLed, OUTPUT); // LED jaune

pinMode (led, SORTIE); // LED rouge

NRF24L01.begin (); // ouvre les tuyaux pour lire et écrire depuis le tableau 1

NRF24L01.openWritingPipe (adresse [0]); // ouvre le tube d'écriture pour adresser le tube 1

NRF24L01.openReadingPipe (1, adresse [1]); // ouvrir le tube de lecture du tube d'adresse 2

// c'est la seule différence dans les deux croquis requis

// les deux lignes ci-dessous sont pour le tableau deux, remarquez comment les tuyaux de lecture et d'écriture sont inversés

// NRF24L01.openReadingPipe (1, adresse [0]); // ouvre le tube de lecture du tube d'adresse 1

// NRF24L01.openWritingPipe (adresse [1]); // ouvre le tube d'écriture pour adresser le tube 2

NRF24L01.setPALevel (RF24_PA_MAX); // définir la puissance de sortie RF au minimum, RF24_PA_MIN (remplacer par RF24_PA_MAX si nécessaire)

NRF24L01.setDataRate (RF24_250KBPS); // définir le débit de données à 250 kbps

// Si la fréquence de 110 ci-dessous est un problème avec d'autres wi-fi pour vous incrémentez de 1 jusqu'à ce qu'il soit ok

// N'oubliez pas que les deux ensembles de code doivent avoir la même fréquence

NRF24L01.setChannel (110); // règle la fréquence sur le canal 110.

}

boucle vide () {

// Transmet le changement de bouton à l'autre Arduino

retard (10);

NRF24L01.stopListening ();

buttonState = digitalRead (bouton); // tester la pression des boutons sur CETTE carte

si (buttonState == LOW) // le bouton est tiré vers le haut, alors testez LOW

{

NRF24L01.write (& buttonState, sizeof (buttonState)); // envoie l'état BAS à une autre carte Arduino

// clignote la LED jaune pour montrer la progression

digitalWrite (confirmLed, HIGH);

retard (100);

digitalWrite (confirmLed, LOW);

}

buttonState = HIGH; // réinitialise la variable d'état du bouton


/ / Changement du bouton de réception de l'autre Arduino

retard (10);

NRF24L01.startListening ();

if (NRF24L01.available () ) // avons-nous une transmission à partir d'une autre carte Arduino

{

NRF24L01.read (& buttonState, sizeof (buttonState)); // met à jour la variable avec un nouvel état

NRF24L01.stopListening ();

}

if (buttonState == HIGH) // teste l'état du bouton de l'autre Arduino

{

digitalWrite (led, LOW);

}

autre

{

flashLed (); // indique que le bouton a été enfoncé sur l'autre carte

}

buttonState = HIGH; // réinitialise la variable d'état du bouton

}

// clignote la LED rouge cinq fois

void flashLed ()

{

pour (int i = 0; i <5; i ++)

{

digitalWrite (led, HIGH);

retard (200);

digitalWrite (led, LOW);

retard (200);

}

}

Étape 4: Code Arduino et fichiers Fritzing

À moins que vous ne téléchargiez le code sur les deux Arduinos à des moments différents, assurez-vous que vous avez sélectionné deux ports COM différents, sinon vous aurez exactement le même code sur les deux.

J'espère que cela peut vous intéresser et aider un débutant avec sa première implémentation d'un NRF24L01.

Si rien d'autre, cela vous donnera un cadre de travail sur lequel vous pourrez vous baser.

Pièces jointes

  • Arduino_nRF24L01_with_LED.ino Télécharger
  • Arduino_nRF24L01_with_LED_2.ino Télécharger
  • Arduino NRF24L01.fzz Télécharger

Étape 5: mise à jour en fonction de problèmes possibles

J'ai eu quelques commentaires de Tony en Italie et Andrea où ils ont tous les deux du mal à câbler ce circuit à un Arduino Nano.

Il y a environ un an, j'ai acheté deux Nanos mais je n'ai jamais réussi à les utiliser, j'ai donc profité de l'occasion pour les souder et les mettre en service.

J'avais démonté la construction d'origine, alors je l'ai recréée à partir de l'Instructable avec un Arduino UNO comme avant, juste pour m'assurer que tout fonctionnait.

J'ai ajouté quelques images de cette version.

Il montre le câblage légèrement différent et peut être plus facile à voir.

J'ai eu un léger pépin / retard sur l'une des cartes NRF24L01, mais il a semblé se régler.

J'ai échangé les UNO et les ai remplacés par les Nanos, j'ai téléchargé un croquis sur un Nano et l'autre sur l'autre Nano, et je m'attendais à des problèmes, mais tout a fonctionné sans modification du code.

Il est important que les différents croquis soient téléchargés sur les deux Arduinos.

Les différences ne sont que légères mais très importantes.

J'ai également ajouté quelques images pour cette version.

Cela m'amène à penser qu'il peut y avoir une mauvaise connexion ou que mes instructions étaient ambiguës.

J'ai utilisé des cartes de dérivation YL-105 pour les NRF24L01 afin de pouvoir utiliser le 5v.

Si vous n'utilisez pas les cartes de dérivation, vous devez utiliser 3.3v.

Si vous poussez 5v dans le NRF24L01, il mourra très probablement.

Il y a sept fils utilisés sur la carte NRF24L01

  • GND
  • 3.3v positif
  • CS vers Arduino pin 8 (défini dans le code)
  • CE à Arduino pin 7 (défini dans le code)
  • MOSI vers Arduino pin 11 (obligatoire)
  • MISO vers Arduino pin 12 (obligatoire)
  • SCK vers Arduino pin 13 (obligatoire)
  • IRQ n'est pas utilisé
  • LED jaune long fil - anode, vers broche Arduino 2
  • Fil jaune court - cathode, à une résistance de 220 ohms, puis deuxième fil de résistance à GND
  • LED rouge à long fil - anode, à la broche 3 d'Arduino Rouge à fil court - cathode, à une résistance de 220 ohms, puis un deuxième fil de résistance à GND
  • Arduino broche 4 pour commuter, de l'autre côté du commutateur à GND

Si j'ai un build qui ne semble pas fonctionner, je le démonte et je recommence, surtout avec un build assez petit, de cette façon j'élimine les erreurs précédentes.

La seule chose que je peux penser qui peut être incorrecte sur les planches de Tony et Andrea est que le MOSI et le MISO ont peut-être été échangés.

J'espère que cela les aidera, ainsi que toute autre personne qui pourrait avoir des problèmes.

Étape 6: démonstration vidéo ajoutée

Vidéo téléchargée pour donner une démonstration rapide de la configuration et de l'utilisation.

Articles Connexes