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.

Déclaration des GPIO

import gpiod

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

la ligne 16 en entrée et les lignes 20 et 21 en sortie.

Utilisation de relais

Une des utilisation est le pilotage de relais. Qui, eux même commanderont, ce que l'on voudra.

Exemple de carte avec deux relais

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 pour les relais.

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