Aller au contenu

Module Lua gpio

Le module gpio permet de lire et écrire des broches GPIO (General Purpose Input/Output) via l'agent. Il utilise la bibliothèque Periph.io pour l'accès matériel.

Import

Pour importer le module :

local gpio = require("gpio")

Configuration YAML

Le module gpio nécessite une configuration spécifique pour fonctionner. Cette configuration est définie dans le fichier de configuration de l'agent.

iot:
  modules:
    gpio:
      - name: gpio1           # nom unique de l'instance
        pins:                 # liste de broches BCM à gérer
          - 17
          - 18
          - 27

Détails de la configuration

  • name (string, requis) : Nom unique de l'instance (ex. "gpio1").
  • pins (table[integer], requis) : Liste des numéros de broches au format BCM (ex. [17, 18, 27]).

Si pins est vide ou absent, une erreur de configuration sera loggée et le module ne fonctionnera pas.

Initialisation

Lors du chargement de la configuration, le module :

  1. Désérialise le YAML dans la structure Go.
  2. Vérifie que len(Pins) > 0, sinon log d'erreur.
  3. Initialise l'hôte Periph.io avec host.Init().
  4. Pour chaque numéro dans Pins :
  5. Cherche le pin par nom "GPIO<NUM>".
  6. Le configure en entrée (PullNoChange, NoEdge).
  7. Stocke l'objet gpio.PinIO dans la map interne.

API Lua

Liste des fonctions

Fonction Signature Lua Rôle Retour (succès) Retour (échec)
read bool, err = gpio.read(pin) Lit l'état d'une broche GPIO. bool, nil nil, "msg"
write bool, err = gpio.write(pin, value[, delayMs]) Écrit sur une broche GPIO. true, nil nil, "msg"
Champs gpio.name, gpio.type Métadonnées du module.

gpio.read(pin)

Lit l'état logique d'une broche configurée.

  • Paramètres :
  • pin (integer) : Numéro BCM de la broche à lire.

  • Retour :

  • En cas de succès : true (HIGH) ou false (LOW), nil.
  • En cas d'erreur : nil, message d'erreur (broche non configurée, etc.).
local gpio = require("gpio")

local state, err = gpio.read(17)
if err then
    print("Erreur : " .. err)
elseif state then
    print("GPIO17 est HIGH")
else
    print("GPIO17 est LOW")
end

gpio.write(pin, value[, delayMs])

Écrit un niveau logique sur une broche configurée, avec option de temporisation.

  • Paramètres :
  • pin (integer) : Numéro BCM de la broche à écrire.
  • value (boolean) : true pour HIGH, false pour LOW.
  • delayMs (integer, optionnel) : Délai en millisecondes avant de réappliquer la valeur (utile pour les pulses).

  • Retour :

  • En cas de succès : true, nil.
  • En cas d'erreur : nil, message d'erreur.
local gpio = require("gpio")

-- Mettre la broche 18 à HIGH
local ok, err = gpio.write(18, true)
if not ok then
    print("Erreur : " .. err)
end

-- Pulse : HIGH pendant 500 ms puis LOW
gpio.write(18, true, 500)
gpio.write(18, false)

Exemple complet

local gpio = require("gpio")

-- Lire l'état d'un bouton sur GPIO17
local buttonState, err = gpio.read(17)
if err then
    print("Erreur lecture GPIO : " .. err)
    return
end

-- Allumer une LED sur GPIO18 si le bouton est appuyé
if buttonState then
    gpio.write(18, true)
    print("LED allumée")
else
    gpio.write(18, false)
    print("LED éteinte")
end

Champs Lua associés

  • gpio.name : Retourne le nom de l'instance du module.
  • gpio.type : Retourne le type du module ("gpio").