Publié le 21 décembre 2014 - par

J’ai testé pour vous : La carte Explore NFC d’Element 14 (2/2)

explore-nfc_250pxAprès vous avoir présenté la carte Explore NFC distribuée par Farnell dans un premier article, voici venu le moment d’en faire quelque chose de concret.
Si vous êtes comme moi, l’affichage d’une chaîne de caractères sur un écran… c’est bien, mais rien ne remplace l’allumage d’une LED ou le bruit sec du relais qui colle, non ?
Dans cette deuxième partie, je vous dirai comment piloter une LED en python, à partir de la reconnaissance d’un TAG NFC. Après… vous en ferez bien ce que vous voudrez.

Si vous n’avez pas lu la première partie du test, cliquez sur ce lien

La carte Explore NFC

Résumé de l’épisode précédent :

Dans le premier épisode de cette série, nous avons vu comment connecter la carte à un Raspberry Pi modèle B ou modèle B+. Après une (brève) explication du principe de la NFC, je vous ai expliqué également comment récupérer et installer sur le Raspberry Pi le programme de polling, destiné à lire la carte en boucle et à afficher sur l’écran le numéro de série du badge présenté devant l’antenne.

Objectif de cet épisode

Comme je vous l’ai dit plus haut, afficher un numéro sur l’écran c’est une chose, agir sur le monde extérieur c’est le but que je me fixe lors de ce genre de tests.

L’idée c’est de pouvoir ouvrir une porte en commandant la gâche électrique. Pour commencer, l’allumage du LED confirmera la faisabilité. Il suffira de remplacer la LED par un relais pour obtenir le résultat final.

explore_nfc-P1130251

La carte Explore NFC sur un Raspberry Pi B+

Connexion de la carte Explore NFC

Le Raspberry Pi étant hors tension, mettez en place la carte Explore NFC. Connectez deux LED sur les pins 38 et 40 du GPIO, la masse est prise sur la pin 39.

explore-nfcSur la photo ci-dessus vous voyez mon montage de test, réalisé avec une breadboard et 3 fils mâle/femelle. Des résistances de 130 Ω protègent les sorties du Raspberry Pi.

diodes_300pxSi vous utilisez un Raspberry Pi modèle B+, vous pouvez par exemple connecter vos LED comme sur le schéma ci-contre.

Pour mémoire, le côté cathode des LED (celui qui est dirigé vers la masse est indiqué par la patte la plus courte de la LED.

Si vous utilisez des LED de récup (ça m’arrive souvent 😉 ) vous reconnaîtrez la cathode au méplat qui existe sur le socle de la LED.

Un petit procédé mnémotechnique pour se rappeler : Coupé = cathode (la pâtte est coupée plus court et le cercle est coupé du côté cathode…).

Une fois les branchements réalisés, on peut passer à l’installation du programme.

Le programme

La bibliothèque nxppy

Cette bibliothèque est basée sur la NxpRdLib. Scott a développé une bibliothèque qui facilite l’accès à la carte Explore NFC. C’est elle que nous allons utiliser ici.

Avant de commencer il faut installer 2 ou 3 bricoles et cloner le dossier de Scott sur votre machine.

$ sudo apt-get install python2.7-dev
$ sudo apt-get install cmake
$ sudo apt-get install python-setuptools
$ sudo apt-get install git

Nous allons ensuite cloner le répertoire de nxppy sur le Raspberry Pi :

$ git clone  git://github.com/svvitale/nxppy.git
Cloning into 'nxppy'...
remote: Counting objects: 353, done.
remote: Total 353 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (353/353), 1.48 MiB | 308 KiB/s, done.
Resolving deltas: 100% (153/153), done.

Une fois que c’est fait on peut passer à l’installation

$ sudo python setup.py build install
running build
compiling NxpRdLib
-- The C compiler identification is GNU 4.6.3
-- The CXX compiler identification is GNU 4.6.3
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/install_nxppy/nxppy/NxpRdLib_PublicRelease/build
Scanning dependencies of target nxprd
[  1%] Building C object CMakeFiles/nxprd.dir/home/pi/install_nxppy/nxppy/NxpRdLib_PublicRelease/comps/phalMful/src/phalMful.c.o
....

Une fois nxppy installé, vous pouvez l’utiliser avec ce programme par exemple

import nxppy
while True:
   mifare=nxppy.Mifare()
   if mifare is not None:
       print "Mifare is not null"
   uid=mifare.select()
   print "Read uid"
   if uid is not None:
       break
print uid

Juste un petit souci lorsqu’aucun badge NFC n’est présent, la classe chargée de lire la carte retourne une erreur ce qui se traduit par :

pi@raspberrypi ~ $ sudo python read_nfc.py
Mifare is not null
Traceback (most recent call last):
  File "read_nfc.py", line 6, in <module>
    uid=mifare.select()
nxppy.SelectError: RequestA command failed: 201
pi@raspberrypi ~ $

Après avoir galéré un moment avec ce problème, recommencé l’install depuis une carte microSD vierge, je me suis résolu à ouvrir un issue sur le GitHub de Scott Vitale. Scott m’a répondu qu’effectivement la class déclenchait une exception quand il n’y avait pas de badge :

Hi Francois!

Thanks for reaching out! This is expected behavior. In the latest revision of nxppy (which uses a Mifare class instead of static methods), we throw an exception if the call to .select() fails. Here’s how you would handle it (using one of your example scripts):

import nxppy
mifare=nxppy.Mifare()

while True:
    try:
        uid = mifare.select()
        print "Read uid", uid
    except nxppy.SelectError:
        pass   

I’ll go and update my post on the NXP site, which I think still has the old example. Please let me know if you have any additional issues. I look forward to seeing your blog post when it’s published!

Scott

Le site de nxppy sera mis à jour pour tenir compte de ce retour. Il suffit donc de récupérer l’exception et de la traiter par pass… ce qui fait que Python ignore superbement l’erreur. On peut maintenant passer au programme de test

explore_nfc-P1130252

Le programme en Python

Vous trouverez ci-dessous le programme que j’ai utilisé. Il est brut de décoffrage et il n’y a pas de fonction. Les clignotements des LED sont obtenus en allumant puis éteignant la LED. On peut faire mieux mais c’est plus lisible si vous débutez. Ca permet de tout décortiquer sans trop se prendre la tête. Et puis si ça ne vous plait pas comme ça, vous êtes libre de le ré-écrire 😉

import nxppy
import time
import RPi.GPIO as GPIO              # import RPi.GPIO module

# Numérotation du SoC ou de la carte
#GPIO.setmode(GPIO.BCM)              # Numérotation du SoC BCM
GPIO.setmode(GPIO.BOARD)             # Numérotation des pins de P1 sur la carte

# Configurer les sorties
GPIO.setup(38, GPIO.OUT)               # Pin 38 en sortie
GPIO.setup(40, GPIO.OUT)               # Pin 40 en sortie

# Sequence de debut : les LED s allument pour indiquer que le programme demarre
# Envoyer un 1 sur les sorties
GPIO.output(38, 1)     # mettre la pin 38 a 1/GPIO.HIGH/True
GPIO.output(40, 1)     # mettre la pin 40 a 0/GPIO.LOW/False

time.sleep(0.5)        # attendre une demi seconde

GPIO.output(38, 0)
time.sleep(0.2)
GPIO.output(40, 0)
time.sleep(0.2)
GPIO.output(38, 1)
time.sleep(0.2)
GPIO.output(40, 1)
time.sleep(0.2)

# Eteindre les LED
GPIO.output(38, 0)
GPIO.output(40, 0)

# compteur utilise pour le debogage affiche le nombre de boucles a l ecran
compteur = 0

mifare = nxppy.Mifare()

try:
    while True:
        try:

            # CLignotement rapide LED blanche = lecture
            GPIO.output(38, 1)
            time.sleep(0.05)
            GPIO.output(38, 0)
            time.sleep(1)

            print compteur
            compteur = compteur + 1
            uid = mifare.select()
            print "lu uid : ", uid
            if uid == "8CA6450E":
                # Allumer lampe blanche 2 secondes
                GPIO.output(38, 1)
                time.sleep(2)
                GPIO.output(38, 0)
            else:
                # Clignoter lampe rouge
                GPIO.output(40, 1)
                time.sleep(0.2)
                GPIO.output(40, 0)
                time.sleep(0.2)
                GPIO.output(40, 1)
                time.sleep(0.2)
                GPIO.output(40, 0)
                time.sleep(0.2)
                GPIO.output(40, 1)
                time.sleep(0.2)
                GPIO.output(40, 0)
            time.sleep(2)

        except nxppy.SelectError:
            pass

except KeyboardInterrupt:
    print "Fin du programme...\n"
except:
    # Sortir proprement et remettre le GPIO en etat
    GPIO.cleanup()

Vidéo

Une image valant mieux qu’un grand discours, voici une démo du programme ci-dessus avec quelques badges et cartes. Seul le badge bleu dont le numéro de série est rentré en dur dans le programme allume la LED blanche.

Il est bien entendu possible d’améliorer tout ça mais ça, c’est à vous de le faire. Vous pourrez adapter le programme à vos besoins. Il faudrait utiliser une autre sortie pour commander la gâche électrique, avoir une liste de badges autorisés dans un fichier ou une BDD, avec un programme de gestion qui permettrait d’enregistrer (en le lisant par ex.) ou de supprimer un badge (perdu ou interdit) dans la liste….

Comme toujours vous avez en main un outil qui fonctionne, faites en ce que bon vous semble !

explore_nfc-P1130249

Combien ça coûte ?

Comptez une vingtaine d’euros pour cette carte, auxquels vous ajouterez les frais de port.

Conclusion

Rien à dire sur le fonctionnement de la carte qui a été irréprochable durant la période des essais. Les différents badges sont lus systématiquement et sans erreur.

explore_nfc-P1130235

Mon seul bémol concerne l’absence de fixation de la carte. Aucun trou de fixation n’est prévu et la carte n’est solidaire du Raspberry Pi que par le connecteur GPIO, ce qui me semble un peu léger si on envisage une utilisation sérieuse. Il  faudra dans ce cas prévoir un système pour rendre solidaire le RasPi et la carte Explore NFC. Si l’ensemble est dissimulé dans un boîtier (éventuellement imprimé en 3D) ça ne devrait pas être un gros problème.

Sources

Merci à Sébastien dont le blog Domotique-Info m’a été bien utile !

Share Button

À propos François MOCQ

Électronicien d'origine, devenu informaticien, et passionné de nouvelles technologies, formateur en maintenance informatique puis en Réseau et Télécommunications. Dès son arrivée sur le marché, le potentiel offert par Raspberry Pi m’a enthousiasmé j'ai rapidement créé un blog dédié à ce nano-ordinateur (www.framboise314.fr) pour partager cette passion. .

26 réflexions au sujet de « J’ai testé pour vous : La carte Explore NFC d’Element 14 (2/2) »

  1. Ping : J’ai testé pour vous : La carte Explore NFC d’Element 14 (1/2) | Framboise 314, le Raspberry Pi à la sauce française….

  2. POURRE

    Bonsoir,

    Article bien intéressant. Puis-je mentionné que le journal OpenSilicium N° 12 d’OCT/NOV 2014, consacre ses pages 9 à 36 à plusieurs articles dédiés à la lecture des tags NFC/RFID sous GNU/Linux ?

    Pour ma part, n’ayant pas gagné le raspberry du jeu de Noël et mon fils expatrié m’ayant laissé le choix de mon cadeau, j’ai commande ce kit:
    http://www.amazon.fr/Raspberry-Ultimate-Starter-Includes-Components/dp/B00LI94OJU/ref=sr_1_1?s=computers&ie=UTF8&qid=1419198244&sr=1-1&keywords=raspberry+pi+kit

    Ayant un smartphone NFC, j’ai aussi commandé ce lot de tags pour me faire la main:
    http://www.amazon.fr/Tags-NFC-inscriptible-programmable-Meilleurs-argent/dp/B00CE3IC74/ref=sr_1_1?ie=UTF8&qid=1419198454&sr=8-1&keywords=nfc+tags

    Plus tard, j’envisage l’achat d’un lecteur USB ou série pour pouvoir le passer d’une machine à l’autre (tour sous wheezy, portable sous SUSE et bientôt le raspi sous raspian).

    Puis-je vous demander pourquoi avoir opté pour une carte dédiée, surtout dans l’emploi que vous envisagez ? une carte série, SPI ou USB (avec rallonge) aurait permis de scinder facilement le montage en 2 parties:

    -) le Raspi, à l’intérieur de la salle serveur.
    -) le lecteur de badge à l’extérieur, soit en relief, soit incorporé dans la cloison.

    Le liaison entre les 2 boîtiers ne demandant qu’un câble dont la longueur peut atteindre plusieurs mètre et éviterait ce montage un peu branlant (sans parler de la difficulté de mettre tout ceci dans un boîtier sécurisé, à l’abri du vandalisme, mais permettant la présentation et la lecture du badge) .
    Cordialement et bonnes fêtes de fin d’année pour vous et tous les lecteurs de ce Blog.
    73’QRO de Sylvain – F1MYZ

    Répondre
  3. Oceanos

    Bonsoir,

    L’ adresse mail de Mr Francois MOCQ s est fait pirater, je viens de recevoir un mail pour donner de l argent donc surtout ne donnez rien !!!

    je sais que c est hors sujet, mais je ne suis helas pas encore inscris sur le forum donc je ne savais pas comment tous vous prevenir.

    Merci et bonne soiree.

    Bien cordialement, Oceanos.

    Répondre
  4. Toto

    Bonjour,

    Quand vous exécutez votre script que vous appelez read_nfc.py vous vous trouvez dans le répertoire nxppy ? Car quand je l’exécute j’obtiens une erreur de type ImportError : No module named nxppy.

    Je voudrais enfaite arrivez à lire les UID des tags que l’on passe et les envoyer sur une base de donnée pour en faire comme une « badgeuse » d’entreprise mais pour l’instant impossible de récupérer ces UIDs .. :/

    Répondre
  5. Peuch Clément

    Bonsoir François, je suis très intéressé par ce genre de mise en place. Néanmoins je me pose une question. Ayant un raspberry type b je me demande comment je pourrais faire pour utiliser à la fois là carte extension nfc et des câbles pour faire fonctionner une led étant donné que le B ne possede que 26 pins qui seront utilisé par la carte d’extension.

    Répondre
  6. Christophe DETRE

    Bonjour François,
    Je viens d’installer la carte NFC, tout se passe bien jusqu’à la dernière commande :
    pi@rasberrypi / $ sudo python setup.py build install
    j’obtiens une erreur :
    python: can’t open file ‘setup.py’: [Errno 2] No such file or directory
    Dois-je me placer dans un dossier particulier ou utiliser un autre utilisateur que pi ?
    Je suis un newbie avec Linux et RaspberryPi, un petit coup de main ne serait pas de trop.
    Cordialement
    Christophe

    Répondre
    1. Denis Brion

      Excusez moi , mais votre intuition est la bonne : il faut se palcer dans le dossier nxppy -et c’est assez facile à verifier . A noter que vous devriez créer un repertoire vierge pour toute installation à partir des sources (appelons le temp), se mettre dans le repertoire pour git cloner et toutes les autres manips, et detruire le repertoire et tous les repertoires créés à l’intérieur après coup -par « rm –r  » ou « rm –recursive » : l’avantage est que le reprtoire $HOME ne sera pas pollué par des fichiers d’une installation précédente (ex : que se passerait il si setup.py venait d’une installation d’une autre bibliothèque? (c’est un peu ce que fait arduino/energia qui travaillen toujours dans des repertoires temporaires, détruits quand on a fini

      Répondre
      1. Christophe DETRE

        Bonsoir et merci pour votre intervention pertinente.
        nxppy est installée, mais, parce qu’il y a un mais, la bibliothèque ne semble pas accessible depuis un programme en python :
        – après « import nxppy »
        – la ligne « mifare = nxppy.Mifare()/b> » ne retourne rien et stoppe le programme.
        J’ai lu sur un forum que mxppy ne fonctionnait pas avec les dernières maj de python, c’est peut être le souci ?
        Si vous avez une idée, je suis preneur.
        Merci encore
        Christophe

        Répondre
        1. Denis Brion

          Excusez moi, mais je suis obligé de confesser mon incompétence dans le domaine de nfc (mais elle n’est pas limitée à ce domaine). Avez vous pensé à
          (a)garder une trace des fora que vous avez parcourus, pour éviter que votre travail de recherche ne soit pas dupliqué -au moins- par des gens susceptibles de vous aider?
          (b) poster sur le forum de framboise pi pour demander de l’aide (dépassant l’aide ponctuelle pour de l’installation), ce qui faciliterait votre vie et celle des gens capables de vous dépanner (rien que le fait que le fil qui serait dédié à votre demande d’aide est bien identifié…)

          Répondre
  7. Librasoft

    De beaux articles. Bravo.
    Petite alerte cependant, en l’état cela va fonctionner, mais il faut gérer la partie tentative de hacks.
    Je vous invite à bloquer l’authentification de badge pour 1min après 3 ou 5 tentatives échouées.
    Sinon avec un simple générateur d’IUD sur un smartphone, et quelques heures à perdre, on pourra ouvrir votre porte.
    🙂

    Répondre
  8. Nickko

    Bonjour,

    Je viens de découvrir cette carte, mais je vois qu’il y a deux version, la explorer-nfc-ww et la explore-nfc je me demandais si tu savais quelle version du as utilisé ?

    Merci d’avance,
    Nickko

    Répondre
  9. Nickko

    En effet, sur le site de Reichter, c’est la même que celle d’élément 14.

    En fait les deux que j’ai vu son de Farnell / Element 14 et elles sembles différentes :
    http://be.farnell.com/nxp/explore-nfc/add-on-board-nfc-for-raspberry/dp/2366201 (la tienne)
    http://be.farnell.com/nxp/explore-nfc-ww/expansion-board-raspberry-pi-model/dp/2445690

    Ce qui a attiré mon attention c’est que sur le seconde, il est indiqué qu’il y a un microprocesseur à l’interieur, etc.

    Au répart, j’avais des cartes équivalente à base de PN532 je me suis dit que ça devait être mieux que le PN512 hors j’ai lu sur le forum Farnell, qu’au contraire, comme il y avait un microcontroleur en guise d’interface entre le Raspberry PI et
    a puce NFC.

    Répondre
    1. François MOCQ Auteur de l’article

      je viens de regarder sur Farnell be mais la carte -ww m’a bien l’air aussi d etre la même… sur la photo on voit version 1.6 qui est la même que j ai utilisée
      c’est indiqué où qu’il y a un proc. dedans ?

      Répondre
    1. François MOCQ Auteur de l’article

      dac ! en fait c est une catégorie qui relie la carte à BCM2835 le SoC du Raspberry Pi
      Un peu plus bas tu as ce texte (en flamand)
      Produits similaires (Vergelijkbare producten)
      Recherchez les produits qui sont semblables en fonctionnalités de l’appareil. Sélectionnez l’un des liens suivants, vous aboutirez sur une page regroupant tous les produits qui comportent la même catégorie que l’attribut spécifié. (traduction Google Trad)
      voila l explication mais il n y a pas de SoC BCM2835 sur la carte, il est sur le RasPi 😉
      bonne journée
      Cordialement
      François
      ps : mon grand père était flamand 😉

      Répondre
  10. Ping : Raspberry PI - nookeff | Pearltrees

  11. Ping : RFID | Pearltrees

  12. gorg

    Bonjour j’aimerais faire fonctionner la carte nxp explore-nfc avec un display lcd 2×16 connecté en i2c.
    Pour l’instant quand je connecte la carte nfc l’i2c ne fonctionne plus, le display n’est plus détecté.
    Pouvez-vous m’indiquer une procédure ? un lien utile ? je sais que la carte nfc peut fonctionner aussi en i2c au lieu de spi, dois-je faire cette modification ? merci

    Répondre
    1. François MOCQ Auteur de l’article

      Bonjour Gorg
      le projet date un peu…
      question à 2€ : est-ce que vous avez fait fonctionner la carte NFC seule dans un premier temps

      Si elle fonctionne bien connectez ensuite l’écran. Si elle ne fonctionne plus (comme dans votre cas lorsque vous branchez la NFC sur l »‘écran en I2C) on peut penser à un conflit d’adresse sur le bus I2C
      il y a un cas identique ici https://www.element14.com/community/thread/42755/l/i2c-not-working-after-installing-explore-nfc?displayFullThread=true
      il faudra peut être modifier l’adresse d’une des 2 cartes mais là… RTFM
      la doc est ici mais je ne sais pas si elle est complète http://www.farnell.com/datasheets/1794217.pdf
      d’autres liens:
      https://www.element14.com/community/thread/39333/l/impossible-to-use-i2c-in-an-external-pcb-at-the-same-time-as-explore-nfc-board
      et
      http://www.nxp.com/products/identification-and-security/nfc-and-reader-ics/nfc-frontend-solutions/explore-nfc-exclusive-from-element14:PNEV512R?fpsp=1&tab=Design_Tools_Tab
      cordialement
      François

      Répondre
  13. Safae.M

    Bonjour ,

    Je trouve que votre article est très intéressant, Merci beaucoup .

    J’aimerai juste vous posez une question , est ce qu’il est possible de recevoir un code envoyé par un téléphone via NFC , puis de faire le traitement sur ce code , et suivant le résultat de ce traitement , une porte sera ouverte , ou il restera fermée .

    J’ai vraiment besoin d’aide , merci beaucoup .

    Répondre
  14. Damien

    Bonjour, je suis bloqué lorsque je tape la commande : ‘ $ sudo python setup.py build install ‘ . Je me suis déjà placé dans le répertoire nxppy . Le texte qui s’affiche dans le terminal est assez long donc je vais peut être juste vous écrire les erreurs fatales qui apparaissent :

    …..
    [Downloading NeardAL]
    fatal: le chemin de destination ‘neardal’ existe déjà et n’est pas un répertoire vide.
    ….
    [Download wiringPi]
    Clonage dans ‘wiringPi’…
    fatal: unable to connect to git.drogon.net:
    git.drogon.net[0: 195.10.226.169]: errno=Connexion refusée
    git.drogon.net[1: 2a00:ce0:2:feed:cafe:0:3]: errno=Le réseau n’est pas accessible
    fatal: Impossible d’analyser l’objet ’72b2af231be337d45a557ce6ca3ed1eeb6675ffd’.
    [Buiding and installing wiringPi]
    … -> (des messages qui confirment que le dossier wiringPi n’a pas été créé)

    [Building NXP Reader Library]
    make: Nothing to be done ‘all’.
    error: [Errno 2] No such file or directory : ‘neard-explorenfc-*/nxprdlib’

    Après ça l’installation s’arrête.

    Voilà, pour wiringPi j’ai essayé d’aller sur git.drogon.net , le site était bloqué par la sécurité, un message disait que le site avait été bloqué pour des raisons de sécurité à cause d’un piratage. En confirmant que je voulais accéder au site j’ai réussi à y accéder.

    Pour le répertoire ‘neardal’ qui existe déjà c’est peut être parce que j’ai lancé à plusieurs reprises la commande ‘ $ sudo python setup.py build install ‘ .

    Je ne sais pas comment faire pour résoudre ces problèmes et je ne trouve pas beaucoup d’explications à ce sujet sur internet. J’espère que vous pourrez m’aider afin que je puisse continuer ce tutoriel.

    En vous remerciant d’avance,

    Damien

    Répondre
  15. Jeremy

    Bonjour,

    Je souhaiterais pour un projet émuler un tag NFC qui vient d’être copié. J’ai travaillé avec les cartes Arduino et les composants PN532 et ai réalisé que le mode émulation était bloqué comme on peut le confirmer ici http://nfc-tools.org/index.php?title=PN53x « First byte of UID will be masked by 0x08 by the PN53x firmware as security countermeasure against real UID emulation. »

    Je voulais savoir si c’était le cas avec la carte Explore d’NFC et donc le PN512

    Merci d’avance,

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Complétez ce captcha SVP * Time limit is exhausted. Please reload CAPTCHA.