Lancer des applications à l’aide d’un lecteur de carte RFID et de Raspberry Pi

Lancer des applications à l'aide d'un lecteur de carte RFID et de Raspberry Pi

Les humbles clavier et souris sont des formes traditionnelles d’entrée utilisées pour contrôler les ordinateurs. Mais pour ceux d’entre nous trop jeunes, ou ceux qui ont besoin d’un ordinateur adapté à leurs besoins, ces interfaces traditionnelles ne sont pas adaptées et nous devons adapter la façon dont nous proposons une interface à l’utilisateur.

YouTube video

La RFID (identification par radiofréquence) utilise des cartes ou des étiquettes fournies avec une puce et une antenne intégrées qui sont alimentées par un lecteur. Une fois alimentées, ces puces peuvent envoyer des données, sous de nombreuses formes, au lecteur qui peuvent ensuite être utilisées comme une forme d’entrée. En règle générale, une étiquette RFID aura un numéro d’identification et, dans certains cas, l’étiquette peut être écrite et utilisée pour stocker de petites quantités de données, par exemple des liens vers des sites Web et des cartes de visite.

Lancer des applications a laide dun lecteur de carte RFID

Dans ce projet, nous utiliserons un lecteur de carte RFID connecté à notre Raspberry Pi pour lire les détails de la carte et utiliser le numéro d’identification d’une carte pour déclencher l’ouverture d’une application ou une tâche à accomplir.

1616563453 470 Lancer des applications a laide dun lecteur de carte RFID

Pour ce projet, vous aurez besoin

Nous utilisons le kit de cartes intelligentes Monk Makes (20 $ / 15 £) car il contient tout ce dont nous avons besoin pour construire le projet et il est livré avec un excellent livre contenant d’autres projets.

Construire le matériel

1616563453 419 Lancer des applications a laide dun lecteur de carte RFID

Avec le Raspberry Pi éteint, nous devons connecter notre lecteur RFID au GPIO selon ce schéma.

Lancer des applications a laide dun lecteur de carte RFID

Les connexions sont les suivantes

Couleur Lecteur RFID GPIO
rouge 3,3 V 3,3 V
Grise 80 $ 25
Noir GND Tout GND
IRQ Non utilisé Non utilisé
Vert MISO 9
blanc MISO dix
Jaune SCK 11
Orange SDA 8

Une fois les connexions effectuées, nous pouvons maintenant connecter le reste de nos accessoires et mettre le Raspberry Pi sous tension sur le bureau.

Configuration du Raspberry Pi

Lancer des applications a laide dun lecteur de carte RFID

Notre première tâche de configuration logicielle consiste à activer l’interface SPI sur notre Raspberry Pi. Cette interface est utilisée pour permettre à notre lecteur RFID de parler au Pi. Sur le bureau Raspbian, nous devons cliquer sur la Raspberry Pi en haut à gauche de l’écran et ensuite déplacer la souris sur Préférences puis cliquez sur Configuration du Raspberry Pi. Nous cliquons ensuite sur le Interfaces puis activez l’onglet SPI interface, cliquez sur OK et ce serait le moment idéal pour redémarrer le Pi pour vous assurer que l’interface SPI est correctement configurée.

Avec le Pi redémarré et de retour au bureau, nous pouvons maintenant commencer à configurer le logiciel qui alimentera le projet. Pour vous faciliter la tâche, j’ai écrit une petite application d’installation qui peut être téléchargée via le terminal, dont l’icône se trouve en haut à gauche de l’écran.

1616563453 820 Lancer des applications a laide dun lecteur de carte RFID

Dans le terminal, tapez le code suivant pour télécharger.

wget https://raw.githubusercontent.com/lesp/Raspberryme-RFID/master/installer.sh

Cela téléchargera une copie du fichier sur votre Pi. Pour exécuter le fichier, dans le terminal, tapez cette ligne, suivie de la touche Entrée.

bash installer.sh

Le processus d’installation prendra quelques minutes, mais une fois terminé, il vous redonnera le contrôle. Nous pouvons maintenant fermer le terminal et commencer à écrire le code Python pour le projet.

Codage du projet

Lire les balises

Commençons par créer un code qui lira les étiquettes RFID, puis enregistrez l’ID de l’étiquette dans un fichier texte. Ouvrez le Éditeur Python 3 trouvé dans le Programmation menu. Une fois l’application ouverte, cliquez sur Fichier >> Nouveau pour créer un nouveau fichier vierge, enregistrez maintenant immédiatement le fichier Fichier >> Enregistrer comme ID-Reader.py

N’oubliez pas d’épargner souvent!

Nous avons besoin de connaître le numéro d’identification des balises pour que nous puissions vérifier si la balise correcte a été présentée pour exécuter le code correspondant. Le ID-Reader.py code lira la balise puis l’enregistrera dans un fichier texte appelé ID.txt, enregistré au même emplacement que le ID-Reader.py code.

Pour démarrer le code du lecteur, nous importons d’abord trois bibliothèques, la RPi.GPIO bibliothèque pour utiliser le GPIO, SimpleMFRC522 qui est la bibliothèque RFID pour Python, et enfin, nous importons le dormir fonction de la temps bibliothèque. Nous utilisons cela pour contrôler le rythme du code. Ajoutez ce code à votre projet avant de continuer.

import RPi.GPIO as GPIO
import SimpleMFRC522
from time import sleep

Créons maintenant un objet que nous pouvons utiliser dans le code comme référence au lecteur RFID connecté au GPIO. Ajoutez ce code à votre projet avant de continuer.

reader = SimpleMFRC522.SimpleMFRC522()

Pour enregistrer les balises dans un fichier, nous devons dire ID.txt pour créer / ouvrir un fichier appelé ID.txt et définir le fichier afin que nous puissions ajouter, ce qui signifie ajouter des données à la fin du fichier. Ajoutez ce code à votre projet avant de continuer.

file = open("ID.txt", "a")

Maintenant, nous demandons à l’utilisateur de tenir une étiquette au lecteur. Ajoutez ce code à votre projet avant de continuer.

print("Hold a tag near the reader")

Nous passons maintenant au corps principal du code qui s’exécutera en boucle, vérifiant constamment si une balise a été présentée. Nous utilisons un essayez … sauf structure pour gérer le processus et pour fermer proprement l’application une fois que l’utilisateur appuie sur CTRL + C

La première ligne de la structure est essayer et c’est le code qui fonctionnera pour vérifier l’étiquette RFID. À l’intérieur essayer nous utilisons un tandis que Vrai loop pour exécuter en permanence le code contenu dans. Ajoutez ce code à votre projet avant de continuer.

try:
    while True:

Maintenant, le code qui s’exécute à l’intérieur de la boucle commence par créer deux variables, l’ID de l’étiquette RFID et le texte (données) contenu sur l’étiquette. Nous imprimons ensuite les données d’identification dans le shell Python. Nous pouvons éventuellement imprimer le contenu du texte variable en supprimant la # au début de la ligne mais pour ce projet nous n’en avons pas besoin. Ajoutez ce code à votre projet avant de continuer.

       id, text = reader.read()
        print(id)
        #print(text)

Maintenant, pour écrire le numéro d’identification dans le fichier externe, nous devons dire à Python de faire exactement cela, mais aussi de convertir le numéro d’identification en une chaîne, car nous utiliserons un caractère d’échappement n pour créer une nouvelle ligne après que chaque numéro d’identification soit ajouté au fichier. Le code se met alors en veille pendant une seconde, ce qui réduit le risque de lire l’étiquette plusieurs fois. Ajoutez ce code à votre projet avant de continuer.

       file.write(str(id)+"n")
        sleep(1)

C’est tout le code pour le essayer partie de la structure, et maintenant nous passons à la gestion d’un exception, dans ce cas, c’est un Interruption du clavier (CTRL + C) qui peut être utilisé pour quitter l’application. Une fois que l’utilisateur a déclenché cette action, le code imprimera qu’il est en train de nettoyer, puis il nettoiera les broches GPIO, les ramenant à leur état par défaut. Nous fermons enfin le fichier ouvert dans lequel nous avons écrit les balises ID. Ajoutez ce code à votre projet avant de continuer.

except KeyboardInterrupt:
    print("cleaning up")
    GPIO.cleanup()
    file.close()

Enregistrez le code, puis cliquez sur Exécuter >> Exécuter le module pour exécuter le code. Présentez maintenant une étiquette / carte RFID au lecteur et vous verrez l’ID imprimé sur le shell Python, et si vous regardez dans le dossier où vous avez enregistré votre code, il y aura un fichier appelé ID.txt c’est-à-dire se remplir avec les identifiants de balises, pratique pour copier / coller dans notre code à l’étape suivante.

Le projet principal!

Toujours dans l’éditeur Python, créons un nouveau fichier Fichier >> Nouveau puis enregistrez le fichier (Fichier >> Enregistrer) comme RFID-Applications.py

Nous commençons le code en important cinq bibliothèques de code pré-écrit, les trois premières RPi.GPIO, SimpleMFRC522 et heure nous avons couvert dans le projet précédent. Les deux derniers sont sous-processus, utilisé pour permettre à notre code Python de communiquer avec le système de fichiers Linux et d’ouvrir des applications, et navigateur Web qui est utilisé pour ouvrir le navigateur Web par défaut du système.

Ajoutez ce code à votre projet avant de continuer.

import RPi.GPIO as GPIO
import SimpleMFRC522
from time import sleep
import subprocess
import webbrowser

La prochaine section de code est un peu vaine, en ce qu’elle prend une chaîne de texte et plutôt que de vider tout le texte dans un gros vidage, elle imprime le texte caractère par caractère pour émuler un terminal old-school. Pas vraiment nécessaire, mais cool. La fonction est appelée slow_type et il prend un paramètre, qui est le message (texte) que vous souhaitez qu’il tape. Celui-ci est ensuite imprimé caractère par caractère par un pour boucle ça va répéter sur chaque caractère de la chaîne, avec un intervalle de 0,01 seconde entre chaque impression. Lorsque tous les caractères ont été imprimés, nous sortons de la boucle for et demandons à Python d’imprimer un caractère d’échappement pour créer une ligne vierge prête pour la prochaine utilisation.

Ajoutez ce code à votre projet avant de continuer.

def slow_type(message):
    for character in message:
        print(character, end="")
        sleep(0.01)
    print("n")

Nous créons ensuite un objet qui servira de référence au lecteur RFID. Ajoutez ce code à votre projet avant de continuer.

reader = SimpleMFRC522.SimpleMFRC522()

Ensuite, nous appelons le slow_type fonction pour imprimer une chaîne de texte, dans ce cas quelque chose qui ressemble à un démarrage de l’outil, notez qu’il y a des n nouveaux caractères d’échappement de ligne où je voudrais que la chaîne se brise et crée une nouvelle ligne pour la rendre plus facile à lire. Ajoutez ce code à votre projet avant de continuer.

slow_type("Raspberryme RFID User Interface V1.0n********************nHold a tag near the reader to start an applicationn")

Passons à autre chose et nous réutilisons la même chose essayez..sauf structure que nous avons précédemment créée pour créer une boucle qui vérifiera constamment les étiquettes RFID toutes les 0,1 secondes. Nous pouvons également imprimer toutes les balises sur le shell Python, mais dans ce cas, j’ai commenté l’option en utilisant un #

Ajoutez ce code à votre projet avant de continuer.

try:
    while True:
        id, text = reader.read()
        #print(id)
        sleep(0.1)

À l’intérieur de la boucle, nous avons trois tests conditionnels, ceux-ci sont identifiés par if..elif..elif et ils fonctionnent en comparant l’ID d’étiquette RFID présenté à la valeur codée en dur. Dans ce cas, notre si condition a une valeur de 629717360455 et si la valeur de notre étiquette RFID correspond à cette valeur, alors le si la condition est prouvée Vrai et le code contenu dans est exécuté. Donc, cela appellera le slow_type et tapez lentement du texte dans le shell Python. Ensuite, il utilisera sous-processus pour appeler l’application Libreoffice. Ensuite, le code dort pendant 0,2 seconde pour réduire l’ouverture répétée de Libreoffice.

Ajoutez ce code à votre projet avant de continuer. N’oubliez pas de remplacer le numéro de l’étiquette RFID par celui que vous possédez!

if id == 629717360455:
            slow_type("Create documents with Libreoffice")
            subprocess.call(["libreoffice"])
            sleep(0.2)

Maintenant, si le précédent si la condition était Faux puis la condition suivante elif est testé. Si c’est Vrai, puis il tape lentement un message à l’utilisateur avant d’ouvrir une nouvelle session de navigateur Web, directement sur le site Web d’Raspberryme. Le code se met alors à nouveau en veille pendant 0,2 seconde.

Ajoutez ce code à votre projet avant de continuer. N’oubliez pas de remplacer le numéro de l’étiquette RFID par celui que vous possédez!

       elif id == 572050203913:
            slow_type("Opening web browser")
            webbrowser.open_new("https://www.raspberryme.com/")
            sleep(0.2)

Donc, si cette condition était Faux, nous devons maintenant vérifier si cette finale elif est correct. Et si c’est le cas, il tapera lentement un message dans le shell Python, puis en utilisant le sous-processus bibliothèque, il appellera le lxtask application du gestionnaire de tâches, avant de dormir pendant 0,2 seconde.

Ajoutez ce code à votre projet avant de continuer. N’oubliez pas de remplacer le numéro de l’étiquette RFID par celui que vous possédez!

       elif id == 866687919239:
            slow_type("Opening Task Manager")
            subprocess.call(["lxtask"])
            sleep(0.2)

Nous sortons maintenant de la essayer partie de la structure et passez à la gestion des exceptions sous la forme de l’utilisateur en appuyant sur CTRL + C pour interrompre le code. Cela déclenchera la fermeture de l’application, imprimant un message à l’utilisateur, avant de nettoyer le GPIO prêt pour une utilisation future.

Ajoutez ce code à votre projet avant de continuer.

except KeyboardInterrupt:
    slow_type("Exiting the application, bye!")
    GPIO.cleanup()

C’est tout! Enregistrez le code et lorsque vous êtes prêt, cliquez sur Exécuter >> Exécuter le module commencer. Vous verrez le texte taper lentement à l’écran et lorsque vous serez prêt, montrez au lecteur l’une de vos étiquettes RFID et regardez-le déclencher l’application à la vie!

Si vous souhaitez modifier l’une des applications du subprocess.call ([]) alors faites-le, les plus populaires incluent Minecraft, Sonic Pi et le gestionnaire de fichiers.

subprocess.call([“minecraft-pi”])
subprocess.call([“sonic-pi”])
subprocess.call([“pcmanfm”])

Voilà donc notre propre méthode pour permettre aux utilisateurs d’appeler des applications, de jouer des sons, d’ouvrir des pages Web en utilisant rien de plus que des tags RFID!