Aller au contenu

Module gpio

Le module gpio permet de lire et écrire des broches GPIO depuis Lua via l’agent Alemca, en s’appuyant sur la bibliothèque Periph.io.

Pour l’importer en Lua, utilisez :

local gpio = require("gpio")

Configuration

Ce module est automatiquement chargé lors du démarrage de l’agent et n’exige pas d’inclusion explicite dans la section plugins. Vous pouvez cependant spécifier les broches à initialiser :

modules:
  gpio:
    - name: gpio1          # Nom logique de l’instance
      pins:                # Liste de broches BCM à gérer
        - 17
        - 18
        - 27
  • name (string, requis) : Nom de l’instance (ex. "gpio1").
  • pins (table[int], requis) : 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 de la lecture de la configuration (SetConfig), 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 gpioPins.

Fonctions Lua

gpio.read(pin)bool | nil, err

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

  • Paramètre :

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

  • Retour :

  • true si la broche est à l’état haut (High), false si bas (Low).

  • nil, "<message d’erreur>" si la broche n’est pas configurée ou en cas d’échec.
local gpio = require("gpio")

-- Lire l’état de la broche 17
local state, err = gpio.read(17)
assert(not err, err)
if state then
  print("GPIO17 est HIGH")
else
  print("GPIO17 est LOW")
end

gpio.write(pin, value[, delayMs])true | nil, err

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

  • true si l’écriture s’est bien passée.

  • nil, "<message d’erreur>" en cas d’échec ou si broche non configurée.
local gpio = require("gpio")

-- Mettre la broche 18 à HIGH pendant 500 ms, puis à LOW
local ok, err = gpio.write(18, true, 500)
assert(ok, err)
gpio.write(18, false)

Champs Lua associés

  • gpio.name : Nom de l’instance (champ name de la config YAML).
  • gpio.type : Type du module ("gpio").