Python conflit entre GPIO.BOARD et GPIO.BCM

Bonjour,
j’écris un programme en Python nécessitant les 2 import pirc522 (pour un module rfid) et gpiozero(pour un bouton) or le module rfid a besoin de GPIO.BOARD pour fonctionner et pour le bouton GPIO.BOARD ne marche pas. Suivant que je mette GPIO.BOARD ou GPIO.BCM l’erreur est différente:
-Quand je met GPIO.BCM et que je lance, le programme me répond: "Traceback (most recent call last):
File « /home/pi/electronic/button.py », line 20, in
rc522 = RFID()
File « /usr/local/lib/python3.7/dist-packages/pirc522/rfid.py », line 50, in init
GPIO.setmode(pin_mode)
ValueError: A different mode has already been set!

"
-Quand je met GPIO.BOARD et que je lance, le programme répond:"/usr/lib/python3/dist-packages/gpiozero/devices.py:279: PinFactoryFallback: Falling back from rpigpio: A different mode has already been set!
‹ Falling back from %s: %s › % (name, str(e))))
/usr/lib/python3/dist-packages/gpiozero/devices.py:279: PinFactoryFallback: Falling back from rpio: No module named ‹ RPIO ›
‹ Falling back from %s: %s › % (name, str(e))))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Can’t connect to pigpio at localhost(8888)

Did you start the pigpio daemon? E.g. sudo pigpiod

Did you specify the correct Pi host/port in the environment
variables PIGPIO_ADDR/PIGPIO_PORT?
E.g. export PIGPIO_ADDR=soft, export PIGPIO_PORT=8888

Did you specify the correct Pi host/port in the
pigpio.pi() function? E.g. pigpio.pi(‹ soft ›, 8888)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
/usr/lib/python3/dist-packages/gpiozero/devices.py:279: PinFactoryFallback: Falling back from pigpio: failed to connect to localhost:8888
‹ Falling back from %s: %s › % (name, str(e))))"

Je ne suis pas sur à 100% que le proclème vienne de GPIO.BOARD mais si vous pourriez m’aider à résoudre ça se serait cool!

hello,

si j’ai bien compris ton problème la solution serait : ne pas utiliser gpiozero
pour tester ton bouton tu peux utiliser :

import RPi.GPIO as GPIO    // il doit exister déja ds le prog pour pirc522
// gestion du bouton
while True: 
   if GPIO.input(16) == GPIO.HIGH: // 16 en  numérotation Board
      print("Button was pushed!")
      time.sleep(1)
  else:
     print("Button was not pushed!")
      time.sleep(1)

avec un break dans la boucle while quand tu veux en sortir

Salut,
Cette alternative me paraît fonctionner sur mon programme or quand je le lance avec le bouton appuyé il recopie le même texte même si on le change d’état: il reste comme au début de programme. J’aimerais que mon programme puisse détecter les changement du bouton. Avec gpiozero cela marchait bien ormis le problème de la compatibilité avec pirc522. J’ai aussi vu qu’i était possible de modifier le fichier obligeant pirc522 à se mettre en gpio.board mais j’ai peur qu’en mettant gpio.bcm ici le fichier ne marche plus car c’est aussi un fichier python qui contrôle cette option.
Merci quand même de ta réponse, si tu pouvais m’aidez sur ce point je t’en serais reconnaissant.

peut être un problème d’initialisation du pin du button … en rajoutant avant le while :

GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

sans ça il y a un problème de flottement du signal … ce que j’en comprend c’est qu’on rajoute avec cette commande une résistance sur le pin pour stabiliser l’entrée.

Bonjour,

Effectivement @bof a raison, pour forcer l’état d’un port GPIO en niveau haut ou bas, il faut ajouter une résistance de pull_up ou de pulldown. Soit on ajoute une résistance physique (de 10k à 100k en général), soit un active une résistance logique dans la commande de définition des ports.
Voici un peu de lecture pour compléter:

A+