Changes between Version 5 and Version 6 of SujetTP6-2018


Ignore:
Timestamp:
Apr 6, 2018, 12:04:12 PM (7 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SujetTP6-2018

    v5 v6  
    252252Cette même bibliothèque a été installée sur les cartes !RaspberryPi car la bibliothèque est dynamique et non pas statique, donc il faut la bibliothèque sur la !RaspberryPi.
    253253
     254Cette compilation vous sera utile la semaine prochaine. Aujourd'hui, j'ai mis sur une !RaspberryPi, un émetteur qui envoi toute les secondes un message. Vous allez l'écouter avec votre Arduino et l'afficher sur l'écran OLED.
     255
    254256== Documents de référence du module NRF24L01 ==
    255257
     
    273275* `void         openReadingPipe (uint8_t number, const uint8_t *address)`
    274276
    275 .... la suite arrive :-)
    276 
    277 {{{#!protected
    278 
    279 - **sensor** (emetteur)
    280   Le programme c-
    281 {{{#!c
    282 #include <SPI.h>
    283 #include "RF24.h"
    284 #include "printf.h"
    285 
    286 RF24 radio(9,10); // radio(CE,CS)
    287 
    288 byte addresses[][6] = {"0XXXX"};
    289 
    290 void setup() {
    291   Serial.begin(115200);
    292   printf_begin();
    293   radio.begin();
    294   radio.setPALevel(RF24_PA_LOW);
    295   radio.openWritingPipe(addresses[0]);
    296   radio.printDetails();
    297   delay(1000);
    298 }
    299 
    300 
    301 void loop() {
    302   Serial.println(F("Now sending !"));
    303 
    304   unsigned long start_time = millis();            // Take the time, and send it.  This will block until complete
    305   if (!radio.write( &start_time, sizeof(unsigned long) )){
    306      Serial.println(F("failed!"));
    307   }
    308  
    309   delay(1000);
    310 }
    311 }}}
    312 
    313 
    314 - **baseSensor** (sur la raspberry pi)
     277- **emet** (émetteur sur une !RaspberryPi)[[BR]]
     278  Ce code est donné à titre indicatif, il ne sera pas utilisé aujourd'hui par vous. Il s'agit du code qui tourne sur l'une des   !RaspberryPi.
    315279{{{#!c
    316280#include <cstdlib>
     
    320284#include <unistd.h>
    321285#include <RF24/RF24.h>
     286#include <ctime>
    322287
    323288typedef uint8_t byte;
     
    325290using namespace std;
    326291
    327 RF24 radio(15,0);
    328 
    329 byte addresses[][6] = {"0Node","1Node","2Node","3Node","4Node","5Node"};
     292RF24 radio(15,8); // radio(CE,CS)
     293
     294byte addresses[][6] = {"0XXXX"};
     295
     296void setup() {
     297  radio.begin();
     298  radio.setPALevel(RF24_PA_LOW);
     299  radio.openWritingPipe(addresses[0]);
     300  radio.printDetails();
     301}
     302
     303char mess[16];
     304char buffer[32];
     305unsigned long timer;
     306
     307void loop() {
     308  cout << "." << flush;
     309  sprintf(buffer,"%s %d", mess, timer);
     310  radio.write( buffer, sizeof(buffer) );
     311  timer++; 
     312  sleep(1);
     313}
     314
     315int main(int argc, char **argv)
     316{
     317    if (argc > 1) strcpy(mess, argv[1]);
     318    setup();
     319    while (1)
     320        loop();
     321    return 0;
     322}
     323}}}
     324
     325- **Sensor** (sur l'Arduino)
     326{{{#!c
     327#include <SPI.h>
     328#include "RF24.h"
     329#include "printf.h"
     330
     331RF24 radio(9,10);
     332
     333byte addresses[][6] = {"0XXXX"};
    330334
    331335void setup() {
     
    336340  radio.printDetails();
    337341  radio.startListening();
     342  Serial.begin(9600);
    338343}
    339344
    340345void loop() {
    341   unsigned long got_time;
     346  char buffer[32];
    342347
    343348  if( radio.available()){
    344      radio.read( &got_time, sizeof(unsigned long) );             // Get the payload
    345      cout << got_time << endl;
     349     radio.read( buffer, sizeof(buffer) );             // Get the payload
     350     Serial.println(buffer);
    346351   }
    347352}
    348 
    349 int main(int argc, char** argv){
    350     setup();
    351     while (1) loop();
    352     return 0;
    353 }
    354 }}}
    355 
    356 - Makefile sur la raspberry pi
     353}}}}
     354
     355- Makefile sur la !RaspberryPi[[BR]]
     356  Ce Makefile est donné à titre indicatif, il ne sera pas utilisé aujourd'hui.
    357357{{{#!make
    358358RPI?=20
    359359SRC=src
    360360APP=NRF24L01_base
    361 DST=lacas/nrf
     361DST=nom1_nom2
    362362
    363363CROSSDIR        = /users/enseig/franck/peri
     
    383383== Travail demandé ==
    384384
    385  * Le but initial 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 (l'arduino) et un récepteur (la raspberry).
    386  * Ensuite, l'idée est de faire une communication entre deux raspberry pi. Il va falloir que vous lisiez la documentation du NRF pour comprendre comment numéroter les noeuds. Une raspberry allume la led de sa voisine.
    387  * Comme, il n'y a pas assez de raspberry, nous allons ajouter des arduinos.
    388  * [http://www.mon-club-elec.fr/pmwiki_reference_arduino/pmwiki.php?n=Main.ReferenceMaxi Langage Arduino]
    389 
    390 == Programmation des Arduinos ==
    391 
    392 Vous devez utiliser la dernière version d'arduino qui se trouve `/opt/arduino-1.6.8/arduino`.
    393 Vous commencerez par compiler le programme `blink` qui fait clignoter la led 13 présente sur l'arduino.
    394 Pour pouvoir compiler un programme sur le NRF24, il faut ajouter la bibliothèque.
    395 
    396 **L'usage des bibliothèques Arduino**
    397 
    398 * Ce qu'il y a de bien dans l'écosystème Arduino, c'est la volonté de faire simple.
    399   En effet, pour presque tous les "périphériques" existants il existe un et même
    400   souvent plusieurs bibliothèques de fonctions écrites par des "amateurs" souvent très doués.
    401   En plus, les sources sont ouvertes, et il est donc possible d'adapter ces codes pour des
    402   besoins spécifiques.
    403 
    404 * Les bibliothèques sont trouvées, en général, en tapant sur un moteur de recherche, la requête
    405   "nom-du-module Arduino". Les projets sont souvent sur github. Pour faire court,
    406    * Vous téléchargez la bibliothèque (un RF24-master.zip)
    407    * Vous ajoutez la bibliothèque dans l'environnement Arduino (import Library)
    408    * Vous lancer l'IDE Arduino et dans le menu '''file/exemples''' vous avez un exemple (souvent plusieurs) de la nouvelle bibliothèque.
    409    * Vous en choisissez un, vous le chargez, vous le compilez, vous l'uploadez, vous le testez :-)
    410 
    411 L'idée sera d'allumer la led de l'arduino depuis la raspberry pi ou l'inverse.
    412 
    413 }}}
     385Commencer par compiler sur l'Arduino le code du recepteur seul, et ajouter une tâche qui lit le message envoyé et l'affche sur l'écran Oled.