[TUTO] Technologie NFC

Forum dédié aux produits Seeedstudio

[TUTO] Technologie NFC

Message non lude Florian » Lun 25 Nov 2013 18:15

Bonjour,

Aujourd'hui nous allons découvrir la technologie NFC et commencer à apprendre à l'utiliser avec un montage très simple.

- Qu'est ce que la NFC?

NFC, Near Field Communication (communication en champ proche) est une technologie simple et intuitive qui permet l'échange de données, sans contact, entre deux appareils, très proches l'un de l'autre, équipés de ce dispositif. Un peu comme un bluetooth très courte portée qui ne nécessite pas d'authentification. Actuellement, la NFC est intégrée dans la plupart de nos mobiles sous forme de puce, ainsi que sur certaines cartes de transport ou de paiement.

- Comment ça marche?

La NFC est un substitut/dérivé de la RFID (Radio-Frequency Identification) mais à plus courte distance d'action (en théorie: 10 cm, en réalité: ~ 4-5 cm). Elle fonctionne par radio-fréquence, toujours à 13.56 MHz, si la gamme de fréquence n'est pas celle-ci l'appareil ne sera pas compatible avec cette technologie. La NFC peut communiquer en half-duplex et full-duplex.

Cette technologie fonctionne donc avec deux périphériques, le premier qui va lire et récupérer les données/informations du deuxième, terminal mobile, qui est une cible passive (sans alimentation).
Je m'explique;
Le premier appareil (qui est sous source d'alimentation) envoie un signal en continu, grâce à son antenne, sur une zone limitée autour de lui. Lorsqu'un terminal mobile entre dans son champ, ce périphérique va être à son tour alimenté par induction, et va pouvoir ainsi échanger ses données avec le premier appareil, qui va à son tour déclencher l'action pour laquelle il est programmée. Cela peut être l'ouverture d'une porte, l'envoi d'un message pré-écrit sur le téléphone d'un tel, l'ouverture d'une page internet...


Trois modes de fonctionnement du NFC:

Mode émulation de carte (dit passif):
Le terminal mobile se comporte comme une carte à puce sans contact.

Mode lecteur (dit actif):
Le terminal mobile devient un lecteur de carte sans contact.

Mode P2P:
Ce mode permet à deux terminaux mobiles d'échanger des informations.


- Quel usage en faire?

La technologie NFC n'a pour limite que votre imagination. De plus en plus d'appareils de notre quotidien en sont équipés, de nombreuses affiches publicitaires et d'informations, les bornes de rechargement de titres de transport en commun, les cartes de paiement et surtout quasiment tous nos cellulaires possèdent la NFC de nos jours.
On peut aussi s'en servir en logistique pour la gestion des stocks, pour l'identification et le contrôle d'accès à une zone, l'ouverture et la fermeture des portes de votre voiture par exemple. Ou encore la récupération de clef Wifi et la gestion de la domotique chez soi...
Les usages de cette technologie sont innombrables et sans limites.

Pour une approche plus technophile de la NFC, je vous propose de vous rendre sur les sites suivants;

http://www.nfc-forum.org/home/
http://en.wikipedia.org/wiki/Near_field_communication



Produits NFC proposés dans notre boutique

- Porte-cléfs MiFare Classic (13.56MHz RFID/NFC) - 1KB:
Image
Il s'agit d'un porte-clefs MiFare classique, principalement utilisé pour l'identification, ce porte-clefs est équipé d'une puce NXP S50 et son antenne et s'alimente lorsqu'on lit/écrit sur sa puce. Compatible avec toutes les technologies RFID/NFC 13.56MHz. Il fonctionne avec la puce PN532 NFC/RFID (la plus répandue). C'est un tag programmable avec 1 Kb de données stockables sur l'eeprom et un ID de 4 byte y est inscrit et non modifiable.
Il faut savoir que chaque tag ou card à un ID unique qui lui est propre mais il est possible de se procurer des tags/cards qui ont un ID commun.

Disponible ici, Snootlab.

Il existe de nombreux autres tags, sous différentes tailles, formes, couleurs, mémoire de stockage... Il y a des cards NFC, des tags autocollants...


- PN532 NFC / RFID Contrôleur SFE - v1.3:
Image
Ce breakout peut quasiment tout réaliser, il peut lire/écrire sur des tags et cards, communiquer avec des téléphones et agir lui-même comme un tag. Il peut également vous servir pour des projets RFID, il est compatible avec toute technologie RFID/NFC 13.56 MHz. Il fonctionne avec un module PN532 en I2C par défaut mais peut aussi fonctionner en SPI et FTDI.

Une librairie de départ, est disponible pour ce produit, https://github.com/adafruit/Adafruit_NFCShield_I2C.
Produit disponible ici, Snootlab.


- Adafruit PN532 NFC/RFID Shield Contrôleur pour Arduino:
Image
Ce shield est le jumeau du breakout présenté précédemment. Il fonctionne de la même façon et peut réaliser les mêmes fonctions. En revanche, si vous utilisez la carte Raspberry-Pi dans vos projets préférez le breakout plutôt que le shield.

La librairie précédente est également adaptée pour ce shield, https://github.com/adafruit/Adafruit_NFCShield_I2C.
Disponible ici, Snootlab.


- NFC shield V2.0 Seeedstudio:
Image
Ce NFC Shield V2.0 fonctionne avec un module PN532, il peut lire/écrire sur des tags et cards et communiquer avec d'autres périphériques équipés du même module. Ce shield intègre un module PN532 pour de la communication sans contact à 13.56 MHz. Il fonctionne en SPI. Vous pouvez lire et écrire à cette fréquence que ce soient des cartes, des tags ou un autre shield.
Comme vous pouvez le voir sur la photo, l'antenne PCB n'est pas intégrée directement au shield et est relié par un câble. Les connections de ce câble sont très fragiles, il faut donc y faire attention. Je vous suggère de plaquer le câble sur le shield avec un morceau de scotch pour éviter qu'il ne bouge trop.

Une librairie de départ est disponible pour ce produit, http://www.seeedstudio.com/wiki/File:PN532_SPI_V2.zip.
Produit disponible ici, Snootlab.



EXEMPLE D'UTILISATION

Le montage que nous allons réaliser à pour principe le même fonctionnement que les lecteurs de badges à l'entrée des résidences et immeubles pour ouvrir la porte du hall.
Une LED verte s'allumera quand un tag avec la bonne ID sera détecté et une rouge quand ce sera un mauvais ID. De manière imagée, LED verte allumése la porte s'ouvre et LED rouge allumée la porte reste fermé. Voilà pour le circuit. Ensuite au niveau de l'Arduino, dans notre moniteur, quand le tag avec la bonne ID se présentera on pourra lire "Accès autorisé!", pour un mauvais ID "Accès refusé!" et quand rien ne se présente on pourra voir "Présentez Pass".

- MATÉRIEL:

- Arduino Uno (x1)
- NFC Shield V2.0 (x1)
- Porte-clefs Mifare Classic (x2)
- LED verte (x1)
- LED rouge (x1)
- Résistance 1KOhms (x2)

- SCHEMA DU MONTAGE:

ShémaNFC.png
ShémaNFC.png (42.47 Kio) Vu 5615 fois


- CODE:

Pour le code, j'ai repris le Sketch ReadMifareMemory de la libraire du NFC Shield V2.0 et j'ai modifié le code dans la partie void loop. Je n'ai gardé qu'une petite partie du code qui permet de lire l'ID d'un tag présenté au shield. Ensuite j'y ai rajouté un simple switch pour gérer les différentes situations qui peuvent se présenter.
Mon code peut sûrement être arrangé autrement et de meilleure façon, n'hésitez pas à faire part de vos idées.
Code: Tout sélectionner
#include <PN532.h>
#include <SPI.h>

/*Chip select pin can be connected to D10 or D9 which is hareware optional*/
/*if you the version of NFC Shield from SeeedStudio is v2.0.*/
#define PN532_CS 10

PN532 nfc(PN532_CS);
#define  NFC_DEMO_DEBUG 1

int Led1 = 5;   // Intégration des leds
int Led2 = 6;


void setup(void)
  {
    pinMode(Led1, OUTPUT);    // On programme les leds en sorties
    pinMode(Led2, OUTPUT);
   
    #ifdef NFC_DEMO_DEBUG
      Serial.begin(9600);
      Serial.println("Hello!");
     
    #endif
      nfc.begin();

    uint32_t versiondata = nfc.getFirmwareVersion();
   
    if (! versiondata)
      {
        #ifdef NFC_DEMO_DEBUG
          Serial.print("Didn't find PN53x board");
         
        #endif
          while (1); // halt
       }
       
    #ifdef NFC_DEMO_DEBUG
      // Got ok data, print it out!
      Serial.print("Found chip PN5");
      Serial.println((versiondata>>24) & 0xFF, HEX);
      Serial.print("Firmware ver. ");
      Serial.print((versiondata>>16) & 0xFF, DEC);
      Serial.print('.');
      Serial.println((versiondata>>8) & 0xFF, DEC);
      Serial.print("Supports ");
      Serial.println(versiondata & 0xFF, HEX);
     
    #endif
  // configure board to read RFID tags and cards
      nfc.SAMConfig();
  }
 

void loop(void)
  {
    uint32_t id;
    // look for MiFare type cards
    id = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A);

    switch(id)           // Réalisation d'un switch pour gérer les différentes conditions
      {
        case 839461248:           // Condition à remplir si l'ID détecté est 839461248
        Serial.println();
        Serial.println("Acces autorise!");    // Envoi au moniteur
        digitalWrite(Led2, HIGH);        //  Action réalisée sur le circuit
        delay(2000);
        digitalWrite(Led2, LOW);
        break;
       
        case 0:           // Condition à remplir si le Shield ne détecte aucun Tag
        Serial.println();
        Serial.println("Presentez Pass!");
        break;
       
        default:    // condition à remplir si aucune des conditions précédentes ne sont bonnes
        Serial.println();   // soit quand l'ID présentée au Shield est différente de 839461248
        Serial.println("Acces refuse!");
        digitalWrite(Led1, HIGH);
        delay(2000);
        digitalWrite(Led1, LOW);
      } 
     
     
     delay(500);
  }



- FONCTIONNEMENT:

Nous avons donc à notre disposition deux tags avec chacun un ID qui lui est propre. Nous avons besoin de connaitre l'ID d'au moins un des deux tags pour notre montage. Pour découvrir l'ID d'un tag, il suffit d'uploader le sketch readMifareMemorie de la librairie du NFC Shield v2.0 et de passer le tag près de l'antenne du shield. Normalement, l'ID devrait apparaître dans le moniteur série.
Une fois l'ID obtenu, on supposera que seul les tags possédant cette ID seront autorisés à rentrer (LED verte allumé) et peu importe l'ID des autres ils seront refusés (LED rouge allumé). Il faut donc remplacer l'ID de votre tag par celle du code pour que votre montage fonctionne correctement.

Si tout est OK, lorsque vous passez votre tag autorisé à entrer près de l'antenne la LED verte devrait s'allumer et le moniteur série devrait afficher quelque chose de semblable à ceci;
Moniteur.png
Moniteur.png (32.12 Kio) Vu 5615 fois


Lorsque vous passez un tag non identifié/autorisé dans le champ de l'antenne vous devriez avoir la LED rouge qui s'allume et le moniteur série devrait afficher quelque chose de similaire à ceci;
Moniteur1.png
Moniteur1.png (32.04 Kio) Vu 5615 fois


Et normalement quand aucun tag n'est présenté, aucunes LEDs ne devraient être allumés et le moniteur série devrait présenter le message "Présentez Pass" toutes les 1/2 secondes environ.


Voilà,voilà.
Ce sera tout pour aujourd'hui, j'espère que le tutoriel vous aura plu.
Florian
 
Messages: 75
Inscription: Mer 24 Juil 2013 17:36

Retourner vers Seeedstudio

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité