Changes between Version 2 and Version 3 of IOC20_T01


Ignore:
Timestamp:
Jan 29, 2020, 5:54:51 PM (5 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • IOC20_T01

    v2 v3  
    22
    33Au long de ce module, vous allez utiliser 4 nano-ordinateurs :
    4 * Raspberry P1 1B
    5 * Raspberry PI 3B
     4* !RaspberryPi !1B
     5* !RaspberryPi 3B
    66* Arduino nano
    77* Module ESP32 TTGO-Lora32-Oled
    88
    99Dans ce TP, vous allez :
    10 * écrire une application pour la Raspberry Pi 1B pour faire clignoter deux LEDs selon un motif que vous choisirez et également de récupérer les informations d'un bouton poussoir.
     10* écrire une application pour la !RaspberryPi 1B pour faire clignoter deux LEDs selon un motif que vous choisirez et également de récupérer les informations d'un bouton poussoir.
    1111
    1212À la fin de ce TP, vous devriez avoir acquis les compétences suivantes:
     
    1616* Écriture d’une librairie C pour la manipulation des GPIO.
    1717
    18 = 2. Hello World! Raspberry PI 1
    19 
    20 **Plateforme des TP pour les Raspberry Pi**
     18
     19
     20= 2. Hello World! !RaspberryPi 1
     21
     22
     23
     24== 2.1. Accès aux cartes !RaspberryPi
     25
     26
     27Le schéma ci-dessous représente la plateforme des cartes !RaspberryPi 1.
     28Pour exécuter votre programme sur une carte !RaspberryPi, vous devez vous connecter en `ssh` sur une carte !RaspberryPi en passant par le routeur peri. Le routeur peri a deux adresses: `132.227.71.43` du coté laboratoire et `192.168.1.1` de l'autre coté.  Le serveur de nom (DNS) du laboratoire a attribué l'adresse `132.227.71.43` le nom `peri`. Le routeur peri crée un sous-réseau (`192.168.1.x`) où sont connectées les cartes !RaspberryPi. Les cartes sont numérotées de `20` à `26`. Le routeur a été configuré pour reconnaître les adresses MAC des cartes et leur attribuer une adresse IP fixe. La carte n°`X` (X allant de 20 à 26) reçoit l'adresse IP 192.168.1.`X` (par exemple la carte n°`20` a comme adresse sur ce réseau `192.168.1.20`).
     29Pour faire ça, le firmware du routeur a été remplacé par '''[[http://www.dd-wrt.com/site/index | dd-wrt]]''' qui permet ce type de configuration.  Le routeur a été également été configuré pour que tous les paquets entrants sur le port `62200`+`X` de l'adresse `peri` soient routés vers l'adresse `192.168.1.X` port 22. Le port 22 est celui sur lequel écoute le serveur ssh.
    2130
    2231[[Image(htdocs:png/plateforme-IOC-raspberry.png, width=700px, nolink)]]
    2332
    24 Pour exécuter votre programme sur une carte Raspberry Pi, vous devez vous connecter en SSH sur une carte Raspberry Pi en passant par le routeur peri. Le routeur a deux adresses: `132.227.71.43` du coté laboratoire et `192.168.1.1` de l'autre coté.  Le serveur de nom lui a attribué un nom : peri. Le routeur crée un sous-réseau (`192.168.1.x`) où sont connectées les cartes. Les cartes sont numérotées de `20` à `26` plus des cartes étudiants (ici n°30), le routeur a été programmé de telle sorte que l'adresse internet de la carte n°`X` ait comme adresse 192.168.1.`X` (par exemple la carte n°`20` a comme adresse sur ce réseau `192.168.1.20`).
    25 Pour faire ça, le firmware du routeur a été remplacé par '''[[http://www.dd-wrt.com/site/index | dd-wrt]]''' qui permet ce type de mode.  Le routeur a été également été programmé pour que tous les paquets entrants sur le port `5000`+`X` de l'adresse peri soient routés vers l'adresse `192.168.1.X`.
    26 
    27 Il n'y a qu'un seul compte utilisateur sur une carte Raspberry Pi. Le nom de login est `pi` et le mot de passe est `raspberry`.
    28 
    29 Ainsi, pour se connecter en ssh sur la carte n°`22` avec le login `pi`, il faut taper (remarquez que c'est un `p` minuscule):
    30 {{{#!sh
    31 $ ssh -p 5022 pi@peri
     33
     34Il n'y a qu'un seul compte utilisateur sur une carte !RaspberryPi. Le nom de login est `pi` et le mot de passe est `raspberry`. Comme, il n'y a qu'un compte par carte et que vous allez devoir vous les partager, vous devez créer un répertoire à la racine avec '''votre nom de votre login''' sur le réseau enseignement accolé avec un tiret avec le '''nom de login''' de votre binôme. Par exemple, deux personnes en binôme, dont les noms de login sont respectivement `almada` et `fomentin` vont créer un répertoire `almada-fomentin` (en minuscule).
     35
     36    '''Je vous demande de respecter cette convention'''[[BR]]
     37    '''afin que je puisse vous identifier facilement.'''
     38 
     39
     40Ainsi, pour se connecter en ssh sur la carte n°`20` avec le login `pi`, il faut taper (remarquez que c'est un `p` minuscule):
     41{{{#!sh
     42$ ssh -p 62220 pi@peri
    3243pi@peri's password: raspberry
    3344}}}
    3445
    35 Comme, il n'y a qu'un compte par carte et que vous allez devoir vous les partager, vous devez créer un répertoire à la racine avec le nom de votre login sur le réseau enseignement accolé avec un tiret avec le nom de votre binôme si vous en avez un. Par exemple, deux personnes en binôme se nommant respectivement `almada` et `fomentin` vont créer un répertoire `almada-fomentin` (en minuscule). '''Je vous demande de respecter cette convention afin que je puisse vous identifier facilement.'''
     46Pour copier un fichier `file.x` depuis votre compte enseignement sur le carte n°`20` il faut taper (remarquez que c'est un `P` majuscule):
     47{{{#!sh
     48$ scp -P 62220 file.x pi@peri:almada-fomentin
     49pi@peri's password: raspberry
     50}}}
    3651
    3752Il est recommandé de ne pas laisser de fichiers source sur la carte SD, car celle-ci peut être reformatée en cas de dysfonctionnement.
    3853
    39 Pour copier un fichier `file.x` depuis votre compte enseignement sur le carte n°`22` il faut taper (remarquez que c'est un `P` majuscule):
    40 {{{#!sh
    41 $ scp -P 5022 file.x pi@peri:almada-fomentin
    42 pi@peri's password: raspberry
    43 }}}
    44 
    45 {{{#!td
    46 {{{#!td
    47 **__Astuce__**[=#mdp][[BR]]
     54
     55== 2.2. Configuration des clés ssh
     56
     57
    4858Taper le mot de passe à chaque fois que l'on se logue et à chaque copie peut être pénible à la longue.
    49 Pour éviter cela, il faut donner à la !RaspberryPi la clé publique du protocole de chiffrement utilisé pour la connexion.
     59Pour éviter cela, il faut donner à votre !RaspberryPi la clé publique du protocole de chiffrement utilisé pour la connexion. Vous allez utiliser les commandes suivantes sur le PC développement :
     60
     61{{{#!sh
     62ssh-keygen -t rsa
     63ssh-copy-id -i $HOME/.ssh/id_rsa.pub -p 622x pi@peri
     64ssh -p 622x pi@peri
     65}}}
     66
    5067* Pour la première commande, vous devez taper 3 fois sur la touche entrée pour choisir les valeurs par défaut.
    5168* Pour la deuxième commande, vous sélectionnez la bonne carte (en remplaçant x par le bon chiffre) et vous tapez le mot de passe `raspberry` (ce sera la dernière fois).
    52 * La troisième est là pour vérifier
    53 {{{#!sh
    54 ssh-keygen -t rsa
    55 ssh-copy-id -i $HOME/.ssh/id_rsa.pub -p 502x pi@peri
    56 ssh -p 502x pi@peri
    57 }}}
    58 }}}
    59 }}}
    60 [[BR]]
    61 
    62 = 2.1. Prise en mains des outils de développement: Hello World! =
     69* La troisième est là pour vérifier que vous n'avez plus besoin du mot de passe.
     70
     71
     72== 2.3. Prise en mains des outils de développement: Hello World!
     73
    6374
    6475La première étape consiste à vous familiariser avec les outils de
     
    6980Pour compiler votre programme, suivez les instructions suivantes.
    7081
    71 * Tout d'abord, configurez votre terminal pour utiliser le compilateur croisé (vous pourrez ajouter cette commande dans le fichier $HOME/.bashrc):
     82* Tout d'abord, configurez votre terminal pour utiliser le compilateur croisé. Ajoutez dans votre $HOME/.bashrc (sur le PC de développement) la ligne suivante et ouvrez un nouveau terminal.
    7283  {{{#!sh
    7384  $ source /users/enseig/franck/peri/export_rpi_toolchain.sh
     
    7889  $ which bcm2708hardfp-gcc
    7990  }}}
    80   Si cette commande ne retourne rien, la configuration n'a pas fonctionné. Appelez le chargé de TP pour vous aider.
    81 
    82 Votre suite d'outils (toolchain) contient tous les outils nécessaires pour la compilation, l'édition des liens et la manipulation de binaires pour la carte Raspberry Pi. Et tous ces outils sont préfixés par la même chaîne de caractères: `bcm2708hardfp-`. Il s'agit donc d'un compilateur pour un SoC BCM2708 avec l'option hardfp activée (calcul flottant matériel). Il s'agit bien du SoC de la carte Raspberry Pi.
    83 
    84 Maintenant, pour compiler un programme C vers un binaire qui puisse s'exécuter sur la carte Raspberry Pi, il vous faut écrire un Makefile pour plus de facilité. Pour cela, suivez la syntaxe de base des Makefile:
     91  Si cette commande ne retourne rien, la configuration n'a pas fonctionné.
     92
     93Votre suite d'outils (toolchain) contient tous les outils nécessaires pour la compilation, l'édition des liens et la manipulation de binaires pour la carte RaspberryPi. Et tous ces outils sont préfixés par la même chaîne de caractères: `bcm2708hardfp-`. Il s'agit donc d'un compilateur pour un SoC BCM2708 avec l'option hardfp activée (calcul flottant matériel). Il s'agit bien du SoC de la carte RaspberryPi.
     94
     95Maintenant, pour compiler un programme C vers un binaire qui puisse s'exécuter sur la carte RaspberryPi, il vous faut écrire un Makefile pour plus de facilité. Pour cela, suivez la syntaxe de base des Makefile:
    8596{{{#!make
    8697cible: dépendances
     
    117128
    118129  **__0ption -static__**::
    119   L'option "-static" est utilisée par l'éditeur de lien. Elle est importante ici, car la librairie C du compilateur croisé n'est pas tout à fait identique à la librairie C sur la carte Raspberry Pi. Ajouter "-static" à la ligne de compilation permet de créer un binaire qui contient en plus les fonctions de la librairie C utilisée par votre programme. Ceci permettra à celui-ci de ne pas essayer d'utiliser des fonctions de la librairie C installée sur la carte qui, sinon, aurait été chargée dynamiquement.
     130  L'option "-static" est utilisée par l'éditeur de lien. Elle est importante ici, car la librairie C du compilateur croisé n'est pas tout à fait identique à la librairie C sur la carte RaspberryPi. Ajouter "-static" à la ligne de compilation permet de créer un binaire qui contient en plus les fonctions de la librairie C utilisée par votre programme. Ceci permettra à celui-ci de ne pas essayer d'utiliser des fonctions de la librairie C installée sur la carte qui, sinon, aurait été chargée dynamiquement.
    120131
    121132== 2.2. Contrôle de GPIO en sortie ==
     
    131142}}}
    132143* Éditez le fichier lab1.c et ajoutez le code que vous pensez nécessaire à la réalisation de cet exercice.\\
    133   ATTENTION: ne changez pas les valeurs de GPIO_LED0, car vous risqueriez d'endommager la carte Raspberry Pi.
     144  ATTENTION: ne changez pas les valeurs de GPIO_LED0, car vous risqueriez d'endommager la carte RaspberryPi.
    134145* Ensuite, compilez-le grâce au Makefile (**Vous devez l'adapter**) qui vous est fourni.
    135146  Qu'observez-vous ? Essayez de changer la fréquence de clignotement.
     
    211222   - Rend 0 si pas d'erreur; -1 en cas d'erreur
    212223
    213 = 3. Arduino
    214 
    215 == 3.1. Objectif
    216 
    217 L'objectif de vous familiariser avec l'environnement Arduino. Vous allez donc utiliser des cartes Arduino et y programmer une petite application.
    218 
    219 == 3.2. Environnement
    220 
    221 Il existe beaucoup d'excellents tutoriels sur l’Arduino, et il ne s'agit pas ici de remplacer par un tutoriel simplifié. Si l’Arduino vous intéresse au-delà de ce que nous allons brièvement aborder, vous pouvez commencer par l'excellent tutoriel d'[https://zestedesavoir.com/tutoriels/686/arduino-premiers-pas-en-informatique-embarquee/ Eskimon].
    222 
    223 L'application Arduino est déjà installé sur les machine du département, pour la lancer, il suffit de taper son nom sur un terminal :
    224 {{{
    225 $ /opt/arduino.1.6.8/arduino &
    226 }}}
    227 La fenêtre d'édition apparaît. Elle va permettre d'éditer, de compiler et de téléverser (upload) votre programme dans le microcontrôleur ATmega. Vous allez devoir commencer par sélectionner la carte et le port de connexion (menu outils).
    228 * carte : Arduino nano 328p
    229 * port : /dev/ttyUSB0 ou /dev/ttyUSB1
    230 Le port n'apparait que lorsque vous connectez la carte. l'hôte USB détecte et reconnaît la carte au moment de sa connexion et installe le driver (maintenant vous savez comment :-).
    231 
    232 == 3.3 Travail demandé ==
    233 
    234 1. faire clignoter une led 13 (exemple blink)
    235 2. Lire le port analogique A0, sur lequel est branché une photorésistance et allumer la led 13 si la lumière détectée est sombre.
    236 {{{
    237 
    238   5V <----(/\LCR/\)--+--[/\/2kOhms/\/]----|0V
    239                      |
    240                      v
    241                      A0
    242 }}}
    243 3. Utiliser la photorésistance pour simuler un bouton poussoir, l'appui serait juste l'éclairage par un flash. A la détection de cet "appui", vous afficher un message sur le terminal.
    244224
    245225= 4. Compte rendu (CR)