jeudi 16 février 2017

Communication entre Raspberry Pi et Arduino avec modules nRF24L01

Nous voyons aujourd'hui comment établir une communication entre un Raspberry Pi et un Arduino (si vous le préférez, ce tutoriel vous permettra également d'établir une communication entre deux Rasbperry Pi).

Pour des raisons de simplicité, je vous propose des scripts qui permettent une communication unidirectionnelle:  un des deux appareils émet des informations, et l'autre appareil les capte.

Les possibilités sont donc:

- Un Raspberry Pi émetteur qui envoie des informations à un Arduino récepteur.
- Un Arduino émetteur qui envoie des informations à un Raspberry Pi récepteur.
- Un Raspberry Pi émetteur qui envoie des informations à un Raspberry Pi récepteur.

Les modules nRF24L01 offrent beaucoup plus de possibilités, comme par exemple une véritable conversation entre deux cartes (chacune agissant tour à tour comme émetteur et comme récepteur)­. Nous y reviendrons peut-être dans un futur article.

Réglages de l'Arduino

Si la communication que vous désirez établir implique la présence d'un Arduino (peu importe qu'il soit émetteur ou récepteur), référez-vous à cet article pour programmer la carte et y brancher convenablement le module nRF24L01.

Réglages du Raspberry Pi

Il faut tout d'abord s'assurer que le protocole SPI est activé.

Pour ce faire, on va dans le menu "Préférences", "Configuration du Raspberry Pi'.


Sous l'onglet "Interfaces", activer SPI, si ce n'est pas déjà fait.


Installation de la bibliothèque RF24

Après avoir tourné en rond pendant un certain temps, je me suis résigné à lire attentivement la documentation disponible sur la page de la bibliothèque RF24.  Voici ce que j'ai écrit dans le terminal pour télécharger et installer la bibliothèque:

--------------------
git clone https://github.com/TMRh20/RF24.git
cd RF24
sudo make install -B
sudo apt-get install python-dev libboost-python-dev
sudo apt-get install python-setuptools
cd pyRF24
./setup.py build
sudo ./setup.py install
------------------------

L'installation de la bibliothèque "libboost" et l'étape "setup.py build" nécessitent plusieurs minutes. L'installation des "setuptools" est probablement superflue (ils étaient déjà installé sur les deux modèles de Raspberry Pi que j'ai essayés).

Sur mon vieux Rasbperry Pi modèle B, une augmentation temporaire de la mémoire virtuelle s'est avérée nécessaire pour compléter avec succès l'étape "setup.py build".  Ça n'a pas été nécessaire sur mon Raspberry Pi 2, par contre.

Le circuit:

Voici d'abord un schéma identifiant les différents connecteurs du module nRF24L01:
Les connexions entre le module nRF24L01 et le Raspberry Pi sont:

GND du nRF24L01 : une des pins GND du Raspberry Pi (board 6: fil noir sur le schéma ci-dessous)
Vcc du nRF24L01 : une des pins 3V3 du Raspberry Pi (board 1: fil rouge)
CE du nRF24L01 : GPIO22 du Raspberry Pi (board 15: fil bleu)
CSN du nRF24L01 : GPIO8 du Raspberry Pi (board 24: fil vert)
SCK du nRF24L01 : SCKL du Raspberry Pi  (board 23:  fil orange)
MOSI du nRF24L01:  MOSI du Raspberry Pi (board 19:  fil rose)
MISO du nRF24L01:  MISO du Rasbperry Pi (board 21:  fil jaune)




Lors de mes tests, il n'a pas été nécessaire d'ajouter un condensateur de 10 μF en parallèle avec l'alimentation du nRF24L01,  C'est parfois conseillé.

Script en python pour que le Raspberry Pi agisse en émetteur





Script en python pour que le Raspberry Pi agisse en récepteur





Notez qu'il est important d'utiliser les privilèges de superutilisateur pour que ces scripts fonctionnent correctement  (par exemple:  "sudo python RF24Emetteur").  Sinon, le script sera rapidement interrompu avec la mention "erreur de segmentation".

De plus, même si les scripts eux-même ne font aucune vérification, la bibliothèque s'assure que le module nRF24L01 est correctement branché.  Si ce n'est pas le cas, le message "radio not responding" s'affiche à l'écran.

Notez finalement qu'il existe bien d'autres façons d'établir une communication entre un Raspberry Pi et un Arduino, et nous en avons exploré quelques-unes dans le passé:  communication par USB et communication RF 433 MHz.

Yves Pelletier   (TwitterFacebook)

1 commentaire:

  1. Hello ,
    this is very helpful thank you
    i just have one question, how can i set multiple arduino transmitters for one Raspberry receiver.

    Thank you

    RépondreSupprimer

Related Posts Plugin for WordPress, Blogger...