Robotzeus
Posts: 4
Joined: Mon Jun 19, 2017 3:12 pm

Gpio en bash

Mon Jun 19, 2017 3:26 pm

Bonjour.
Après de multiples esais non concluant je vien vous demander de l aide.

Je cherche à faire un script bash qui commande le gpio de ma rasberry pi 3.

Pour le moment je arrive à faire clignoter une LED mais impossible de faire la lecture d une des entrée.

Est-ce que quelqu'un a une idée pour y arriver ?

User avatar
icare
Posts: 99
Joined: Mon Mar 14, 2016 6:31 pm
Location: Saint-Avold - France

Re: Gpio en bash

Mon Jun 19, 2017 9:16 pm

2B or !2B = FF

nikotinux
Posts: 562
Joined: Sat Feb 02, 2013 2:11 am

Re: Gpio en bash

Mon Jun 19, 2017 9:21 pm

cat /sys/class/gpio/gpioX/value

jelopo
Posts: 1111
Joined: Wed Oct 17, 2012 7:53 pm

Re: Gpio en bash

Mon Jun 19, 2017 9:25 pm

Bonjour,

aussi, j'aime bien cette page http://elinux.org/RPi_GPIO_Code_Samples

A+

JumpZero
Posts: 809
Joined: Thu Mar 28, 2013 7:35 pm
Location: 127.0.0.1

Re: Gpio en bash

Tue Jun 20, 2017 7:32 am

jelopo wrote:Bonjour,

aussi, j'aime bien cette page http://elinux.org/RPi_GPIO_Code_Samples

A+
Excellent cette page, je ne connaissais pas.
C'est vrai que elinux.org est très complet pour le Raspberry Pi
Merci
--
Jmp0

totoharibo
Posts: 3145
Joined: Thu Jan 24, 2013 8:43 am

Re: Gpio en bash

Tue Jun 20, 2017 9:15 am

si tu utilises un inter entre masse et GPIO configures ton entrée GPIO avec up : cela donnera un pullup et évitera les problèmes d'acquisition.

Robotzeus
Posts: 4
Joined: Mon Jun 19, 2017 3:12 pm

Re: Gpio en bash

Tue Jun 27, 2017 2:03 pm

Bonjour
je ne sais pas pourquoi mais j'ai un permission non accordé lorsque je met

Code: Select all

lecture1= cat /sys/class/gpio/gpio20/value
mon code est le suivant
vu qu'il est sur clée usb j'utilise
sudo bash /media/..../fichier.sh pour le démarrer (sudo -s ne fonctionne pas mieux)

Code: Select all

#!/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

totoharibo
Posts: 3145
Joined: Thu Jan 24, 2013 8:43 am

Re: Gpio en bash

Tue Jun 27, 2017 2:32 pm

je ne veux pas être trouble-fête mais la librairie Wiringpi est dans la distrib.
man gpio pour voir la commande, pas besoin d'être en root.
Le pire c'est que cela fonctionne :-)

et si tu formattes ta clé en ext4, tu peux mettre l'utilisateur/groupe à pi:pi avec des droits d'exécution pour ton fichier.
Si je ne me trompe : ça devrait pas être loin de fonctionner en direct (pas tout regardé).

Robotzeus
Posts: 4
Joined: Mon Jun 19, 2017 3:12 pm

Re: Gpio en bash

Tue Jun 27, 2017 3:54 pm

Oui c'est pas loin tout ce qui manque c est faire un catalogue qui fonctionne. ... mais encore faut-il tu il que je comprenne pourquoi ça ne fonctionne pas.
J'ai pas encore explorer wigpiopi ni le faite de rapatrier le fichier sur la raspberry pi
Mais si sa fonctionne ça ne me permettra pas de comprendre pourquoi la ca ne marche pas

Robotzeus
Posts: 4
Joined: Mon Jun 19, 2017 3:12 pm

Re: Gpio en bash

Wed Jun 28, 2017 8:35 am

Bonjour,

j'ai fini par trouver

Code: Select all

lecture1=cat /sys/class/gpio/gpio21/value
pas correct

Code: Select all

lecture1='cat /sys/class/gpio/gpio21/value'
pas correct

Code: Select all

lecture1=`cat /sys/class/gpio/gpio21/value`
correct

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

Cordialement

totoharibo
Posts: 3145
Joined: Thu Jan 24, 2013 8:43 am

Re: Gpio en bash

Wed Jun 28, 2017 9:25 am

équivalent mais plus clair pour moi :
toto=$(ta commande)

Return to “Français”

Who is online

Users browsing this forum: No registered users and 10 guests