Raspberry PI (Niveau 1) - GPIO en C

structure 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.

Quelques informations et rappels avant de commencer

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.

ssh_connect 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 :

gpio -v
Cela nous donne différentes informations sur la versions de la bibliothèque présente mais également sur le RASPBERRY lui-même.

C'est cette même bibliothèque qui nous permet de taper :
gpio readall
nous donnant une vision globale du port GPIO.

Nous utiliserons le compitateur gcc pour compiler notre code.


Premier programme : allumage de la LED sur le GPIO 21 (numérotation BCM)


Un programme plus élaboré : clignotement de la LED


Lecture du bouton poussoir

Le code ci-dessous permet de lire l'état du bouton poussoir et d'allumer et éteindre la LED à chaque appui. Il est également un brin plus structuré avec notemment en début de programme la définition des numéros de broches de connexion de la DEL et du bouton poussoir, ce qui le rend plus facilement transposable.
#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;
}

previous next