Changes between Version 3 and Version 4 of SujetTP5-2017
- Timestamp:
- Mar 3, 2017, 7:58:09 AM (8 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
SujetTP5-2017
v3 v4 1 1 = Communication sans fil = 2 2 3 == Préambule == 4 5 === Récupération de la bibliothèque du NRF24L01 === 3 == Préambule : Récupération de la bibliothèque du NRF24L01 === 6 4 7 5 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. … … 32 30 * [http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceMaxi Langage Arduino] 33 31 34 == Travail demandé ==35 32 36 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. 37 Nous allons aussi voir comment simuler l'exécution de plusieurs tâches périodiques. 38 39 40 == Lecture de la luminosité == 41 42 Faire un programme qui affiche l'état de la photo-résistance toutes les secondes, en utilisant une application multi-tâches 43 44 == Communication nRF24L01+ == 45 46 === Le matériel === 33 == Communication nRF24L01+ : le matériel == 47 34 48 35 * Vous allez commencer par faire un schéma du noeud.[[BR]] 49 36 Les composants nécessaires à un noeud sont : 50 37 * un Arduino nano 51 * un couple photorésistance, résistance 52 * un capteur sonore 53 * un module **nRF24L01** 38 * deux modules nRF24L01 39 * une raspberry pi (CE est connecté sur le GPIO15 et CSN sur CE0) 54 40 55 41 [[Image(htdocs:jpg/nano.jpg, height=200px)]] 56 42 57 43 [[Image(htdocs:jpg/pinoutNRF24L01.jpg, height=200px)]] 58 [[Image(htdocs:jpg/photoresistance.jpg, height=100px)]]59 [[Image(htdocs:jpg/resistance.jpg, height=100px)]]60 44 61 === L'usage des bibliothèques Arduino ===62 45 63 * Ce qu'il y a de bien dans l'écosystème Arduino, c'est que la volonté de faire simple. 64 En l'occurrence, nous avons deux nouveaux objets, l'écran et le module RF24. 65 Pour les utiliser, nous allons devoir faire appel à des fonctions, mais nous n'allons pas avoir 66 à les écrire. En effet, pour presque tous les "périphériques" existants il existe un et même 67 souvent plusieurs bibliothèques de fonctions écrites par des "amateurs" souvent très doués. 68 En plus, les sources sont ouvertes, et il est donc possible d'adapter ces codes pour des 69 besoins spécifiques. 70 71 * Les bibliothèques sont trouvées, en général, en tapant sur un moteur de recherche, la requête 72 "nom-du-module Arduino". Les projets sont souvent sur github. Pour faire court, 73 * Vous téléchargez la bibliothèque (un .zip) 74 * Vous ajoutez la bibliothèque dans l'environnement Arduino 75 * Vous lancer l'IDE Arduino et dans le menu '''file/exemples''' vous avez un exemple (souvent plusieurs) 76 de la nouvelle bibliothèque. 77 * Vous en choisissez un, vous le chargez, vous le compilez, vous l'uploadez, vous le testez :-) 78 79 === Communication de base Sensor - baseSensor === 46 == Communication entre le capteur et la base == 80 47 81 48 La documentation de la bibliothèque est [http://tmrh20.github.io/RF24/classRF24.html ici] dont voici un résumé : … … 83 50 * ` RF24 (uint8_t _cepin, uint8_t _cspin)`[[BR]] 84 51 Configuration du module radio et du SPI, reçoit les numéros de broche cepin (radio) cspin (SPI Slave Select) 52 * `bool begin (void)` Démarrage du module radio 53 * `void startListening (void)` 54 * `void stopListening (void)` 55 * `bool available (void)`] 56 * `void read (void *buf, uint8_t len)` 57 * `bool write (const void *buf, uint8_t len)` 58 * `void openWritingPipe (const uint8_t *address)` 59 * `void openReadingPipe (uint8_t number, const uint8_t *address)` 85 60 86 * `bool begin (void)`[[BR]] 87 Démarrage du module radio 88 89 * `void startListening (void)`[[BR]] 90 91 * `void stopListening (void)`[[BR]] 92 93 * `bool available (void)`[[BR]] 94 95 * `void read (void *buf, uint8_t len)`[[BR]] 96 97 * `bool write (const void *buf, uint8_t len)`[[BR]] 98 99 * `void openWritingPipe (const uint8_t *address)`[[BR]] 100 101 * `void openReadingPipe (uint8_t number, const uint8_t *address)`[[BR]] 102 103 104 - **sensor** 61 - **sensor** (sur l'Arduino) 105 62 {{{#!c 106 63 #include <SPI.h> … … 136 93 137 94 138 - baseSensor95 - **baseSensor** (sur la raspberry pi) 139 96 {{{#!c 140 #include <SPI.h> 141 #include "RF24.h" 142 #include "printf.h" 97 #include <cstdlib> 98 #include <iostream> 99 #include <sstream> 100 #include <string> 101 #include <unistd.h> 102 #include <RF24/RF24.h> 143 103 144 RF24 radio(9,10); 104 typedef uint8_t byte; 105 106 using namespace std; 107 108 RF24 radio(15,0); 145 109 146 110 byte addresses[][6] = {"0Node","1Node","2Node","3Node","4Node","5Node"}; 147 111 148 112 void setup() { 149 Serial.begin(115200);150 printf_begin();151 113 radio.begin(); 114 radio.setRetries(15,15); 152 115 radio.setPALevel(RF24_PA_LOW); 153 116 radio.openReadingPipe(1,addresses[0]); … … 158 121 void loop() { 159 122 unsigned long got_time; 160 123 161 124 if( radio.available()){ 162 125 radio.read( &got_time, sizeof(unsigned long) ); // Get the payload 163 Serial.println(got_time);126 cout << got_time << endl; 164 127 } 165 128 } 129 130 int main(int argc, char** argv){ 131 setup(); 132 while (1) loop(); 133 return 0; 134 } 166 135 }}} 136 137 - Makefile sur la raspberry pi 138 {{{#!make 139 RPI?=20 140 SRC=src 141 APP=NRF24L01_base 142 DST=lacas/nrf 143 144 CROSSDIR = /users/enseig/franck/peri 145 CROSS_COMPILE = $(CROSSDIR)/arm-bcm2708hardfp-linux-gnueabi/bin/bcm2708hardfp- 146 147 INC=$(HOME)/rf24/include 148 LIB=$(HOME)/rf24/lib 149 CFLAGS=-Wall -Wfatal-errors -O2 -I$(INC) 150 LDFLAGS=-L$(LIB) -lrf24 151 152 all: $(APP).x 153 154 $(APP).x: $(APP).cpp 155 $(CROSS_COMPILE)g++ -o $@ -I$(INC) $< -O2 $(LDFLAGS) 156 157 upload: 158 scp -P50$(RPI) $(APP).x pi@peri:$(DST) 159 160 clean: 161 rm -f *.o *.x *~ 162 }}} 163 164 == Travail demandé == 165 166 Le but inital 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. 167 168 ... 169