gpiod-dio-industrial-switch-5.ino

BIOSSTAR BIWCL-PAT : SBC industrielle 3,5" Intel Wildcat Lake · Fichier : gpiod-dio-industrial-switch-5.ino · Langage : c · Usage : Lecture d'un interrupteur industriel et contrôle d'un voyant via le header DIO 8 bits.

Programme C utilisant libgpiod pour lire une entrée numérique et commander une sortie sur le header DIO de la carte.

Matériel : Interrupteur fil entre GND et Pin DIO 1 (Entrée), LED + résistance entre Pin DIO 0 (Sortie) et GND. Le header DIO 8 bits est mappé sur les GPIOs Linux. Compilation : sudo apt install libgpiod-dev && gcc dio_control.c -o dio_control -lgpiod. Exécution : sudo ./dio_control. Note : La numérotation des pins (0/1) peut varier selon le schéma électrique spécifique du BIOS/UEFI de la BIWCL-PAT, vérifiez avec gpioinfo.

gpiod-dio-industrial-switch-5.ino

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <gpiod.h>

#define CHIP_NAME "gpiochip0" /* Vérifier avec 'gpioinfo' sur Ubuntu 24.04 */
#define PIN_OUT 0 /* Sortie pour LED/Relais */
#define PIN_IN 1  /* Entrée pour Bouton Poussoir */

int main() {
    struct gpiod_chip *chip;
    struct gpiod_line *line_out, *line_in;
    int value;

    chip = gpiod_chip_open_by_name(CHIP_NAME);
    if (!chip) { fprintf(stderr, "Impossible d'ouvrir la puce GPIO\n"); return 1; }

    line_out = gpiod_chip_get_line(chip, PIN_OUT);
    line_in = gpiod_chip_get_line(chip, PIN_IN);

    if (gpiod_line_request_output(line_out, "biwcl-demo", 0) < 0) {
        fprintf(stderr, "Erreur config sortie\n"); gpiod_chip_close(chip); return 1;
    }
    if (gpiod_line_request_input(line_in, "biwcl-demo") < 0) {
        fprintf(stderr, "Erreur config entrée\n"); gpiod_chip_close(chip); return 1;
    }

    printf("Surveillance DIO active (Ctrl+C pour quitter)...\n");
    while(1) {
        value = gpiod_line_get_value(line_in);
        if (value == 1) { /* Bouton pressé (circuit ouvert ou fermé selon montage) */
            gpiod_line_set_value(line_out, 1); // Allumer voyant
            printf("Bouton Pressé -> Voyant ON\n");
        } else {
            gpiod_line_set_value(line_out, 0); // Éteindre voyant
        }
        usleep(100000); // Pause 100ms pour éviter le rebond
    }

    gpiod_line_release(line_out);
    gpiod_line_release(line_in);
    gpiod_chip_close(chip);
    return 0;
}

← Retour à la fiche