|
![]() |
Interactions électroniques | Le GPIO | GPIO en mode Terminal | GPIO en C | GPIO en PYTHON | WEB |
---|
Si l'on recherche l'efficacité le langage C nous donnera certainement satisfaction.
Le code que l'on produit est compilé (traduit en langage machine) et constitue ensuite un réel programme exécutable, autonome.
Il faut toutefois garder à l'esprit que la plateforme RASPBERRY ne permettra pas de faire tourner des applications temps réel.
L'OS gére l'exécution des différentes tâches et affecte des priorités. De réelles latences peuvent apparaitre.
Pour des applications temps réel on se tournera plutôt vers la plateforme ARDUINO.
Il existe plusieurs manières d'aborder la programmation en C. Un environnement de développement (IDE) nommé Geany est préinstallé dans RASPBIAN desktop mais nous ne l'utiliserons pas dans notre première approche. Cela permettra peut-être de mieux voir apparaitre les étapes nécessaires.
De plus, nous ne travaillons pas directement sur le RASPBERRY.
Celui-ci est connecté au réseau, configuré en IP fixe,
et nous intervenons à distance à l'aide d'un PC.
On pourrait utiliser le bureau à distance
(RDP) que nous avons installé mais on préfère travailler sur un terminal en
connexion SSH moins gourmand en ressource.
Nous utiliserons l'éditeur de texte nano pour écrire le programme.
Nous sommes désormais habitués à cet environnement.
Nous allons exploiter la bibliothèque wiringPi écrite en C pour les microcontrôleurs BCM2835,
BCM2836 et BCM2837 utilisés sur les différentes versions de RASPBERRY.
Elle doit être déjà présente par défaut sur RASPBIAN. On peut le vérifier en tapant :
Nous utiliserons le compitateur gcc pour compiler notre code.
//** Appel de la bibliotheque wiringPi ** #include <wiringPi.h> int main() { wiringPiSetupGpio(); //initialisation GPIO avec numerotation BCM pinMode(21,OUTPUT); //broche BCM 21 configuree en sortie digitalWrite(21,HIGH); //broche 21 au niveau logique 1 return 0; }
-rwxr-xr-x 1 pi pi 8300 nov. 7 16:07 led_on -rw-r--r-- 1 pi pi 273 nov. 7 16:06 led_on.c
#include <stdio.h> #include <wiringPi.h> int main() { wiringPiSetupGpio(); //initialisation GPIO avec numerotation BCM pinMode(21,OUTPUT); //broche BCM 21 configuree en sortie printf("Blink on BCM 21. Ctrl C pour stopper le prog.\n"); while (1) { // boucle infinie digitalWrite(21,HIGH); //on allume la LED delay(100); //tempo 100ms digitalWrite(21,LOW); //on etteind la LED delay(900); //tempo 900ms } return 0; }
#include <stdio.h> #include <&wiringPi.h> #define LED 21 #define BP 20 int main() { wiringPiSetupGpio(); //initialisation GPIO avec numerotation BCM pinMode(LED,OUTPUT); pinMode(BP,INPUT); pullUpDnControl(BP,PUD_UP); printf("Appuyer sur BP. Ctrl C pour stopper le prog.\n"); while (1) { if (digitalRead(BP)==0) { digitalWrite(LED,! digitalRead(LED)); delay(200); printf("etat DEL : %d\n",digitalRead(LED)); } } return 0; }