Formations à l'informatique et à l'électronique

Auteur : SD
Créé le : 20-12-2025

Raspberry Pi - Premiers pas avec pigpio

Sur Raspberry Pi, la gestion des entrées/sorties (GPIO) est souvent le premier point de contact avec le monde matériel. Parmi les nombreuses solutions disponibles, pigpio et son démon pigpiod se distinguent par leur précision, leur stabilité et leur polyvalence.

Cet article propose une prise en main progressive de pigpiod, en commençant par des opérations simples de lecture et d’écriture sur les GPIO, avant d’aborder l’utilisation du port série et du bus I²C, afin de fournir une base solide pour des projets matériels fiables et évolutifs.

Sommaire

pigpio et pigpiod : principes de fonctionnement

Avantages du démon

Installation et démarrage de pigpiod

Installation

sudo apt-get update
sudo apt-get install pigpiod pigpio-tools libpigpio-dev

Démarrage automatique au boot

sudo systemctl enable pigpiod
sudo systemctl start pigpiod

Vérification

systemctl status pigpiod

Attention aux différentes APIs pigpio

Pigpio fournit plusieurs interfaces C aux signatures proches mais incompatibles :

Test : le traditionnel BLINK

Câblage de la LED sur le Raspberry Pi

pigpio Blink LED Raspberry Pi langage C

Remarques sur le câblage

Code en langage C

#include <stdio.h>
#include <pigpiod_if2.h>

#define LED_GPIO 20   // GPIO20 (BCM)

int main(void)
{
    int pi;

    // Connexion au démon pigpiod
    pi = pigpio_start(NULL, NULL);
    if (pi < 0) {
        printf("Erreur : impossible de se connecter à pigpiod\n");
        return 1;
    }

    // Configuration GPIO "LED_GPIO" en sortie
    set_mode(pi, LED_GPIO, PI_OUTPUT);

    printf("Blink pigpiod sur GPIO %d\n", LED_GPIO);

    for (int i = 0 ; i < 10 ; i++) {
        gpio_write(pi, LED_GPIO, 1);   // LED ON
        time_sleep(0.5);
        gpio_write(pi, LED_GPIO, 0);   // LED OFF
        time_sleep(0.5);
    }

    // Fermeture de la connexion
    pigpio_stop(pi);
    return 0;
}

Important : La variable "pi" représente la connexion au démon. Elle doit être passée en paramètre à toutes les fonctions de l’API.

Compilation et lancement

gcc blink.c -o blink -lpigpiod_if2 -lrt -pthread
./blink

Attention à bien mettre "lpigpiod_if2" et non pas "lpigpiod_if".

Lecture d’un GPIO (bouton poussoir)

Câblage du bouton et de la LED sur le Raspberry Pi

pigpio Bouton + LED Raspberry Pi langage C

Remarques sur le câblage

Code en langage C

Exemple : lecture d’un bouton sur GPIO 26

#include <stdio.h>
#include <pigpiod_if2.h>

#define BUTTON_GPIO 26
#define LED_GPIO 20

int main(void)
{
    // Connexion au démon pigpiod
    int pi = pigpio_start(NULL, NULL);
    if (pi < 0) return 1;

    // Configuration GPIO "BUTTON_GPIO" en entrée
    set_mode(pi, BUTTON_GPIO, PI_INPUT);


    // Configuration GPIO "LED_GPIO" en sortie
    set_mode(pi, LED_GPIO, PI_OUTPUT);
    // Configure une résistance de pullup interne au Raspberry PI
    // Inutile si vous avez une résistance de pullup externe
    set_pull_up_down(pi, BUTTON_GPIO, PI_PUD_UP);

    printf("Lecture état  GPIO %d et recopie sur GPIO %d\n", BUTTON_GPIO, LED_G>

    while (1) {
        // Lecture bouton
        int level = gpio_read(pi, BUTTON_GPIO);

        // Recopie sur LED et affichage
        gpio_write(pi, LED_GPIO, level);
        printf("Bouton : %d\n", level);

        time_sleep(0.2);
    }

    // Fermeture de la connexion
    pigpio_stop(pi);

    return 0;
}

Compilation et lancement

gcc lecture_gpio.c -o lecture_gpio -lpigpiod_if2 -lrt -pthread
./lecture_gpio

PWM précis (LED ou moteur)

Pigpio permet de générer des signaux PWM matériels très précis, idéal pour contrôler :

Dans cet exemple nous utiliserons une LED. Le câblage est identique aux précédents : la LED est connecté sur la GPIO 20.

Code en langage C

#include <stdio.h>
#include <pigpiod_if2.h>

#define LED 20

int main(void)
{
    // Connexion au démon pigpiod
    int pi = pigpio_start(NULL, NULL);
    if (pi < 0)
    {
        printf("Erreur : impossible de se connecter à pigpiod\n");
        return 1;
    }

    // Configuration GPIO "LED" en sortie
    set_mode(pi, LED, PI_OUTPUT);

    // Augmentation progressive de l'intensité dans la LED
    for (int duty = 0 ; duty <= 255 ; duty++) {
        set_PWM_dutycycle(pi, LED, duty); // Valeur 0-255
        time_sleep(0.02);
    }

    // Ralentir et éteindre
    for (int duty = 255; duty >= 0; duty--) {
        set_PWM_dutycycle(pi, LED, duty);
        time_sleep(0.02);
    }
    set_PWM_dutycycle(pi, LED, 0);

    // Fermeture de la connexion
    pigpio_stop(pi);

    return 0;
}

Remarque : la PWM matériel fonctionne mieux sur certains GPIO (12, 13, 18, 19 sur Raspberry Pi).


Vous avez apprécié cet article ? Partagez le !