Borne NFC

De Wiki d'activités IMA

Présentation


Vidéo HD

Objectif de PROJET

Borne NFC pour le commerce pour le client de localiser les marchandises dans leurs téléphones androids .

Le but de ce projet est de concevoir un dispositif permettant à un client de sélectionner des articles à son domicile sur le site web du vendeur puis de venir les examiner en magasin. Les articles sont enregistrés sur un mobile puis communiqués à une borne sur place via le protocole sans fil NFC.

Préparation du projet

Matériel requis

  • Tablet Android
  • Shield NFC
  • Téléphone NFC (Google Nexus S)

Matériel à acheter

  • Platine ADK
  • Quincaillerie (Bosch) pour le pied

Connaissances prérequis

  • Base de données
  • JAVA

Avancement du projet

Réaliser la 1er petite étape qui peux gérer les base de données SQlite pour téléphone

Objectifs suggérés par les encadrants

Réalisations concrètes

Séances

Première séance

Commencer à faire la recherche sur le SQLite , et faire une petite application sur AVD qui peux réaliser la création de base de donnée , modifier , insérer et supprimer .

SQLite est une base données petite et voire mếme qu'on peux le négliger durant la conception de l'application.

On peux essayer chercher les infos de références sur le site connu http://developer.android.com

on peux chercher les 2 classes SQLiteOpenHelper et SQLiteDatabase

SQLiteOpenHelper

Class Overview

[[A helper class to manage database creation and version management.

You create a subclass implementing onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int) and optionally onOpen(SQLiteDatabase), and this class takes care of opening the database if it exists, creating it if it does not, and upgrading it as necessary. Transactions are used to make sure the database is always in a sensible state.

This class makes it easy for ContentProvider implementations to defer opening and upgrading the database until first use, to avoid blocking application startup with long-running database upgrades.

For an example, see the NotePadProvider class in the NotePad sample application, in the samples/ directory of the SDK.

pour les fonctions plus détaillées , consulter sur

http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html]]

SQLiteDatabase

Class Overview

Exposes methods to manage a SQLite database.

SQLiteDatabase has methods to create, delete, execute SQL commands, and perform other common database management tasks.

See the Notepad sample application in the SDK for an example of creating and managing a database.

Database names must be unique within an application, not across all applications.

pour les fonctions plus détaillées , consulter sur

http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html

Deuxième séance

Réaliser une petite application laquelle nous permette de gérer les bases de données par SQlite .

Cette petite application qui nous permette de créer , insérer , supprimer , chercher les bases de données ce qu'on veux .

On peux regarder le contenu de base de données par entrer dans le terminal de Windows (Ctrl+R)

Taper la commande adb shield , qui nous permette d'entrer dans le terminal de téléphone ( laquelle est constituée de LINUX).

on va aller dans le chemin ./data/data , ce répertoire est pour stocker les fichiers de Base de Données de chaque app.

On peux choisir notre base de données et entrer par shield -3

puis on peux taper les commandes de SQL pour faire la manipulation ce qu'on veux

comme .schema nous permmette d'afficher la structure de notre base de données

select * from user ; nous permette de regarder les contenues de cette table

puis on commence à installer l'arduino IDE dans l'ordinateur de l'école . Et essayer de chercher les infos de NFC de la part de le Arduino ,

voici est guide de NFC de la part arduino sur site internet http://seeedstudio.com/wiki/NFC_Shield

et on doit aller sur ce site de télécharger la biblothèque pour le NFC IDE , comme on doit utiliser les fonctions spéciaux .

On a essayé d'utiliser les exemplaires fournis par IDE de testé la ID de badge Mifare quand on le rapproche , il va nous afficher les ID de tag .

comme le badge Mifare fonctionne à l'état passive , l'étape suivant est de utiliser notre téléphone laquelle est déjà installé le NFC de le laisser fonctionner à l'état active et donner les données vers Arduino .

Les idées ce qu'on a est de laisser passive de la part de Arduino par la fonction ????

Troisième séance

Le troisième séance qu'on a réussi de réaliser une app qui peux détecter la présence de Mifare carte que le prof fourni , l'app est vraiment façile mais qu'il y a des choses qu'il faut faire attention .

L'étape de réalisation est suivant

1. sous le logiciel eclipse , dans le projet , AndroidManifest.xml , on met un filtre sous l'activity correspondant

           	<intent-filter>
          			<action android:name="android.nfc.action.TECH_DISCOVERED" />
      			</intent-filter>
    			<meta-data android:name="android.nfc.action.TECH_DISCOVERED"
          			android:resource="@xml/nfc_tech_filter"
      			/>

içi quand l'action a reçu une action TECH_DISCOVER , il va le comparer si cette action est l'action de démarrage de APP ou pas , si oui , l'app va être démarrer automatiquement .

sous le répertoire rex->xml, on crée un fichier de nfc_tech_filter.xml

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

   <tech-list><tech>android.nfc.tech.IsoDep</tech></tech-list>
   <tech-list><tech>android.nfc.tech.NfcA</tech></tech-list>
   <tech-list><tech>android.nfc.tech.NfcB</tech></tech-list>
   <tech-list><tech>android.nfc.tech.NfcF</tech></tech-list>
   <tech-list><tech>android.nfc.tech.NfcV</tech></tech-list>
   <tech-list><tech>android.nfc.tech.Ndef</tech></tech-list>
   <tech-list><tech>android.nfc.tech.NdefFormatable</tech></tech-list>
   <tech-list><tech>android.nfc.tech.MifareClassic</tech></tech-list>
   <tech-list><tech>android.nfc.tech.MifareUltralight</tech></tech-list>
   

</resources>

attention , la forme que sdk nous donne est

<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">

   <tech-list>
       <tech>android.nfc.tech.IsoDep</tech>
       <tech>android.nfc.tech.NfcA</tech>
       <tech>android.nfc.tech.NfcB</tech>
       <tech>android.nfc.tech.NfcF</tech>
       <tech>android.nfc.tech.NfcV</tech>
       <tech>android.nfc.tech.Ndef</tech>
       <tech>android.nfc.tech.NdefFormatable</tech>
       <tech>android.nfc.tech.MifareClassic</tech>
       <tech>android.nfc.tech.MifareUltralight</tech>
   </tech-list>

</resources>

dans ce cas , ça ne marche pas , içi ça veux dire que le device içi qu'il doit pouvoir de supporter tous les standard simultanément.

mais le premier cas dit que si il y a un de ces stardards est détecté , il va réveiller app correspondant .

et après cette configuration , ça peux marcher pour le téléphone de détecter le mifare carte et récupérer les infos.

Quatrième séance

On a testé la communication entre le téléphone mobile et l'ordinateur par le socket , mais grâce à la rappel de prof , ce n'est pas la meilleur solution , la meilleur solution est on utilise le QR Barcode de donner les infos vers le téléphone mobible .

Sur la génération de QR Barcode , il est déjà existé sur le site

http://phpqrcode.sourceforge.net/

on va aller sur ce site de télécharger le code qui peux nous laisser d'utiliser PHP de générer le QR Code.

De la part de téléphone mobile , on va aller sur le site çi-dessous de télécharger une application BarcodeScanner qui nous permette de scanner le QRCode de l'écran de l'ordinateur.

http://code.google.com/p/zxing/downloads/detail?name=BarcodeScanner4.0.apk

On a testé , ça marche très bien , l'app va utiliser le caméra , quand on cible le caméra vers QRCode barre , les données(tous forme de texte) va être scanné .

Maintenant ce qu'on va faire est de créer une app qui nous permette de récupérer les données de QRCode , on utilise "intent" de faire la transmission de données .

D'abord il nous faut aller sur ce site de télécharger les 4 fichiers(les fonctions sont bien défini dedans ) et les mettre dans la source de code sur éclipse

http://code.google.com/p/zxing/source/browse/trunk/android-integration/src/com/google/zxing/integration/android/

on va trouver

import android.support.v4.app.Fragment;

il y a erreur .

c'est parce qu'on a pas importé dans notre projet

on cherche android-support-v4.jar sous le répertoire SDK

puis taper alt+Enter ->java Build Path->Add External JARS on peux insérer ce jar dans eclipse , l'erreur va disparaître .

on peux commencer d'écrire notre programme.

le programme n'est pas difficile

on intancie

IntentIntegrator integrator = null;

integrator = new IntentIntegrator(CodeBarreActivity.this);


integrator.initiateScan();

on créé une fonction

public void onActivityResult(int requestCode, int resultCode, Intent intent) {

   	    IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent);
   	    if (scanResult != null) {
   	    	Log.i("info", scanResult.getContents());
   	      // handle scan result
   	    }
   	    // else continue with any other code you need in the method
   	 
 }

on peux obtenir le résultat par scanResult.getContents().

quand on exécute ce programme , d'abord le programme va lancer l'app Barcode Scanner , quand on a réussi de scanner , l'app va revenir laquelle qu'on a lancé et afficher le résultat .

Cinquième séance

Pour cette séance , comme il y a déjà 3 semaines je touche pas la partie NFC , je utilise du temps de réviser ce que j'ai fait avant , puis je commençer à programmer le NFC de la part de Arduino .

sur ce site

http://seeedstudio.com/wiki/NFC_Shield

il y a 2 libraries

Arduino 1.0 Lib compatible with MEGA for NFC Shield -- cette bilblothèque ça peux fonctionner , mais il nous fourni seulement des fonctions fondamentales
Arduino Lib for NFC Shield -- cette library nous fourni presque tous les fonctions , mais quand on compile , il y a des erreurs

donc on rajoute des fonction de Arduino Lib for NFC Shield la quelle Arduino 1.0 Lib compatible with MEGA for NFC Shield n'existe pas dans le Arduino 1.0 Lib compatible with MEGA for NFC Shield .

puis on compile , l'erreur a disparu .

Sixième séance et Septième

Comme je suis encore débutant de Android , je trouve que quand je regarde le programme en ligne , je ne sais pas du tous comment ça fonctionne , donc je me décide de reprendre les cours de Android sont inévitable Je commence à toucher le UI comme button , imageButton , tab , listeview , imageview , gallery .... et puis les éléments supplémentaire handler , mp3 , codec xml par SAX ou DOM , Broadcast , service , intent , SQLite , Animation , WIFI .Socket , bluetooth , ContentProvider , http ,appwidget , JSON , QRCode(par php) , NFC


Huitième séance

Cette semaine mon objectif est de concevoir un programme qui peux nous permette de faire l'émission par le standard ISOA , et détecter que si le programme d'exemplaire de arduino qui nous a déjà fourni auparavant peux bien fonctionner sur le mobile Arduino par P2P ou pas .

parce qu'on fait , quand on lance le programme dans le plaque arduino , et on utilise notre téléphone mobile de rapproche vers la plaque , sur le terminal d'affichage de l'arduino , il va afficher une caractère "{" , le prof a dit que peut-être est parce que la pertubation de champ mais je ne pense pas comme si c'est pertubation de le champ , c'est pas très raisonnable qu'il affiche toujours le même caractère .

Donc je pense que peut-être est parce qu'il y a de service de NFC qu'il est déjà lancé dans le plan arrière . Comme la service a une priorité important justement après l'activity présente sur l'écran courant .

Donc j'essaie de changer la priorité de mon programme par définir une Foreground-dispatch système , ce système nous permette d'avoir la priorité plus important quand qu'il y a des activiys lesquelles ont défini le même standard.

Et puis suivant j'essaie de concevoir un programme de NFCA qui nouçs permette de faire l'émission par NFCA , le programme est presque finir , sauf je ne sais pas comment on peux instancier l'objet NFCA.

il faut demander le prof le cours suivant.

Neuvième séance

Cette séance on a réalisé le foreground système quand une carte nfc rapproche et l'écran est une activity NFC , il ne va pas afficher un bloc de dialogue de choisir laquelle activity(supporter NFC) qu'on veux lancer . ça veux dire que l'activity présente a la plus important priorité.

Et on a aussi réaliser un programme qui peux transférer les données par le standard ISO A . mais ça ne peux pas marcher , à mon avis , c'est parce que P2P qu'on a pas besoin de créer un tag , mais la class NFCA il faut détecter un tag on peux encore instantacier et utiliser ses fonctions. Donc je suppose que ISO A ne marche pas

Et heureusement quand je fais le test , parce que avant j'ai déjà dit que quand on utilise le programme de laisser arduino fonctionner comme un target et quand on rapproche le téléphone mobile , il peux afficher '}' , et je trouve en même temps , sur le terminal de eclipse , il va afficher tag xxx, NFC Service détecter un NFC target , donc je prévois il y a un service est déjà installé dedans et ce que je vais faire est de chercher le code source de NFCService et référencer .

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android-apps/2.3_r1/com/android/nfc/NfcService.java?av=f

je trouve le code source au-dessus.

Dixième séance

J'essayais d'installer la service de NFC sur Android personnellement , pas réussi , comme la il y a trop de liaison avec les autres fichier. Donc à la fin , j'essai d'améliorer et composer les choses ce que j'ai fait . split les données et les stocker dans les bases de données , lister par adapter et activitylist

Résultats

Etablir le serveur par apache (fait) base de données SQLite(fait) QRCode (fait) Android NFC avec milfare carte(fait) Android NFC avec Arduino NFC Shield(échec)


Rapport

media:RAPPORT-NFC.pdf