Changes between Version 3 and Version 4 of SujetTP5-2017


Ignore:
Timestamp:
Mar 3, 2017, 7:58:09 AM (8 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTP5-2017

    v3 v4  
    11= Communication sans fil =
    22
    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 ===
    64
    75Si 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.
     
    3230 * [http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceMaxi Langage Arduino]
    3331
    34 == Travail demandé ==
    3532
    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 ==
    4734
    4835* Vous allez commencer par faire un schéma du noeud.[[BR]]
    4936  Les composants nécessaires à un noeud sont :
    5037  * 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)
    5440
    5541  [[Image(htdocs:jpg/nano.jpg, height=200px)]]
    5642
    5743  [[Image(htdocs:jpg/pinoutNRF24L01.jpg, height=200px)]]
    58   [[Image(htdocs:jpg/photoresistance.jpg, height=100px)]]
    59   [[Image(htdocs:jpg/resistance.jpg, height=100px)]]
    6044 
    61 === L'usage des bibliothèques Arduino ===
    6245
    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 ==
    8047
    8148La documentation de la bibliothèque est [http://tmrh20.github.io/RF24/classRF24.html ici] dont voici un résumé :
     
    8350* `     RF24 (uint8_t _cepin, uint8_t _cspin)`[[BR]]
    8451  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)`
    8560
    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)
    10562{{{#!c
    10663#include <SPI.h>
     
    13693
    13794
    138 - baseSensor
     95- **baseSensor** (sur la raspberry pi)
    13996{{{#!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>
    143103
    144 RF24 radio(9,10);
     104typedef uint8_t byte;
     105
     106using namespace std;
     107
     108RF24 radio(15,0);
    145109
    146110byte addresses[][6] = {"0Node","1Node","2Node","3Node","4Node","5Node"};
    147111
    148112void setup() {
    149   Serial.begin(115200);
    150   printf_begin();
    151113  radio.begin();
     114  radio.setRetries(15,15);
    152115  radio.setPALevel(RF24_PA_LOW);
    153116  radio.openReadingPipe(1,addresses[0]);
     
    158121void loop() {
    159122  unsigned long got_time;
    160    
     123
    161124  if( radio.available()){
    162125     radio.read( &got_time, sizeof(unsigned long) );             // Get the payload
    163      Serial.println(got_time);
     126     cout << got_time << endl;
    164127   }
    165128}
     129
     130int main(int argc, char** argv){
     131    setup();
     132    while (1) loop();
     133    return 0;
     134}
    166135}}}
     136
     137- Makefile sur la raspberry pi
     138{{{#!make
     139RPI?=20
     140SRC=src
     141APP=NRF24L01_base
     142DST=lacas/nrf
     143
     144CROSSDIR        = /users/enseig/franck/peri
     145CROSS_COMPILE   = $(CROSSDIR)/arm-bcm2708hardfp-linux-gnueabi/bin/bcm2708hardfp-
     146
     147INC=$(HOME)/rf24/include
     148LIB=$(HOME)/rf24/lib
     149CFLAGS=-Wall -Wfatal-errors -O2 -I$(INC)
     150LDFLAGS=-L$(LIB) -lrf24
     151
     152all:  $(APP).x
     153
     154$(APP).x: $(APP).cpp
     155    $(CROSS_COMPILE)g++ -o $@ -I$(INC) $<  -O2 $(LDFLAGS)
     156
     157upload:
     158    scp -P50$(RPI) $(APP).x pi@peri:$(DST)
     159
     160clean:
     161    rm -f *.o *.x *~
     162}}}
     163
     164== Travail demandé ==
     165
     166Le 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