Version 3 (modified by 8 years ago) (diff) | ,
---|
Communication sans fil
Préambule
Récupération de la bibliothèque du NRF24L01
Si nous voulons continuer à cross compiler, il faut installer la librairie qui va permettre de contrôler le module NRF24L01. Il existe plusieurs librairies. Celle choisie à le mérite d'être disponible dans l'environnement raspberry et arduino. C'est-à-dire que lorsque vous aurez compris comment l'utiliser avec la raspberry pi, le passage sur Arduino sera facile.
- Aller sur le site https://github.com/tmrh20/RF24
- Récupérer le .zip de la branche master (bouton
clone and download -> Download ZIP
)$ unzip RF24-master.zip $ cd RF24-master $ mkdir $HOME/rf24 $ ./configure --prefix=$HOME/rf24 --soc=BCM2835 --c_compiler=bcm2708hardfp-gcc --cxx_compiler=bcm2708hardfp-g++ --driver=SPIDEV --ldconfig='' $ make $ make install
- Vérification que la library est installée.
$ ls $HOME/rf24 include lib
La bibliothèque a été installée sur les cartes raspberry pi car la bibliothèque est dynamique et non pas statique, donc il faut la bibliothèque sur la raspberry pi.
Documents de référence du module NRF24L01
Travail demandé
Le but de la séance est de lire la valeur envoyée par l'Arduino et de l'afficher sur le terminal de la raspberry. Il y a donc au moins 2 noeuds, un émetteur et un récepteur. Nous allons aussi voir comment simuler l'exécution de plusieurs tâches périodiques.
Lecture de la luminosité
Faire un programme qui affiche l'état de la photo-résistance toutes les secondes, en utilisant une application multi-tâches
Communication nRF24L01+
Le matériel
- Vous allez commencer par faire un schéma du noeud.
Les composants nécessaires à un noeud sont :- un Arduino nano
- un couple photorésistance, résistance
- un capteur sonore
- un module nRF24L01
L'usage des bibliothèques Arduino
- Ce qu'il y a de bien dans l'écosystème Arduino, c'est que la volonté de faire simple. En l'occurrence, nous avons deux nouveaux objets, l'écran et le module RF24. Pour les utiliser, nous allons devoir faire appel à des fonctions, mais nous n'allons pas avoir à les écrire. En effet, pour presque tous les "périphériques" existants il existe un et même souvent plusieurs bibliothèques de fonctions écrites par des "amateurs" souvent très doués. En plus, les sources sont ouvertes, et il est donc possible d'adapter ces codes pour des besoins spécifiques.
- Les bibliothèques sont trouvées, en général, en tapant sur un moteur de recherche, la requête
"nom-du-module Arduino". Les projets sont souvent sur github. Pour faire court,
- Vous téléchargez la bibliothèque (un .zip)
- Vous ajoutez la bibliothèque dans l'environnement Arduino
- Vous lancer l'IDE Arduino et dans le menu file/exemples vous avez un exemple (souvent plusieurs) de la nouvelle bibliothèque.
- Vous en choisissez un, vous le chargez, vous le compilez, vous l'uploadez, vous le testez :-)
Communication de base Sensor - baseSensor
La documentation de la bibliothèque est ici dont voici un résumé :
RF24 (uint8_t _cepin, uint8_t _cspin)
Configuration du module radio et du SPI, reçoit les numéros de broche cepin (radio) cspin (SPI Slave Select)
bool begin (void)
Démarrage du module radio
void startListening (void)
void stopListening (void)
bool available (void)
void read (void *buf, uint8_t len)
bool write (const void *buf, uint8_t len)
void openWritingPipe (const uint8_t *address)
void openReadingPipe (uint8_t number, const uint8_t *address)
- sensor
#include <SPI.h> #include "RF24.h" #include "printf.h" RF24 radio(9,10); // radio(CE,CS) byte addresses[][6] = {"0Node"}; void setup() { Serial.begin(115200); printf_begin(); radio.begin(); radio.setPALevel(RF24_PA_LOW); radio.openWritingPipe(addresses[0]); radio.printDetails(); delay(1000); } void loop() { Serial.println(F("Now sending !")); unsigned long start_time = millis(); // Take the time, and send it. This will block until complete if (!radio.write( &start_time, sizeof(unsigned long) )){ Serial.println(F("failed!")); } delay(1000); }
- baseSensor
#include <SPI.h> #include "RF24.h" #include "printf.h" RF24 radio(9,10); byte addresses[][6] = {"0Node","1Node","2Node","3Node","4Node","5Node"}; void setup() { Serial.begin(115200); printf_begin(); radio.begin(); radio.setPALevel(RF24_PA_LOW); radio.openReadingPipe(1,addresses[0]); radio.printDetails(); radio.startListening(); } void loop() { unsigned long got_time; if( radio.available()){ radio.read( &got_time, sizeof(unsigned long) ); // Get the payload Serial.println(got_time); } }