Forum Linux.général Mise en oeuvre d'une matrice 4x4

Posté par  . Licence CC By‑SA.
3
22
août
2023

Bonjour à tous,

Avez-vous déjà mis en œuvre ce type de projet ?

J'ai suivi ce tuto pour mettre en œuvre une sécurité à code.

https://raspberrypi-tutorials.fr/connecter-un-clavier-raspberry-pi-code-lock/

J'ai donc acheté une :
-raspberry pi W V1.1
-matrice 4x4
-nape de fils

Lien d'achat pour la matrice 4x4.
https://www.amazon.fr/AZDelivery-Matrix-Clavier-Arduino-compris/dp/B08B3JR8W9/ref=sr_1_16

Après avoir installé l'OS, j'ai choisi 8 pins disponible du connecteur J8 du raspberry pi W V1.1.

Voici le schématique.
https://datasheets.raspberrypi.com/rpizero/raspberry-pi-zero-w-reduced-schematics.pdf

Dans le code pour l'identification des chiffres/lettres, j'ai donc modifié.

ROW = [31, 33, 35, 37] // ce sont les N° de PIN pas N° de GPIO
COLUMN = [32, 38, 36, 40] // ce sont les N° de PIN pas N° de GPIO

Ensuite, j'ai executé le code principale mais je n'obtiens pas le résultat attendu en python3.

Le code ci-dessous est en python2.7 ou python3 ?

Auriez-vous des pistes ou déjà essayé ce tuto ?

Merci d'avance.

import time
import RPi.GPIO as GPIO
from keypad import keypad

GPIO.setwarnings(False)

if __name__ == '__main__':
    # Initialize
    kp = keypad(columnCount = 4)

# waiting for a keypress
digit = None
while digit == None:
    digit = kp.getKey()
# Print result
print digit
time.sleep(0.5)

###### 4 Digit wait ######
seq = []
for i in range(4):
    digit = None
    while digit == None:
        digit = kp.getKey()
    seq.append(digit)
    time.sleep(0.4)

# Check digit code
print(seq)
if seq == [1, 2, 3, '#']:
    print "Code accepted"
  • # Quelques éléments de réponse...

    Posté par  (Mastodon) . Évalué à 5.

    Le code ci-dessous est en python2.7 ou python3 ?

    Vu la syntaxe du print ce serait plutôt du 2.7.

    Auriez-vous des pistes ?

    Il faudrait que tu expliques un peu plus ce que tu observes quand tu lances le script, parce que "je n'obtiens pas le résultat attendu en python3" c'est très vague.

    Il faut que tu coupes dans des petits objectifs simples comme :
    - lire une touche (là on vérifie déjà qu'on a les bonnes bibliothèques Python, bonnes version, et que en gros ça va marcher un jour)
    - lire la bonne valeur (et là on vérifie si la filasse est bien câblée, le tableau de GPIO bien paramétré etc.)

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: Quelques éléments de réponse...

      Posté par  . Évalué à 1.

      Finalement je suis partie sur ce projet.

      Il prend en compte une matrice 4x4.

      https://peppe8o.com/connect-raspberry-pi-with-matrix-keypad-to-get-user-codes-input/
      https://peppe8o.com/download/python/4x4MatrixKeypad.py

      Maintenant je voulais récupérer le token renvoyé d'une commande linux.

      os.system('rm cookies.txt')
      arch = subprocess.check_output("curl -XPOST -c cookies.txt -d ...........")
      print (arch)
      

      Voici la sortie du print.

      {"access_token":"eyJ0eXAI1NiJ9.eyJpc3Mic3MifQ.DDY71FpHgQ","access_token_expires":7200,"refresh_token":"eyJ0eXiJ9.eyVkz__N9kliGO4Q","refresh_token_expires":86400,"credentials":"auth=d}

      Je voulais récupérer le résultat d'un split via le caractère ".

      token_tmp = arch.split('"')
      

      L'erreur retournée est la suivante, mais comment déclarer un objet type bytes ?

      TypeError: a bytes-like object is required, not 'str'
      

      Ensuite, l'idée est juste de récupérer l'access token.

      token_auth = token_tmp[2]
      print (token_tmp[2])
      

      Merci pour vos retours.

      • [^] # Re: Quelques éléments de réponse...

        Posté par  (Mastodon) . Évalué à 3.

        Tu peux comprendre ton erreur (et la corriger) ici par exemple.

        Mais sinon non, tu as une string qui contient du JSON, le mieux c'est de dire à python d'utiliser directement le JSON.

        Ainsi tu accéderas à token_tmp["access_token"] ou token_tmp["access_token_expire"] qui est autrement plus classe.

        En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

        • [^] # Re: Quelques éléments de réponse...

          Posté par  . Évalué à 1.

          Ainsi tu accéderas à token_tmp["access_token"] ou token_tmp["access_token_expire"] qui est autrement plus classe.

          Il suffit de cette ligne pour récupérer la valeur de "access_token" ?

          token_tmp["access_token"]
          
          • [^] # Re: Quelques éléments de réponse...

            Posté par  (Mastodon) . Évalué à 3.

            Eh oh, tu peux aussi chercher, essayer, te tromper… Au boulot !!!

            En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

            • [^] # Re: Quelques éléments de réponse...

              Posté par  . Évalué à 1.

              Le token maintenant isolé, j'aimerais ajouter le token en question dans une chaine de caractère.

              Le tout à envoyer dans une commande linux.

              Est-ce que le code suivant partant d'une string (str) serait correct ?

              path_begin = 'curl -XPOST http://domain/api/monitors/5.json?token='
              path_token = token_auth
              path_argu = ' -d '
              path_end = 'Monitor[Function]=Modect&Monitor[Enabled]=1'
              path_total = path_begin + path_token + path_argu + path_end
              print (path_total)
              
              os.system(path_total)
              

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.