gpio rapsberry pi bash
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

gpio rapsberry pi bash



  1. #1
    robotzeus1

    gpio rapsberry pi bash


    ------

    Bonjour
    j’essaie d’utiliser le GPIO de ma raspberry PI en bash.
    pour le moment je n'ai pas de souci pour faire clignoter une led mais impossible de trouver pour faire de la lecture
    le code que j'utilise pour faire clignoter est le suivant, j'aimerais par exemple le modifier pour que lorsque le GPIO20= "1" gpio23 soit allumé mais pour l'instant rien de ce que j'ai trouvé ne me permet de lire quoi que ce soit.
    Code:
    #!/bin/bash
    
    echo "23" > /sys/class/gpio/export                  #assigne pin
    echo "out" > /sys/class/gpio/gpio23/direction       #en sortie
    while true;                                         #boucle infinie
      do
        echo "1" > /sys/class/gpio/gpio23/value         #allume led
    #    echo "Led allumée"                              #message IHM
        sleep 1;                                        #attente 1 sec
        echo "0" > /sys/class/gpio/gpio23/value         #éteint led
    #    echo "Led éteinte"                              #message IHM
        sleep 1;                                        #attente 1 sec
      done
    #fin script
    Pouvez vous m’aider à maitriser cette partie?

    -----

  2. #2
    albanxiii
    Modérateur

    Re : gpio rapsberry pi bash

    Bonjour,

    Je tenterai

    Code:
    echo "20" > /sys/class/gpio/export
    echo "in" > /sys/class/gpio/gpio20/direction
    puis un

    Code:
    cat /sys/class/gpio/gpio20/value
    pour lire la valeur.
    Not only is it not right, it's not even wrong!

  3. #3
    Jack
    Modérateur

    Re : gpio rapsberry pi bash

    j’essaie d’utiliser le GPIO de ma raspberry PI en bash
    Ca s'apparente à du masochisme

  4. #4
    sandrecarpe

    Re : gpio rapsberry pi bash

    Salut,
    En installant WiringPi tu peux simplement faire un :
    gpio read [pin]
    ou

    gpio write [pin] [0 ou 1]
    ainsi que gérer le pwm, l'I2C et tout ce que permet les broches du rpi

  5. A voir en vidéo sur Futura
  6. #5
    robotzeus1

    Re : gpio rapsberry pi bash

    Bonjour

    j'ai bien essayer
    Code:
    lecture1= cat /sys/class/gpio/gpio20/value
    mais j'ai en réponse Permision non accordé
    pour info mon fichier est lancer avec
    Code:
    sudo bash /media/..../fichier.sh
    j'ai même fait un sudo -s et des le démarrage je sort si directement $EUID != 0


    Code:
    lecture1= 'cat /sys/class/gpio/gpio20/value'
    ne fait pas d'erreur mais bon ca ne me donne pas la valeur pour autant donc je sèche un peu

    Mon code complet est le suivant, j'ai mis des point d'interogation en commentaire la ou sa ne fonctionne pas
    Code:
    #!/bin/bash
    # GPIO06 br31 Rouge
    # GPIO13 br33 blanc
    # GPIO19 br35 vert
    # GPIO26 br37 noir
    # GPIO12 br32 Rouge
    # GPIO16 br36 Blanc
    # GPIO20 br38 Vert = led
    # GPIO21 br40 Noir = pousoir
    LEDPIN=20                                           #GPIO23
    BPPIN=21
    OFF=0                                               #variable éteindre
    ON=1                                                #variable allumée
    DUREE=1000                                          #demi-période
    ETATLED=0
    ETATBP=0
    echo "$BPPIN" > /sys/class/gpio/export
    echo "in" > /sys/class/gpio/gpio$BPPIN/direction
    echo coucou
    echo coucou2
    #if [ $EUID -ne 0 ]                                  #si $EUID différent de 0
    if [ $EUID != "0" ]                                 #si $EUID différent de 0
    then                                                #alors
        echo "Il faut être root pour exécuter le script. Essaye sudo $0"
        exit                                            #sortie
    fi 
    echo coucou3
    sortie()
    {
    	echo cleanup
    	read coco
    	if [ "$coco" = "x" ]
    	then
    		exit
    	else
    		echo $coco
    		echo toctoc
    	fi
    }
    
    function mTemps()
    {
        ligne=`cat /proc/uptime`                        #lit uptime et idletime
                                                        #valeurs décimales
        mTemps=$(echo "$ligne" | cut -f 1 -d ' ')       #extrait uptime
        mTemps=$(echo "$mTemps*1000" |bc)               #multiplie par 1000 pour
                                                        #avoir des msec
        mTemps=${mTemps%%.*}                            #float to int
        return $mTemps                                  #valeur mTemps
    }
    echo coucou4
    #programme principal
    echo Led clignotante                                #message de début
    echo ctrl-c pour sortir de la boucle                #IHM
    #Setup pin et direction - Cature Control-C SIGHUP SIGKILL
    echo $LEDPIN > /sys/class/gpio/export               #assigne pin 23
    echo out > /sys/class/gpio/gpio$LEDPIN/direction    #pin 23 en sortie
    trap "sortie $LEDPIN" SIGHUP SIGINT SIGTERM        #capture SIGNAL et lance la
                                                        #la procédure cleanup avec
                                                        #le paramètre 23
    mTemps                                              #lecture référence temps
    valeurPrecedente=$mTemps                            #sauve temps msec
    while true                                          #boucle infinie
      do                                                #faire
        mTemps                                          #lecture référence temps
        valeurActuelle=$mTemps                          #sauve temps msec
        let "diff=$valeurActuelle - $valeurPrecedente"  #calcule durée état
        if [ $diff -ge $DUREE ]                         #si temps écoulé >= DUREE
        then                                            #alors
            valeurPrecedente=$valeurActuelle            #init valeur précédente
            if [ $ETATLED -eq $ON ]                     #si led allumée
            then                                        #alors
                echo $OFF > /sys/class/gpio/gpio$LEDPIN/value
                                                        #éteint led
                echo Led éteinte                       #affichage console
                ETATLED=$OFF                            #led éteinte
    	    echo cat /sys/class/gpio/gpio21/value   # affichage du bouton pousoir toutes les secondes ???????????????????????????
                if [ "$ETATBP" != "0" ]
    	    then
    	      echo BP ok
    	      ETATBP=0
    	    fi
            else                                        #sinon
                echo $ON > /sys/class/gpio/gpio$LEDPIN/value
                echo "$ETATBP"                                       #allume led
                echo Led allumée                        #affichage console
                ETATLED=$ON                             #led allumée
            fi
        fi
       lecture1=cat /sys/class/gpio/gpio21/value	# lecture BP ?????  
       etat1=$lecture1
       if [ "$etat1" != "$ETATBP" ]
       then 
    	sleep 0.05
       fi
       lecture2=cat /sys/class/gpio/gpio21/value  #lecture 2 BP ???????
       etat2=$lecture2
       if [ "$etat1" = "$etat2" ]			#partie antie rebond
       then
         ETATBP=$etat2
       fi
    
        #Autres traitements
        #
      done                                              #fin do
    #Fin du script
    PS je n'ai pas vu la solution WiringPI pour le moment mais je vais essayé de voir ca (même si rien est marqué au sujet du bash)

    quelqu'un a t'il une idée de ce qui ne va pas?

  7. #6
    Jack
    Modérateur

    Re : gpio rapsberry pi bash

    A ta place j'abandonnerais le bash. parce que dès que vas vouloir faire autre chose que clignoter une led, ça va se compliquer sévèrement. bash n'est pas fait pour ça.

    Par exemple, visual studio 2017 permet de faire du cross développement sur raspberry. Plus besoin de clavier écran, une connexion ssh suffit. Le programme par défaut à la création d'un nouveau projet est justement le clignotement d'une led dont voici le code:
    Code:
    #include <wiringPi.h>
    
    // LED Pin - wiringPi pin 0 is BCM_GPIO 17.
    // we have to use BCM numbering when initializing with wiringPiSetupSys
    // when choosing a different pin number please use the BCM numbering, also
    // update the Property Pages - Build Events - Remote Post-Build Event command 
    // which uses gpio export for setup for wiringPiSetupSys
    
    #define	LED	17
    
    int main(void)
    {
    	wiringPiSetupSys();
    	pinMode(LED, OUTPUT);
    
    	while (true)
    	{
    		digitalWrite(LED, HIGH);  // On
    		delay(500); // ms
    		digitalWrite(LED, LOW);	  // Off
    		delay(500);
    	}
    	return 0;
    }
    C'est autrement plus simple que bash, non?
    Dernière modification par Jack ; 27/06/2017 à 15h35.

  8. #7
    robotzeus1

    Re : gpio rapsberry pi bash

    J entend bien mais à fonction équivalente le clignotement de LED bash me parait plus simple que ton code en C qui inclut en plus une librairie.
    Après je conçoit qu il puisse avoir debat puisque chacun a un point de vu different. Mais je ne cherche pas le débat mais juste à faire l acquisition en bash qui me semble suffisamment puissant pour mes besoins actuel.

    [hors sujet ] pourquoi avoir mit un exemple typique de ce que il faut éviter alors que dans le dernier exemple en bash il y a une partie clignotement fonctionnelle beaucoup plus correct ? Un programme qui passe sont temps à attendre et sans interruption est loin de ce que j appel etre propre.

  9. #8
    Jack
    Modérateur

    Re : gpio rapsberry pi bash

    bash qui me semble suffisamment puissant pour mes besoins actuel
    Pas facile de faire du debogage (pas a pas, inspection des variables), ce que permet un bon IDE
    pourquoi avoir mit un exemple typique de ce que il faut éviter alors que dans le dernier exemple en bash il y a une partie clignotement fonctionnelle beaucoup plus correct ? Un programme qui passe sont temps à attendre et sans interruption est loin de ce que j appel etre propre.
    S'il n'a rien d'autre à faire, pourquoi pas? Dans le cas contraire, on le mets dans un thread et il se débrouille tout seul.
    En fait ce programme est le "hello world" donné à la création d'un projet. Il ne faut pas en attendre plus.

    Pour ma part, j'aurais bien vu l'envoi d'un événement pour faire changer la led d'état.

    Je te laisse entre les mains des spécialistes de bash.

  10. #9
    robotzeus1

    Re : gpio rapsberry pi bash

    Bonjour,

    j'ai fini par trouver
    Code:
    lecture1=cat /sys/class/gpio/gpio21/value
    pas correct
    Code:
    lecture1='cat /sys/class/gpio/gpio21/value'
    pas correct
    Code:
    lecture1=`cat /sys/class/gpio/gpio21/value`
    correct

    je n'aurai jamais pensé qu'il fallait utilisé ` au lieu de '

    Cordialement

  11. #10
    albanxiii
    Modérateur

    Re : gpio rapsberry pi bash

    J'allais vous demander de regarder simplement la sortie de

    Code:
    cat /sys/class/gpio/gpio21/value
    avant de chercher à l'utiliser dans un script.

    Et oui, il faut faire attention aux "quotes" Les exemples de scripts disponibles sur le net sont souvent une bonne aide quand on a des petits soucis de syntaxe.
    Not only is it not right, it's not even wrong!

  12. #11
    polo974

    Re : gpio rapsberry pi bash

    Citation Envoyé par robotzeus1 Voir le message
    Bonjour,
    ...
    je n'aurai jamais pensé qu'il fallait utilisé ` au lieu de '

    Cordialement
    pourtant tu l'avais dans ton code:
    Code:
        ligne=`cat /proc/uptime`                        #lit uptime et idletime
    sinon, tu peux utiliser la notation suivante:
    Code:
    ligne=$(cat /proc/uptime)
    que perso, je préfère, mais c'est plus une histoire de goût...

    je ne connaissais pas la notation let "d=$a - $b" mais j'utilise d=$((a - b)) pour la même chose...

    bref:
    x=$a pour la variable a (ou ${a}) pour une variable (les {} permettent d'encadrer le nom de la variable ex: broche${num}dugpio)
    y=$(commande de la mort qui tue) pour récupérer la sortie de la commande
    z=$((calcul entier et $ inutiles pour les variables))
    Jusqu'ici tout va bien...

  13. #12
    robotzeus1

    Re : gpio rapsberry pi bash

    vu que j'ai la solution on peut éventuellement débattre sur l'utilité d'abandonné le bash

    Donc si je passe en c je dois utilisé des librairy

    en revanche en bash je peu très bien avoir un programme principal
    Code:
    #!/bin/bash
    source ./frobot.sh
    confpin out 20
    
    while true                                         
      do 
        vpin on 20
        sleep 0.5
        vpin off 20
        sleep 0.5
      done
    avec le fichier frobot.sh suivant (qui fait office de librairie)
    Code:
    #!/bin/bash
    function confpin
    #  confpin configure les pins, $1 = (in ou out) $2 = numero de la pin
    {
    if [ "$1" = "in" ]
    then
    	echo $2 > /sys/class/gpio/export
    	echo "in" > /sys/class/gpio/gpio$2/direction
    fi
    if [ "$1" = "out" ]
    then
    	echo $2 > /sys/class/gpio/export               
    	echo out > /sys/class/gpio/gpio$2/direction
    fi
    }
    function vpin
    #  vpin donne une valeur au pins, $1 = (on ou off) $2 = numero de la pin
    {
    if [ "$1" = "on" ]
    then
        echo "1"> /sys/class/gpio/gpio$2/value
    fi
    if [ "$1" = "off" ]
    then
       echo "0" > /sys/class/gpio/gpio$2/value
    fi
    }
    on peux même encore faire plus simple pour les gamin

    programme 1 qui n'est pas toucher
    Code:
    #!/bin/bash
    source ./frobot.sh
    source ./irobot.sh  # fichier de configuration qui contient confpin out 20
    while true                                         
      do 
    source ./main.sh
     done
    et l'enfant a juste a écrire sont programme main.sh derrière

    Code:
    #!/bin/bash
    allumer lampe
    attendre 1 seconde # paramètre seconde étant optionnel
    eteindre lampe
    attendre 1 seconde
    bien sur ca suppose modifier un peu le fichier de fonction mais c'est surtout pour donné un exemple mais avec ca mon enfant de 5 ans vas pouvoir commencer a programmer son robot et ca reste largement pour simple que le C pour lui (mais ce n'es que mon point de vu)
    Dernière modification par robotzeus1 ; 29/06/2017 à 10h12.

Discussions similaires

  1. Protection GPIO du Raspberry Pi
    Par USMC dans le forum Électronique
    Réponses: 47
    Dernier message: 05/08/2015, 09h47
  2. bash sed et makefile
    Par bbdoll dans le forum Programmation et langages, Algorithmique
    Réponses: 25
    Dernier message: 07/08/2012, 14h36
  3. Variables en bash
    Par Le Génie de la Lampe dans le forum Programmation et langages, Algorithmique
    Réponses: 9
    Dernier message: 12/04/2012, 09h33
  4. Csh et bash
    Par invite70eda27f dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 28/04/2009, 08h00
  5. Probleme arrivée d' eau LV bash
    Par Viki dans le forum Dépannage
    Réponses: 0
    Dernier message: 21/11/2006, 09h33