====== Utiliser un lecteur RFID ACR 122U avec GNU/Linux ====== ==== Présentation ==== Dans le cadre de la réalisation d'une table interactive, il m'a été demandé de pouvoir interagir avec un ordinateur avec un objet. Pour ce faire, j'ai identifié la technologie RFID comme étant adéquate. Pour plus d'info sur la technologie, faîtes un tour chez Wikipédia : https://fr.wikipedia.org/wiki/Radio-identification . Après quelques recherches sur les internets, je suis tombé sur la référence ACR 122U, produite en Chine, et qui semble être la plus diffusée. Un capteur coûte aux environs d'une cinquantaine d'euros. ==== Installation du driver ==== Voici maintenant la suite de commande détaillée qui m’a permis d’installer le lecteur sur un Raspberry Pi, et un Debian Stretch, selon la source suivante : https://oneguyoneblog.com/2015/09/16/acr122u-nfc-usb-reader-raspberry-pi/ Mise-à-jour des paquets : sudo apt-get update Installation des paquets nécessaires : sudo apt-get -y install subversion autoconf debhelper flex libusb-dev libpcsclite-dev libpcsclite1 libccid pcscd pcsc-tools libpcsc-perl libusb-1.0-0-dev libtool libssl-dev cmake checkinstall Installation du driver pour le lecteur : wget https://github.com/nfc-tools/libnfc/releases/download/libnfc-1.7.0-rc7/libnfc-1.7.0-rc7.tar.gz Décompressage du paquet : tar -xvzf libnfc-1.7.0-rc7.tar.gz On entre dans le répertoire : cd libnfc-1.7.0-rc7 Configuration du paquet : ./configure –with-drivers=acr122_usb Compilation : make Installation : sudo make install Reconfiguration de ldconfig : sudo sh -c "echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-lib.conf" Mise-à-jour de ldconfig : sudo ldconfig Une fois que ceci est fait, utiliser cette commande : sudo nfc-list Permet de détecter le lecteur RFID. S’il n’y a pas de tag : NFC device: ACS / ACR122U PICC Interface opened Avec un tag : NFC device: ACS / ACR122U PICC Interface opened 1 ISO14443A passive target(s) found: ISO/IEC 14443A (106 kbps) target: ATQA (SENS_RES): 00 04 UID (NFCID1): 9a 8b 6e 02 SAK (SEL_RES): 08 La référence UID de 8 caractères est l’identifiant unique du tag, qui nous permettra plus tard de l’identifier. ==== Un script en Python pour l'utiliser ==== import os, re from subprocess import Popen, PIPE tags = [ "e0 f6 6e 02", "80 16 6e 02", "7b 3a 6e 02" ] fonctions = [ fonction1, fonction2, fonction3 ] while True: tag_reading = Popen(["nfc-list"], stdout=PIPE).communicate()[0] for i in range( len( tags ) ): if re.search( tags[i], tag_reading ): fonctions[i]() sleep( 0.5 ) def fonction1(): pass def fonction2(): pass def fonction3(): pass