
Raspberry PI (Niveau 1) -
GPIO en mode Terminal
Maintenant que la structure est correctement cablée, il est possible d'effectuer les premiers essais de programmation du port GPIO.
Notre RASPBERRY est configuré en IP fixe,
ce qui va permettre de s'y connecter facilement à distance.
Les commandes seront directement tapées dans un terminal ouvert à distance à l'aide du
client SSH Putty.
Programmation du port GPIO-21
- Pour commencer, ça serait dommage de faire simple, le GPIO acceptant différents modes de numérotation,
toutes les commandes gpio seront executées avec l'option -g pour utiliser la
numérotation BCM
(ce sera systématiquement notre mode préféré).
- La LED étant connectée sur le port GPIO-21, il faut configurer celui-ci en sortie :
gpio -g mode 21 out
- Pour imposer un niveau logique haut sur la broche :
gpio -g write 21 1
La led doit maintenant être allumée.
- il peut être intéressant de vérifier l'état global du port :
gpio readall
On constate que la broche 40 (GPIO-21 en numérotation BCM) est configurée en sortie et que sont état logique est "1".
- Pour imposer un niveau logique bas sur la broche :
gpio -g write 21 0
La led doit maintenant être éteinte.
Intégration de commandes dans un script
Dans certaines circonstances (nombreuses commandes à effectuer, automatisation des actions, itérations, fonctionnalités plus complexes ...)
il peut être intéressant de créer un scipt. Ce sera tout simplement un fichier texte regroupant plusieurs commandes.
L'extention des fichiers script sera .sh (comme shell)
- Création du scipt que l'on appellera led_on.sh
nano led_on.sh
- Contenu du fichier (ne pas oublier d'enregistrer avant de quitter) :
#!/bin/bash
gpio -g mode 21 out #configuration du GPIO-21 en sortie
gpio -g write 21 1 #positionnement du GPIO-21 au niveau logique 1
gpio readall #affichage de l'état global du port GPIO
Note : le double caractère #! est appelé ShaBang. C'est un marqueur.
Placé en début de fichier, il permet d'indiquer le chemin du programme qui exécutera le script.
Il n'est pas systématiquement obligatoire mais par convention, nous le ferons toujours apparaitre en début de chacun de nos scripts.
- Pour exécuter le script :
sh led_on.sh
- Pour être plus cohérent on peut rendre le fichier exécutable :
chmod +x led_on.sh
et l'exécuter avec la commande :
./led_on.sh
Note : les caractères ./ indiquent que l'on demande l'exécution d'un sript situé dans le répertoire courant.
Pour rendre ce script universel, exécutable par tous, il faudrait le déplacer (en mode root) dans le répertoire /usr/local/bin/
- Pour s'entrainer :
- créer un cript nommé led_off.sh qui éteindra la LED
- rendre le script exécutable
- tester ce script pour valider sa fonctionnalité
- A cette étape, il peut être intéressant de lister le contenu de notre répertoire courant :
ls -l
Ce qui devrait donner un résultat ressemblant à ça :
total ..
drwxr-xr-x 2 pi pi 4096 avril 8 2019 Desktop
drwxr-xr-x 2 pi pi 4096 avril 8 2019 Documents
drwxr-xr-x 2 pi pi 4096 avril 8 2019 Downloads
-rwxr-xr-x 1 pi pi 107 oct. 23 20:10 led_on.sh
-rwxr-xr-x 1 pi pi 107 oct. 23 20:12 led_off.sh
...
On voit apparaitre les deux scripts créés, avec leurs attributs et leur propriétaire. Les détails concernant ces informations seront donnés ultérieurement.
Un scipt un peu plus élaboré
Script de lecture du Bouton Poussoir (BP)
- Contenu du fichier que l'on pourrait nommer bp.sh :
#!/bin/bash
gpio -g mode 21 out #GPIO-21 sortie vers LED
gpio -g mode 20 in #GPIO-20 entree BP
gpio -g mode 20 up #pull-up resistor
while ((1))
do
etat_bp="$(gpio -g read 20)" #lecture du BP
if [ $etat_bp = 0 ] #si un appui est detecte
then
gpio -g toggle 21 #alors on change l'etat de la LED
sleep .2 #tempo anti-rebond
fi
done
Chaque appui sur le bouton poussoir doit faire changer l'état de la LED (allumée / éteinte)
Note : on remarquera la configuration en entrée du GPIO-20
(par défaut ça devrait déja être le cas mais on ne sait pas ce qu'il s'est passé avant)
ainsi que l'affectation d'une résistance de pull-up interne fixant l'état de GPIO-20 à 1 s'il n'y a pas d'appui sur le bouton poussoir.
- Une fonctionnalité de la bibliothèque gpio permet de simplifier l'écriture du script :
#!/bin/bash
gpio -g mode 21 out #GPIO-21 sortie vers LED
gpio -g mode 20 in #GPIO-20 entree BP
gpio -g mode 20 up #pull-up resistor
while ((1))
do
gpio wfi $bp falling #attente d'un front descendant (BP)
gpio -g toggle 21 #alors on change l'etat de la LED
sleep .2 #tempo anti-rebond
done
On s'arrêtera là pour le moment sur l'utilisation du Terminal pour interagir avec le GPIO.