Un nouveau standard permet un accès simple aux tags NFC quelle que soit la technologie utilisée. Il s’agit de NFC Data Exchange Format (NDEF).
Pour cet atelier rapide, on utilisera une carte Arduino, une extension NFC Shield v2 de la marque Seeedstudio et des tags de différents formats fournis par IDENTIVE (Mifare Ultralight C, NTAG203, Mifare DESFire EV1). Grâce à #LeCubeMedia, on développe sur une Raspberry Pi avec l’outil en ligne de commande "inotool".
Liens utiles
– le wiki de l’extension NFC shield v2
– le code source et les explications sur NDEF
Code source
// programme de lecture d'ID NFC
#include <SPI.h>
#include <PN532_SPI.h>
#include <PN532.h>
#include <NfcAdapter.h>
// utilisation de NDEF
PN532_SPI pn532spi(SPI, 10);
NfcAdapter nfc = NfcAdapter(pn532spi);
void setup() {
Serial.begin(9600);
delay(3000);
Serial.println("Test NFC !");
//
nfc.begin();
//
Serial.println("Attente d'un tag NFC");
}
void loop() {
// on teste la présence d'un tag
if (nfc.tagPresent()) {
Serial.println(); // nouvelle ligne
NfcTag tag = nfc.read(); // représentation d'un tag
Serial.print("{\"ID\":"); // construction d'une structure JSON
Serial.print(tag.getUidString()); // récupération de l'Uid en texte
Serial.print("}"); // fin de la structure JSON
Serial.println(); // nouvelle ligne
}
Serial.print("."); // marque d'activité
delay(500); // attente d'1/2 seconde
}
Compilation
Rappel de l’utilisation d’inotool : une seule commande "ino" permet de lancer les différentes opérations d’initialisation d’un nouveau projet, de compilation, de téléchargement dans la carte et même de lancer un terminal série (picocom).
Le code source est dans un fichier "sketch.ino" dans un répertoire "nfc_read_ID/src" et les bibliothèques téléchargées sur GitHub sont dans un répertoire "nfc_read_ID/lib".
On peut même enchaîner les opérations avec &&.
pi@lecube ~/lecubemedia/src/arduino/nfc_read_ID $ ino build && ino upload && ino serial
Le résultat
Dans ce premier test, on observe l’affichage de l’ID dans la console série :
{"ID":"04 DD FD 12 87 2A 80"}
.......
{"ID":"04 85 74 22 0E 2A 80"}