Vous êtes sur la page 1sur 29

Projet Avanc

2008

Application pour la gestion dun botier RFID

Systmes Embarqus
Grand Michal Malard Elise Pierre Nicolas Fabien Santiago Dorian

Table des matires


1 2 Introduction ..................................................................................................................................... 1 La technologie RFID ......................................................................................................................... 1 2.1 2.2 2.3 2.4 Principe de fonctionnement .................................................................................................... 1 Le lecteur ................................................................................................................................. 2 Les radio-tiquettes (ou tag) ................................................................................................... 3 Communication lecteur-tiquette........................................................................................... 4

Problmes de collision......................................................................................................................... 4 2.5 2.6 3 Applications ............................................................................................................................. 5 Controverses ........................................................................................................................... 6

Le kit RFID ........................................................................................................................................ 7 3.1 Prsentation du matriel......................................................................................................... 7 Le lecteur RFID ................................................................................................................. 7 Les antennes .................................................................................................................... 8 Les TAGs........................................................................................................................... 8

3.1.1 3.1.2 3.1.3 3.2 3.3

Connections avec la bote ....................................................................................................... 9 Protocole de communication hte lecteur RFID................................................................. 9 Connexion au lecteur..................................................................................................... 10 Lecture des TAGs ........................................................................................................... 12

3.3.1 3.3.2 4

Communication avec le boitier RFID ............................................................................................. 13 4.1 4.2 4.3 Fonctionnalits de la classe de communication.................................................................... 13 Multithreading....................................................................................................................... 14 Gestion des vnements ....................................................................................................... 15 Le concept de la gestion dvnements ........................................................................ 15 La gestion des vnements dans le programme. .......................................................... 15

4.3.1 4.3.2 4.4

La classe AlienBeanCommunicator ....................................................................................... 17 Cration dune instance de classe ................................................................................. 17 La fonction tagReader() ................................................................................................. 17 La fonction tagWriter() .................................................................................................. 18

4.4.1 4.4.2 4.4.3 4.5 5

Architecture gnrale du systme de communication ......................................................... 18

Gestion de la base de donnes : la classe AlienBeanDB ............................................................... 18 5.1 5.2 es attributs............................................................................................................................. 19 Utiliser le connecteur JDBC ................................................................................................... 19 executeUpdate .............................................................................................................. 19

5.2.1

5.2.2 5.3 5.4 5.5 5.6 6

executeQuery : .............................................................................................................. 20

Le crateur............................................................................................................................. 20 La fonction dinitialisation ..................................................................................................... 21 La classe Member .................................................................................................................. 22 Les fonctions de communication avec la base de donnes .................................................. 22

Linterface graphique .................................................................................................................... 23 6.1 6.2 La fentre de connexion ........................................................................................................ 23 La fentre principale.............................................................................................................. 24 Suppression dutilisateur ............................................................................................... 25 Ajout dutilisateur .......................................................................................................... 25

6.2.1 6.2.2 7

Conclusion ..................................................................................................................................... 26

1 Introduction
Le but de notre projet tait dutiliser un systme dIdentification par Radio Frquence afin didentifier une personne grce la radio-tiquette quelle porte et dafficher les informations la concernant.Pour ce faire nous avons cre une interface de communication entre le lecteur de notre kit RFID et une base de donnes. Lapplication ainsi dveloppe devait tre la plus portable possible afin de pouvoir lutiliser nimporte o et sur nimporte quel systme, par exemple sur une carte avec un OS embarqu. Dans ce rapport nous allons tout dabord prsenter le fonctionnement dun systme RFID puis le kit RFID dont nous nous sommes servis pour ce projet, en particulier les outils fournit par le constructeur pour communiquer avec le lecteur RFID. Ensuite, nous allons expliquer comment a t implmente linterface de communication mise en place ainsi que la manire dont est gre la base de donnes. Enfin, nous dcrirons comment utiliser lapplication que nous avons ainsi cre.

2 La technologie RFID
De nos jours, lidentification et le suivi dobjets se dveloppent de plus en plus. Dans le domaine de la distribution, quelle soit grande ou petite, le code barre est largement utilis lheure actuelle. Il a lavantage de prsenter un faible cot et de possder des normes bien tablies. Mais le nombre dinformations quil contient est trs restreint et il est ncessaire davoir une parfaite visibilit optique directe pour le lire. Remplacer des codes lisibles optiquement par les mmes codes ports par des ondes lectromagntiques permet de supprimer ces deux inconvnients. Cest pourquoi la RFID (Radio Frequency Identification) sest dveloppe. Cette mthode permet de stocker et de rcuprer des donnes distance en utilisant des marqueurs appels radio-tiquettes ( RFID tag ou RFID transponder en anglais) Une tiquette lectronique constitue dune puce entoure de son bobinage cotera certes toujours plus cher quun code barre imprim sur un simple bout de papier, mais elle offre un tel progrs dans toute la chane de distribution qu lheure actuelle la rentabilit est dj envisageable, dautant quon peut prvoir que son cot de fabrication va considrablement baisser dans les annes qui viennent.

2.1 Principe de fonctionnement


Un systme de radio-identification se compose de marqueurs, nomms radio-tiquettes et d'un ou plusieurs lecteurs.

Figure 1 : Les composants dun systme RFID

2.2 Le lecteur

Figure 2 : Le lecteur

Le lecteur (ou interrogateur ) est compos dun transmetteur, dun rcepteur, dun microprocesseur et dune antenne qui diffuse les signaux mis par le transmetteur dans lenvironnement et reoit les signaux provenant des tags. Le lecteur peut tre fixe ou mobile, et son antenne peut prendre plusieurs formes, et par exemple sintgrer dans le cadre dune porte, pour une application de contrle daccs. Il met des signaux de radiofrquences qui vont activer les tiquettes en leur fournissant courte distance l'nergie dont celles-ci ont besoin. Trois bandes de frquences sont ddies aux applications RFID : Basses Frquences LF: < 135 kHz Haute Frquence - HF: 13,56 MHz Ultra Haute Frquence UHF: 860 960 Mhz

Une frquence plus leve prsente l'avantage de permettre un change d'informations (entre lecteur et marqueur) des dbits plus importants qu'en basse frquence. Les dbits importants permettent l'implmentation de nouvelles fonctionnalits au sein des marqueurs (cryptographie, mmoire plus importante, anticollision). Par contre une frquence plus basse bnficiera d'une meilleure pntration de la matire.

On vite bien entendu toute frquence qui serait en rsonance avec celle des molcules d'eau contenues entre autres dans le corps humain pour des raisons de scurit (principe du four micro-ondes).

2.3 Les radio-tiquettes (ou tag)


Les radio-tiquettes sont de petits objets, tels que des tiquettes autoadhsives, qui peuvent tre colles ou incorpores dans des produits. Ltiquette RFID se compose dune puce lectronique, dune antenne bobine ou imprime, et d'un substrat et/ou d'une encapsulation. La taille de la puce peut dsormais tre rduite celle dun point. L'antenne est souvent constitue dun motif mtallique imprim sur un circuit, un film lintrieur dune petite boite ou une tiquette.

Figure 3 : Les tiquettes

Les puces lectroniques contiennent un identifiant de type EPC (electronic product code).Cest un identifiant unique permettant d'identifier un objet dans une chane de production. Les normes actuelles dcoupent cet EPC selon trois formats 64, 96 ou 125 bits. Le format d'un EPC est le suivant : Norme de codage 01 Entreprise 0 000 A89 Code du produit 000 16F Numro de srie du produit 000 169 DC0

On distingue trois types dtiquette : les tiquettes passives, actives et semi-actives.

a. Les tiquettes passives :


Les tiquettes passives fonctionnent grce lnergie fournie par le lecteur : lantenne capte certaines frquences provenant du lecteur qui lui fournissent suffisamment dnergie pour lui permettre dmettre son tour son code didentification unique. Ces tiquettes passives sont programmes avec des donnes non modifiables, pour une capacit de 32 128 bits. Elles sont fournies vierges lutilisateur. Dans la majorit des cas, le fournisseur la dj munie dune identification. Lors de sa pose sur lobjet tracer, lutilisateur va crire les donnes qui lui seront utiles par la suite. Lors de la vie ultrieure de ltiquette, cette information pourra tre lue mais ne pourra tre ni modifie ni complte. Les tiquettes passives sont bon march et ont une dure de vie quasi illimite. Elles constituent le gros du march.

b. Les tiquettes actives :


Les tiquettes actives sont alimentes par une pile interne extra plate leur permettant d'mettre un signal. De ce fait, ils peuvent tre lus depuis de longues distances, contrairement aux tags passifs.

Cependant, une mission active d'informations signale tous la prsence des tags et pose des questions quant la scurit des marchandises. La prsence dune batterie permet galement lcriture de donnes, avec une mmoire allant jusqu 10 Kbits. Elles sont fournies vierges et pourront tre crites plusieurs fois, effaces, modifies et lues. Le nombre de rptition de ces oprations peut dpasser les 500 000 ou 1 million. Ces tiquettes actives ne dpassent pas 10 ans dge.

c. Les tiquettes semi-actives :


Les tiquettes semi-actives n'utilisent pas leur batterie pour mettre des signaux. Elles agissent comme des tiquettes passives au niveau communication. Mais leur batterie leur permet, par exemple, d'enregistrer des donnes lors du transport. Ces tiquettes sont utilises dans les envois de produits sous temprature dirige et enregistrent la temprature de la marchandise intervalle rgulier.

2.4 Communication lecteur-tiquette


Le lecteur transmet un signal selon une frquence donne vers un ou plusieurs tags situs dans son champ de lecture. Le champ lectromagntique alimente ltiquette et active la puce. Un dialogue stablit alors selon un protocole de communication prdfini, et les donnes sont changes.

Figure 4 : Communication lecteur-tiquette

Ltiquette ainsi rveille va excuter les programmes pour lesquels elle a t conue. Pour transmettre les informations quelle contient, elle va crer une modulation damplitude ou de phase sur la frquence porteuse. Le lecteur reoit ces informations et les transforme en code binaire. Dans le sens lecteur vers tiquette, lopration est symtrique, le lecteur met des informations par modulation sur la porteuse. Les modulations sont analyses par la puce et numrises. Une des particularits de ce principe est que plus la frquence porteuse est basse plus le nombre de tours de lantenne de la puce doit tre important pour crer un voltage suffisant pour alimenter la puce.

2.5 Problmes de collision


Lorsque plusieurs tags se trouvent dans le champ d'un mme lecteur, les communications sont brouilles par l'activit simultane des tags. La dtection de la collision est en fait une dtection d'erreur de transmission, l'aide d'un bit de parit ou d'un hachage. Ds qu'une erreur est dtecte,

l'algorithme d'anticollision est appliqu. Plusieurs mthodes d'anticollision ont t dveloppes. En voici les quatre principales : La mthode frquentielle : Chaque tiquette communique sur une plage de frquences diffrente avec le lecteur. Mais cette mthode nest pas envisageable grande chelle. La mthode spatiale : Avec une antenne directionnelle et puissance variable, le lecteur va couvrir petit petit chaque partie de l'espace pour communiquer avec chaque tiquette et l'inhiber, en attendant de le ractiver pour ensuite communiquer avec. Mais cette mthode est rendue inefficace lorsque deux tiquettes sont situes faible distance l'une de l'autre. La mthode temporelle : Le lecteur propose aux tiquettes une srie de canaux de temps dans lesquels ils peuvent rpondre. Les tiquettes choisissent de faon alatoire le canal de temps dans lequel ils vont rpondre. Si une tiquette est le seul rpondre dans ce canal de temps, il est dtect et inhib par le lecteur. S'il y a plusieurs tiquettes qui rpondent en mme temps, il sera ncessaire d'effectuer nouveau cette mthode. Petit petit, toutes les tiquettes sont connues et inhibes ; il suffit alors au lecteur de ractiver ltiquette avec lequel il souhaite communiquer. En pratique, le ct alatoire fait que la dure de cette mthode est inconnue. La mthode systmatique : Cette mthode consiste dtecter puis inhiber tour tour tous les tiquettes en parcourant l'arbre de toutes les possibilits d'identifiants. Par exemple, le lecteur envoie une requte du type Tous les tiquettes dont le premier bit d'identification est 1 doivent se manifester . Si une seule tiquette se manifeste, le lecteur l'inhibe, et s'intresse ensuite aux tiquettes avec pour premier bit 0, et ainsi de suite. En pratique, cette mthode peut parfois s'avrer longue.

2.6 Applications
Les tiquettes basses et hautes frquences possdent l'atout d'tre mondialement rpandues et utilisables avec trs peu de restriction, eu gard la rglementation travers la plante. Elles sont largement utilises pour du contrle d'accs aux transports publics ou des btiments scuriss (certaines puces peuvent mme stocker des informations biomtriques par example), de l'antivol ou du contrle de bagages dans les aroports. Elles concernent galement lidentification des animaux de compagnie, la traabilit des ovins et des bovins (dans le but de lutter plus efficacement contre les maladies, notamment la fivre aphteuse), les systmes de cls lectroniques sans serrures sur certains modles automobiles, des applications telles que la traabilit dans des bibliothques ou le suivi de produits industriels circulant sur tapis roulant. La distance de lecture entre l'tiquette et le lecteur est de l'ordre du mtre, voire un peu moins. Cette limitation peut tre rdhibitoire si l'on utilise un portail de lecture large de quelques mtres. C'est pourquoi la bande UHF, en permettant d'allonger les distances de lecture 2 ou 3 m, a les faveurs du secteur de la logistique et de la grande distribution pour effectuer, par exemple, une traabilit complte des produits vendus, depuis leur fabrication jusqu'au magasin, en passant par les fournisseurs et les transporteurs. Selon la standardisation pratique par l'organisme international EPCglobal, l'UHF est recommande pour la gestion des palettes et des conteneurs dans les entrepts et sur les docks. En revanche, dans cette gamme de frquences, l'eau absorbe certains rayonnements. Les mtaux provoquent aussi des rflexions et peuvent perturber la lecture. Pour limiter ces effets, les logisticiens de la grande distribution imaginent diffrentes solutions telles que des portails de lecture ou des palettes tournantes.

Mais le secteur des RFID est en pleine expansion et beaucoup dautres applications sont ltude : Remplacement et amlioration des codes-barres de la norme UPC/EAN : Les radioidentifiants sont en effet assez longs et dnombrables pour envisager de donner chaque objet un numro unique, alors que les codes UPC utiliss actuellement ne permettent que de donner un numro pour une classe de produits. Cette proprit de la radio-identification permet de tracer le dplacement des objets d'un endroit un autre, depuis la chane de production jusqu'au consommateur final. C'est cette proprit qui fait que la technologie est considre par de nombreux industriels de la chane logistique comme la solution technologique ultime tous les problmes de traabilit, notion essentielle depuis les crises sanitaires lies aux filires alimentaires. Un rfrigrateur capable de reconnatre automatiquement les produits qu'il contient, mais aussi capable de contrler les dates limites d'utilisation optimale (DLUO) des produits alimentaires prissables Linclusion dans les documents caractre officiel de tags RFID comme systme d'identification et de validation, notamment pour les passeports, mais aussi pour les permis de conduire. On peut ainsi envisager d'inclure des donnes biomtriques d'authentification afin de renforcer les dispositions de scurit. Le suivi de dlinquants : Le Royaume-Uni envisage de dsengorger les prisons en relchant les dtenus aprs leur avoir implant une puce RFID permettant de les suivre (alternative au bracelet lectronique utilis en France). Guidage des malvoyants en ville : Les malvoyants pourraient ainsi obtenir des informations de navigations (aux feux tricolores par exemple) grce une canne quipe d'un smartphone, capable de lire les donnes de puces. Les informations seront transmises l'utilisateur sous la forme d'un signal sonore via une oreille Bluetooth. Prise en charge des patients au moyen d'un bracelet RFID : La puce RFID, intgre dans un bracelet permettrait la localisation et l'amlioration de la prise en charge du patient. Ce dernier serait identifi et ses symptmes associs un degr de gravit (valuation sur une chelle chiffre). Le temps de parcours d'un malade dans un service des urgences serait ainsi grandement rduit. Lutte contre les faux billets : Pour faire face laugmentation de la vente de billets au march noir ou de la contrefaon de billets pour les vnements sportifs, des puces RFID seront de plus en plus frquemment insres aux billets. Cela permettra par exemple de comparer l'identifiant enregistr dans la mmoire de la puce la base de donnes de la billetterie, par le biais d'une transmission des informations contenues dans la puce la plate-forme de contrle gre par les organisateurs de la manifestation.

2.7 Controverses
La technologie RFID est au cur dune vive controverse relative aux risques d'atteintes plus ou moins graves la vie prive des consommateurs (et leur sant): les informations contenues par les marqueurs de passeports pourraient tre utilises pour agresser slectivement et par simple proximit physique les ressortissants de certaines nationalits ; des personnes ayant emprunt certains types de livres (politique, ...) pourraient tre marques comme indsirables dans les fichiers d'employeurs potentiels ou d'un tat rpressif ; Les puces RFID savrent en outre piratables et exposes aux virus. Un groupe de hackers a annonc la convention biannuelle Sixth HOPE New York avoir crack les scurits de la fameuse puce sous-cutane. De plus, comme les RFID communiquent de l'information sans cryptage, cela

simplifie le clonage ou la reprogrammation (un animal malade portant une puce RFID pourrait se voir affecter le profil d'un animal sain). Ces controverses mobilisent les lgislateurs europens, mais aussi les associations de consommateurs, notamment amricaines. La lgislation franaise prvoit une certaine protection de la vie prive en interdisant : le contrle clandestin (toute identification doit faire l'objet d'une indication visible) et l'usage des mmes appareils pour le contrle d'accs et le contrle de prsence. Certaines associations proposent le boycott de cette technologie qu'elles estiment liberticides.

3 Le kit RFID
3.1 Prsentation du matriel
Le matriel que nous avons utilis durant notre projet nous a t fourni par la socit Alien Technology. Cette entreprise implante en Californie, prs de Los Angeles, s'est spcialise dans les technologies d'identification par radiofrquences (RFID) ds ses dbuts en 1994.

Le kit de dveloppement que nous avons utilis est un ALR-8880 Enterprise. Il est compos : d'un lecteur RFID de 2 antennes et des cbles de TAGs d'un disque d'aide au dveloppement et d'une valise de transport 3.1.1 Le lecteur RFID

Le lecteur correspond la bote que l'on peut voir ci-contre. Il s'agit d'un botier contenant un processeur de type Intel XScale et quip d'un Linux embarqu. Il est quip de DSP, de FPGA ddis au traitement du signal, de 64 Mo de RAM et de 32 Mo de mmoire Flash. Il est possible de connecter 4 antennes sur ce botier. La communication entre le botier et le systme hte peut se faire de 2 manires diffrentes : Soit en srie via un port RS232 : cette mthode de connexion peut tre dans le cas d'un systme de proximit avec un seul utilisateur. Soit via le rseau car la bote accepte le protocole TCP/IP : c'est la technique que nous avons dcid de choisir car elle permet une utilisation en toile avec plusieurs utilisateurs.

Alimentation Terminal d'entres/sorties Port LAN Port srie

Figure 5 : Connexion du botier RFID

Comme on le remarque aussi sur la figure prcdente, il est possible de connecter un terminal d'entres/sorties. Il s'agit en fait d'une connectique de commande de relais qui peut permettre par exemple de la commande d'ouverture de porte. Sont aussi prsents 4 ports d'entres pouvant excuter un exercice rciproque. Nous avons donc disposition un systme trs performant et trs puissant capable de raliser plusieurs autres actions 3.1.2 Les antennes La communication RFID n'est possible qu'avec la prsence d'une antenne. Les antennes proposes par Alien Technology utilisent la polarisation circulaire afin de distribuer l'nergie UHF de manire uniforme. Ceci lui permet de pouvoir lire les TAGs avec la mme qualit, peut importe la direction dans laquelle ils se prsentent. La frquence de travail de ces antennes est comprise Figure 6 : Antenne entre 806 et 896 MHz. 3.1.3 Les TAGs Les TAGs sont les lments qui permettront aux utilisateurs d'tre identifis par notre programme. Il existe diffrents types de TAGs passif. De par leur composition ou de part leur forme, les diffrents TAGs que propose Alien Technology ont des rles diffrents suivant le but recherch. Pour notre projet nous utiliserons les TAGs Squiggle et SQ reprsents sur la premire ligne de la figure ci-contre. Ces deux TAGs de la norme EPC Class 1 Gen 2 sont gnralement utiliss dans les chanes de production pour lire les diffrents produits crs. Leur avantage rside dans leur polyvalence et dans la rapidit ncessaire leur programmation. Ces tags possdent donc une puce mmoire intgre contenant leur identifiant. La taille de cet identifiant est de 96 bits, soit 12 octets. Par exemple, un identifiant peut ressembler : A23E 835A FF54 3471 23AE FF1C

Figure 7 : Les tags

3.2 Connections avec la bote


Comme nous le comprenons, il est indispensable d'avoir un systme hte afin de piloter le lecteur RFID.

Figure 8 : Le systme complet

La communication peut donc se faire soit par port srie, soit par un port Ethernet permettant la mise en rseau du botier RFID. La connexion par RS232 est assez rapide, aprs un simple branchement, il suffit de configurer le port srie de la manire suivante : 115200 bits par seconde, 8 bits de donnes, sans parit mais avec un bit de stop. Nous ne nous tendrons pas sur la connexion srie car nous avons dcid d'utiliser la connexion TCP/IP. Pour cela, il suffit de brancher le lecteur sur un PC ou sur un routeur pour pouvoir accder au contrle du botier. Le gros avantage du matriel RFID fourni par Alien Technology rside dans le fait que ce dernier est compatible avec le systme d'allocation dynamique d'adresse IP : DHCP. Ceci nous permet de brancher directement le lecteur RFID sur un PC pour que son adresse soit reconnue et que l'on puisse communiquer avec lui. Dans le cas d'une connexion sans serveur DHCP, le botier est configur de la manire suivante : IP = 192.168.1.100 Masque de sous-rseau = 255.255.255.0 Passerelle = 192.168.1.1

Or, lors de notre connexion sur le rseau de l'ENSEIRB, nous avons d configurer manuellement notre adresse IP car le sous rseau de l'cole n'tait pas disponible pour configurer automatiquement le lecteur RFID. De ce fait, nous avons configur le botier avec l'adresse IP suivante : IP = 172.17.0.55

3.3 Protocole de communication hte lecteur RFID


Le Linux embarqu sur le lecteur RFID est compatible avec diffrentes API de communications. Nous avons dcid d'opter pour le langage Java qui nous permettra de crer l'interface entre notre programme et la machine cible. La socit Alien Technology propose une API (Application Programming Interface) trs pousse qui nous permet de commander la totalit des

fonctionnalits du programme. Dans cette partie, nous nous attarderons seulement sur les fonctions qui nous ont t utiles dans le dveloppement de notre programme.

3.3.1

Connexion au lecteur Pour pouvoir se connecter sur la bote nous allons nous connecter via la classe AlienClass1Reader :

Comme on peut le voir sur l'extrait prcdent, cette classe est incluse dans un package alien.enterprieRFID.reader. C'est ce groupe de classe qui va nous permettre de communiquer avec le lecteur RFID. Aprs avoir initialis correctement un lecteur, l'tape suivante est l'ouverture d'une connexion. Une fois cette connexion active, le programme peut excuter diffrentes commandes pour communiquer avec les TAGs prsents. Voici le schma de fonctionnement de notre systme

Figure 9 : Etapes de fonctionnement

L'initialisation se fait grce la fonction setConnection.


public void setConnection(java.lang.String connectionMethod)

Specifies a reader's connection method, given as a single string. If connectionMethod contains a colon, it is assumed to be a network address. In this case, connectionMethod is split at the colon, and the resulting two strings are passed to setNetworkConnection(String, int). Otherwise, it is assumed to be a COM port setting, and the entire string is passed to setSerialConnection(String).

initialiser un lecteur, il nous suffit de rentrer son adresse IP et le port de connexion. Dans notre cas, l'adresse IP sera un paramtre demand l'allumage du programme. connectionMethod - the "xxx.xxx.xxx.xxx:yyy" or "COMx" version of the address Cette dernire sera stocke dans un String appel IP. Il nous suffira de coder :

Donc pour Parameters:

reader = new AlienClass1Reader (); // cration objet reader.setConnection (IP, Port); // connexion IP

setPassword

public void setPassword(java.lang.String password)

Change the password this AlienClass1Reader uses to authenticate with the reader over the network. To change the actual password stored in the reader, use setReaderPassword(String). The reader can be operated over the network. When operated in this mode it uses a simple username/password authentication scheme to stop unwelcome visitors accessing it. A username/password pair is not required when operating the reader via serial setUsername connection. The default password setting is "password". NOTE: The password is case sensitive. public void setUsername(java.lang.String username)

Parameters: Change the username this AlienClass1Reader uses to authenticate with the reader over the network. To - change the actual username stored in the reader, use password the new password setReaderUsername(String). The reader can be operated over the network. When operated in this mode it uses a simple username/password authentication scheme to stop unwelcome visitors accessing it. De plus, un systme de scurit oblige s'identifier sur le lecteur RFID grce un nom

d'identifiantA et un mot de passe. Ces deux paramtres ne sont pas modifiables. Il s'agit de username/password pair is not required when operating the reader via serial l'identifiant alien connection. et le mot de passe est password. Pour rentrer ces spcifications, nous utilisons les commandes setUsername et setPassword.
The default username setting is "alien". NOTE: The username is case sensitive.

De la mme manire que prcdemment, il sera demand au dmarrage de notre programme les identifiants et mots de passe ncessaires la connexion sur la bote. Parameters: Il nous suffira de coder username - :the
new username

reader.setUsername (user); reader.setPassword (password);

Enfin, il suffit d'autoriser la lecture sur le botier. Pour cela, il est simplement ncessaire de lancer la fonction open. Rciproquement, il suffit de lancer la fonction close lorsque l'on souhaite fermer la connexion sur le lecteur.
reader.open (); public void finalize () { reader.close (); }

Nous sommes maintenant oprationnel pour commander le botier. Nous allons maintenant dtailler les fonctions de lecture et d'criture sur les TAGs. 3.3.2 Lecture des TAGs Pour lire les TAGs prsents aux environs du lecteur, nous utiliserons la fonction getTaglist. Cette fonction permet de rcuprer, sous la forme d'un tableau d'objets Tag, la liste des TAGs prsents.
getTagList

public Tag[] getTagList() throws AlienReaderException

Immediately scans the field for tags once and reports the results. If the reader is currently in Interactive mode, the reader immediately performs a full tag search (read and report) and returns its current internal taglist.

On implmentera dans notre code :

If the reader is in Autonomous mode, the reader returns its current internal taglist only.

reader.setTagMask ("ALL");// Ask the reader to read ALL tags The response is an array of Tags. The maximum number of tags that can be stored in the tag list is 1000. Tag tagArray[] = reader.getTagList ();

Tag est intressant car il lui est attribu une quantit de paramtres qu'il est trs facile de connatre. Le plus vident est bien sr son identifiant sur 96 bits qui correspondent sa the tag List as an array of Tags, or null if no tags carte d'identit. Ensuite, on peut connatre l'antenne qui a reu ce signal, le nombre de fois qu'il a t vu, quel moment, etc. Nous afficherons donc dans le "prompt" les diffrentes informations suivantes :
// Pour tous les tags vus : System.out.println ("ID:" + tag.getTagID () + ", Discovered:" + tag.getDiscoverTime () + ", Last Seen:" + tag.getRenewTime () + ", Antenna:" + tag.getAntenna () + ", Reads:" + tag.getRenewCount () );

Returns: L'objet

3.3.3

Ecriture des TAGs Il est essentiel de pouvoir programmer un TAG. En effet, si de nouvelles personnes dsirent entrer dans notre base de donnes, il nous faudra leur affilier un nouveau numro d'identifiant : ce numro sera celui programm sur 96 bits par l'utilisateur sur le TAG. En effet, chaque TAG vierge possde dj un numro que l'on devra modifier. Pour cela, nous utiliserons la fonction de la classe reader : programTag

programTag

public void programTag(java.lang.String tagID) throws AlienReaderException

Writes data to the tag ID space, using default loop-control parameters. This command takes a string with the desired tag ID data. The tagID string may be in the format "X X X X X X X X", "XX XX XX XX", "XXXX XXXX", or "XXXXXXXX", where "X" is one byte. The reader automatically generates the CRC for the supplied tag ID data and programs it into the appropriate bytes of ID space. This command does not lock the tag or program a LockCode.

Mais avant de programmer le TAG, on peut se fixer le nombre d'itrations possibles avant de Parameters: lancer sa programmation. On utilise pour cela les fonctions setProgAttempts( ) et
tagID - the string representation of the 8- or 12-byte tag ID to program reader.setProgReadAttempts( ) qui permettront de paramtrer les diffrentes tentatives.

reader.setProgAttempts (10); reader.setProgReadAttempts (10); reader.programTag (newTag);

//nbr de tentatives de prog //nbr d'essais de dtection du tag //String newTag : nouvel ID

4 Communication avec le boitier RFID


4.1 Fonctionnalits de la classe de communication
La communication avec linterface Java du botier RFID est gre par la classe AlienBeanCommunicator. Pour pouvoir fonctionner correctement cette classe doit fournir un certain nombre de services : Rcrire lID dun tag. Rcuprer intervalle rgulier la liste des tags prsents ct de lantenne du botier.

Lcriture des tags ne pose pas en soit de rels problmes car celle-ci est dj prvue par linterface Java du botier, de plus lcriture dun tag ce fait toujours linitiative de lutilisateur. Par contre lacquisition intervalle rgulier de la liste des tags pose problme. Car lon ne peut assurer de faon concurrente la gestion de linterface graphique et lacquisition de la liste des tags, pour remdier ce problme notre programme doit tre multithread. Lacquisition de la liste des tags se fait donc grce un thread ddi qui rcupre toutes les deux secondes par exemple la liste des tags. Toutefois pour rduire la consommation en ressources du programme, il na pas t jug utile de mettre jour linterface utilisateur aussi rgulirement. En fait seul les changements entre deux acquisitions successives de la liste sont pertinents. Le thread dacquisition ne doit donc mettre jour linterface utilisateur quaux moments o des changements ont eu lieu dans la liste.

Il sagit donc maintenant de grer de faon lgante les communications asynchrones entre le thread principal et le thread de communication. Le langage Java fournit un mcanisme efficace pour grer de telles communications, il repose sur le principe des listeners. En rsum la classe AlienBeanCommunicator doit avoir les fonctionnalits suivantes :

Classe

Fontionnalits Ecriture des tags

Outils Interface Java du botier RFID Thread

AlienBeanCommunicator Rcuprer la liste des tags toutes les 2s

Gestionnaire d'vnements Interface java du botier RFID

Figure 10 : La classe AlienBeanCommunicator

4.2 Multithreading
Le multithreading permet au programme une gestion concurrente de linterface graphique et de la liste des tags. Deux portions diffrentes de code sont donc excutes de faon simultane ( notre chelle de temps). En Java limplmentation dun thread peut se faire par deux moyens, soit la classe servant de thread hrite de la classe Thread, soit la classe implmente linterface Runnable. Cest cette dernire mthode qui a t choisi. Pour que la classe AlienBeanCommunicator implmente correctement linterface Runnable la fonction run() doit tre ajout la classe. Cest le code de cette fonction qui sera excut dans le thread.
Code 1 : Squelette de la classe AlienBeanCommunicator.
public class AlienBeanCommunicator extends AlienBeanEventManager implements Runnable { synchronized public void tagReader () synchronized public void tagWriter () // Lit la liste des tags // Ecrit sur un tag

public void run ()


{ try { tagReader (); Thread.sleep (2000); } catch(Exception e) {} } } // Lecture de la liste des tags // Mise en pose du thread pour 2 secondes

La classe ainsi dfinit il ne reste plus qu lancer le thread partir du thread principal en utilisant la fonction start() de la classe Thread :
Code 2 : Lancement dun thread
AlienBeanCommunicator abc = new AlienBeanCommunicator() Thread t = new Thread(abc); t.start();

4.3 Gestion des vnements


4.3.1 Le concept de la gestion dvnements Lorsque la liste des tags visibles par le botier RFID est modifie le thread de la classe AlienBeanCommunicator doit avoir sa disposition un moyen fiable permettant de mettre jour linterface graphique. Cette fonctionnalit peut tre implmente partir du modle Java de gestion des vnements. Considrons deux classe C1 et C2, la classe C1 reprsente un champ de texte, la classe C2 sert par exemple dtecter lappui sur une touche de clavier. Lappui sur une touche est un vnement asynchrone par rapport au droulement du programme cest donc la classe C2 de prvenir C1 lorsque une touche est enfonc. Le principe tant, ici, identique celui des interruptions logicielles. Java prvoit un mcanisme permettant dimplmenter un tel comportement. Tout dabord la classe C1 sabonne lvnement gnr par la classe C2 en fournissant une fonction de rappelle la classe C2. Puis, lorsquun appui sur une touche est dtect la classe C2 excute la fonction de rappelle fournie par C1. De cette faon C2 peut dcider de dclencher une action dont le comportement est dfini par C1.

Figure 11 : Gestion des vnements

4.3.2 La gestion des vnements dans le programme. La gestion des vnements en Java se fait grce un certain nombre dlments : Une classe de gestion des vnements : AlienBeanEventManager Une classe reprsentant lvnement : AlienBeanEvent Une interface dfinissant la ou les fonctions de callback appeler : AlienBeanListener

Tableau 1 : Classe implmentant la gestion des vnements

Nom AlienBeanEventManager AlienBeanEvent AlienBeanListener

Fonction classe de gestion des vnements classe reprsentant lvnement interface dfinissant la ou les fonctions de callback appeler

Utilisation Est hrite par lobjet communiquant X Est implmente par lapplication

Dans notre application la classe MainFrame implmentant lIHM principale du programme prend la place de lApplication et se comporte alors comme un couteur (Listener), la classe AlienBeanCommunicator prend celle de lObjet communiquant. Notre systme de gestion des vnements ne comporte quun seul vnement alienBeanUpdated() qui correspond un changement dans la liste des tags visibles par le botier RFID. Lorsquun changement est dtect la fonction de callback alienBeanUpdated() dfinie par linterface AlienBeanListener et implmente par la classe MainFrame est appele. Bien sr dautres vnements auraient pu tre grs, il aurait alors fallu dfinir dautres vnements au sein de linterface AlienBeanListener. 4.3.2.1 La classe AlienBeanEventManager Cest cette classe qui gre la liste des objets lcoute des vnements gnrs par la classe corespondant lobjet communiquant, elle est hrite par la classe AlienBeanCommunicator qui peut alors gnr lvnement alienBeanUpdated. Elle implmente un certain nombre de fonctions :
Tableau 2 : Les membres de la classe AlienBeanEventManager

Nom void addAlienBeanListener() void removeChangeListener() void fireAlienBeanUpdated()

Arguments AlienBeanListener x AlienBeanListener x ArrayList tagList

Utilit Permet dajouter un nouveau listener la liste des objets lcoute des vnements. Retirer un listener liste. Lorsque la liste change, la fonction alienBeanUpdated() de chacun des listeners abonns est excute. La liste des tags est passe en paramtre.

4.3.2.2 La classe AlienBeanEvent Un objet de la classe AlienBeanEvent est instancier au moment de lappel de la fonction fireAlienBeanUpdated(). Cest cet objet qui sert de support de communication entre lapplication et lobjet communiquant. Dans notre cas cet objet empaquette la nouvelle liste de tags. Il est pass en argument de la fonction alienBeanUpdated() appartenant lobjet MainFrame, cest cette fonction qui ce charge ensuite de mettre linterface jour.
Code 3 : La classe AlienBeanEvent
class AlienBeanEvent extends EventObject { ArrayList tagList; public AlienBeanEvent (Object source, ArrayList tagList) { super (source); this.tagList = tagList; } }

4.4 La classe AlienBeanCommunicator


4.4.1 Cration dune instance de classe Une instance de la classe AlienBeanCommunicator peut tre construite grce au constructeur suivant :
public AlienBeanCommunicator(String IP, int Port, String user, String password) throws AlienReaderException

Un objet de la classe AlienClass1Reader appartenant linterface java du botier RFID est instancier dans le constructeur, cest lui qui est utilis comme interface de communication avec le botier. Comme cette objet est utilis par les fonctions tagReader() et tagWriter() qui ne sexcutent pas dans le mme thread, celles-ci doivent tre dclar synchronized. 4.4.2 La fonction tagReader() La fonction tagReader() de lobjet AlienBeanCommunicator permet lacquisition de la liste des tags auprs du botier RFID. Elle est excute intervalle rgulier par la fonction run().
Code 4 : La fonction tagReader() synchronized public void tagReader () throws AlienReaderException { Tag tagArray[] = reader.getTagList (); ArrayList tempTagList = new ArrayList (); boolean listChanged = false; /* code permettant de savoir si la liste changer */


/* fin du code */ if (listChanged == true) { tagList = tempTagList; fireAlienBeanUpdated (tagLis); // Gnre lvenement }

4.4.3 La fonction tagWriter() La fonction tagWriter() de la classe AlienBeanCommunicator permet de rcrire lID dun tag.

synchronized public void tagWriter (String oldTag, String newTag) throws AlienReaderException ; Ses arguments permettent de slectionner un tag grce sa chane didentification oldTag et de changer cette chane par la chane newTag.

4.5 Architecture gnrale du systme de communication

Figure 12 : Diagramme de classe UML du systme de communication

5 Gestion de la base de donnes : la classe AlienBeanDB


Le but de notre application tant didentifier des personnes grce leur tag, il tait ncessaire davoir recours un systme de base de donnes. En effet, seul un ID peut tre enregistr sur le tag. Il faut donc un systme permettant de stocker et de restituer les informations de lutilisateur correspondant cet ID. Notre choix sest immdiatement port sur le programme mySQL pour grer cette base de donnes. En effet, le programme de base de donnes mySQL est un des plus utilis ce qui assurerait notre application une compatibilit avec un grand nombre de base de donnes dj existantes. De plus mySQL est open source (et donc gratuite, ce qui tait indispensable dans notre cas) et trs performante. Afin de pouvoir communiquer depuis notre application Java avec la base de donnes mySQL nous utilisons la librairie de drivers JDBC pour mySQL. Nous avons donc ensuite pu crer une classe (AlienBeanDB) possdant toutes les fonctions permettant de communiquer avec la base de donnes.

Figure 13 : Communication avec la base de donnes

5.1 Les attributs


Cette classe possde trois attributs : DBname, qui correspond au nom de la base de donnes que lon utilisera, un lment Statement stmt et un lment Connexion con, ncessaires pour les diffrents appels de fonction de communication avec la base de donnes.
Code 5 : Attributs de la classe AlienBeanDB

String DBname; Statement stmt; Connection con;

5.2 Utiliser le connecteur JDBC


Le connecteur JDBC propose un certain nombre de fonctions qui permettent de communiquer avec la base de donnes. 5.2.1 executeUpdate Cette fonction de la classe Statement permet denvoyer un ordre la base de donne :

Code 6 : Utilisation de la fonction executeUpdate

Statement stmt; stmt.executeUpdate ("Requte MySQL");

5.2.2

executeQuery : Cette fonction de la classe Statement permet denvoyer une requte de demande dinformation la base de donnes. La rponse cette demande est stocke dans un lment de la classe ResultSet. Il est alors possible de parcourir les lignes de rsultats avec la fonction next et de les rcuprer avec la fonction getString :
Code 7 : Utilisation de la fonction executeQuery

String res; ResultSet rs; rs = stmt.executeQuery("Requte MySQL"); rs.next(); res = rs.getString("Nom de la colonne");

5.3 Le crateur
Le crateur de la classe initialise la connexion avec la base de donnes. Il faut donc lui prciser son nom, son adresse ainsi que lutilisateur et le mot de passe avec lesquels on se connecte. Il cre aussi les attributs stmt et con. Le code du crateur est donc le suivant :
Code 8 : Crateur de la classe AlienBeanDB

public AlienBeanDB ( String DBname, String url, String user, String password){ this.DBname = DBname; //Register the JDBC driver for MySQL. try{ Class.forName("com.mysql.jdbc.Driver"); } catch(Exception e ) { e.printStackTrace(); }//end catch try { con = DriverManager.getConnection(url, user, password); //Display URL and connection information System.out.println("URL: " + url); System.out.println("Connection: " + con); //Get a Statement object stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); } catch(SQLException e ) { System.out.println(e); }//end catch }

5.4 La fonction dinitialisation


Nous avons ensuite implment une fonction dinitialisation qui cre la base de donnes DBname et la table members dans laquelle seront stocks les donnes des membres. Pour notre application, la table members contient les informations suivantes :
Tableau 3 : Table members

Id 3008 33B2 DDD9 0140 3505 0027 3008 33B2 DDD9 0140 3505 0028 3008 33B2 DDD9 0140 3505 0029

firstname Elise Michael Dorian

lastname Malard Grand Santiago

picture_addr ./ressources/malarde.jpg ./ressources/grand.jpg ./ressources/santiago.jpg

Id : Il sagit du numro enregistr dans le tag. Comme chaque tag nest enregistr quune fois dans la base de donnes, lId est utilis comme index de la table. firstname : Prnom du membre correspondant lastname : Nom du membre picture_addr : Adresse absolue de la photo du membre

De plus cette fonction cre deux utilisateurs : alienroot : Cet utilisateur peut consulter et modifier toutes les entres de la table members. alien : Cet utilisateur ne peut que consulter les entres de la table members.

Suivant les droits de la personne utilisant notre programme, elle sera donc logu en alienroot ou en alien sur la base de donnes. Le code de la fonction dinitialisation de la base de donnes est donc le suivant :
Code 9 : Fonction dinitialisation de la base de donnes

void initDatabase (String url){ try{ //Creation base de donnes stmt.executeUpdate("CREATE DATABASE " + DBname ); stmt.executeUpdate("USE " + DBname); //Creation de la table des membres stmt.executeUpdate("CREATE TABLE members (Id VARCHAR(29), firstname VARCHAR(20), lastname VARCHAR(20), picture_addr VARCHAR(100), PRIMARY KEY(Id))"); //Creation utilisateur alienroot stmt.executeUpdate("CREATE USER alienroot IDENTIFIED BY 'password'"); stmt.executeUpdate("GRANT SELECT, DELETE, INSERT, UPDATE ON members TO 'alienroot'@'" + url + "' IDENTIFIED BY 'password'");

//Creation utilisateur alien stmt.executeUpdate("CREATE USER alien IDENTIFIED BY 'password'"); stmt.executeUpdate("GRANT SELECT ON members TO 'alienroot'@'" + url + "' IDENTIFIED BY 'password'"); } catch(SQLException e){ System.out.println(e); }//end catch }

5.5 La classe Member


Afin de simplifier la programmation et de faciliter dventuelles modifications ultrieures, nous avons dcid de crer une classe Member. Cette classe contient comme attributs les diffrents champs de la table members et possdent deux constructeurs, lun sans paramtres et lautre remplissant tous les attributs. Ainsi, plutt que dcrire des fonctions qui manipulent chaque champ de la table members indpendamment, il suffira de manipuler des objets Member. De mme, lorsque les autres classes dsireront rcuprer des informations sur les membres, plutt que de leur passer une une, il suffira de leur passer un objet Member.

Member
String Id String firstname String lastname String picture_addr public Member() public Member(String Id, String firstname, String lastname, String picture_addr)

Figure 14 : Diagramme de la classe Member

5.6 Les fonctions de communication avec la base de donnes


Grce aux fonctions du connecteur JDBC (cf. 3.2) Il est possible de crer simplement les fonctions qui permettent de communiquer avec la base de donnes : void addMember (Member member) : Cette fonction ajoute linformation de lobjet member dans une nouvelle ligne de la table members.

Member getMember (String Id) : il sagit du procd inverse, partir dun numro dId, cette fonction rcupre toutes les informations correspondantes dans la base et cre un objet Member dont ils seront les attributs. boolean isMember (String Id) : Cette fonction permet deffectuer un test rapide. Si un membre possdant lId pass en paramtre est prsent dans la base de donnes, elle retourne true, sinon, elle retourne false. void deleteMemberById(String Id) : Permet de supprimer un membre de la base de donnes en lui passant son Id. void close () : Il sagit de la fonction fermant la connexion avec la base de donnes.

Cela nous donne le diagramme de classe final suivant pour la classe AlienBeanDB :

AlienBeanDB
String DBname Statement stmt Connection con public AlienBeanDB ( String DBname, String url, String user, String password) void initDatabase (String DBname, String url, String user, String password) void addMember (Member member) Member getMember (String Id) boolean isMember (String Id) void deleteMemberById (String Id)

Figure 15 : Diagramme de la classe AlienBeanDB

6 Linterface graphique
6.1 La fentre de connexion
Lapplication est dveloppe sous la forme dune interface graphique. Lorsque celle-ci est lance une premire bote de dialogue souvre. Ladresse du botier RFID ainsi que le port dcoute (23) y sont spcifis. Pour que laccs au logiciel soit limit aux personnes autorises plusieurs identifiant sont demands. Tout dabord il y a le nom dutilisateur et le mot de passe du botier RFID ensuite il y a le nom dutilisateur et le mot de passe de la base de donnes.

Figure 16 : fentre de connexion du logiciel Tableau 4 : Les diffrents utilisateurs

Utilisation Utilisateur Mot de passe Privilge Botier RFID alien password root Base de donnes alien password lecture Base de donnes alienroot password lecture, criture Les utilisateurs et la base de donnes sont crs automatiquement en excutant la classe AlienBeanDB. Ladresse par dfaut de la bote est le 172.17.0.55.

6.2 La fentre principale

Figure 17 : la fentre principale

Une fois lutilisateur connect, linterface principale apparat. Celle-ci permet de voir les tags prsents ct des antennes, elle permet aussi de grer de faon simple la base de donnes en supprimant ou ajoutant des utilisateurs.

6.2.1 Suppression dutilisateur Pour supprimer un utilisateur il suffit de le slectionner dans la liste de gauche puis dappuyer sur le bouton supprimer. Une fentre apparat pour indiquer que lutilisateur a t supprim. Si lon tente de supprimer un utilisateur sans en avoir le droit une fentre derreur apparat.

Figure 18 : Erreur, lutilisateur nest pas habilit a supprimer un utilisateur

6.2.2

Ajout dutilisateur

Figure 19 : Fentre dajout dutilisateur

En cliquant sur le bouton ajouter il est possible dinsrer un nouvel utilisateur dans la base de donnes. Le premier tag de la liste de tags dtects se verra affecter un nouvel utilisateur. Si le tag est dj affect une erreur se produit et il faut, alors, supprimer lutilisateur propritaire du tag. En cochant la case Ecrire le tag il est possible de rcrire lID du tag pendant lopration.

7 Conclusion
Lapplication que nous avons dveloppe rpond bien aux demandes de notre cahier des charges. Elle permet didentifier quelquun grce son tag et dafficher les informations le concernant. De plus, en utilisant le langage de programmation JAVA, la connectivit IP avec le lecteur RFID et la base de donne MySQL nous avons assur notre programme une grande portabilit. Il est possible de lutiliser nimporte o et sur nimporte quel systme. Nous avons ainsi rpondu aux contraintes de compatibilit qui nous ont t imposes. Pour le rendre encore plus autonome, nous avons implment les fonctions permettant dexcuter les oprations les plus courantes sur la base de donnes (ajout, suppression de membre) ainsi que la fonction permettant dcrire lID dun tag. Il est donc possible de saffranchir de linterface propose par Alien ainsi que du programme MySQL pour une utilisation basique. Cependant, il reste quelques fonctions pouvant savrer utile qui pourrait tre ajoutes notre application comme le rglage de la puissance ou des fonctions de recherche simple dans la base de donne. Il ny aurait alors plus du tout besoin de passer par les programmes des constructeurs tiers. Il serait mme possible dembarquer totalement lapplication sur une carte avec un OS embarqu pour une utilisation totalement automatique (laffichage du contenu dun caddie par exemple). Par contre, il semble impossible dutiliser cette application dans le cas dauthentification requrant un haut niveau de scurit car, les ID des tags ntant pas crypts, nimporte qui possdant lquipement adquat peut les lire et les copier. Ce projet nous a beaucoup apport. Dabord, il nous a appris rechercher des solutions en fonction de contraintes relativement lche. Ainsi, comme aucun langage de programmation ne nous tait impos, il nous a fallu faire nos propres choix. Puis, nous avons pu approfondir nos connaissances sur des notions avances de programmation (multithreading, IHM) et des langages trs utiliss (JAVA, SQL). De plus, nous avons mis profit nos connaissances en matire de connectivit IP embarque lors des connexions avec le lecteur RFID. Enfin, nous avons pu tester notre facult dadaptation en travaillant sur un systme totalement inconnu. Nous avons, partir des documents du constructeur et de nos exprimentations personnelles pu comprendre les fonctionnalits qui nous taient utiles et dvelopper notre programme partir de cela.