GPIO-PI

De knowledge
Aller à la navigation Aller à la recherche

Utilisation des GPIO avec Python et libgpiod 2.x

Cette page décrit l'utilisation des GPIO d'un Raspberry Pi sous Debian 13 / Raspberry Pi OS avec la bibliothèque libgpiod 2.x.

Prérequis

Vérifier la version installée :

python3 -c "import gpiod; print(gpiod.__version__)"

Exemple :

2.2.0

Les exemples de cette page sont compatibles avec libgpiod 2.x.

GPIO utilisés

GPIO BCM Usage
20 Relais 1
21 Relais 2

Déclaration des GPIO

import gpiod

req = gpiod.request_lines(
    "/dev/gpiochip0",
    consumer="relays",
    config={
        20: gpiod.LineSettings(
            direction=gpiod.line.Direction.OUTPUT
        ),
        21: gpiod.LineSettings(
            direction=gpiod.line.Direction.OUTPUT
        ),
    }
)

Activation d'un relais

Activation du relais connecté au GPIO20 :

req.set_value(20, gpiod.line.Value.ACTIVE)

Activation du relais connecté au GPIO21 :

req.set_value(21, gpiod.line.Value.ACTIVE)

Désactivation d'un relais

Désactivation du relais connecté au GPIO20 :

req.set_value(20, gpiod.line.Value.INACTIVE)

Désactivation du relais connecté au GPIO21 :

req.set_value(21, gpiod.line.Value.INACTIVE)

Programme complet

#!/usr/bin/env python3

import gpiod
import time

with gpiod.request_lines(
    "/dev/gpiochip0",
    consumer="relays",
    config={
        20: gpiod.LineSettings(
            direction=gpiod.line.Direction.OUTPUT
        ),
        21: gpiod.LineSettings(
            direction=gpiod.line.Direction.OUTPUT
        ),
    }
) as req:

    # activation des deux relais
    req.set_value(20, gpiod.line.Value.ACTIVE)
    req.set_value(21, gpiod.line.Value.ACTIVE)

    time.sleep(5)

    # arrêt des deux relais
    req.set_value(20, gpiod.line.Value.INACTIVE)
    req.set_value(21, gpiod.line.Value.INACTIVE)

Fonction utilitaire

def relay(req, gpio, state):
    req.set_value(
        gpio,
        gpiod.line.Value.ACTIVE
        if state
        else gpiod.line.Value.INACTIVE
    )

Utilisation :

relay(req, 20, True)   # ON
relay(req, 20, False)  # OFF

relay(req, 21, True)   # ON
relay(req, 21, False)  # OFF