Borne NFC : Différence entre versions

De Wiki de Projets IMA
(Préparation du projet)
Ligne 17 : Ligne 17 :
 
=== Matériel à acheter ===
 
=== Matériel à acheter ===
  
<ul>
+
 
  <li>Platine ADK</li>
+
* Platine ADK
  <li>Quincaillerie (Bosch) pour le pied</li>
+
* Quincaillerie (Bosch) pour le pied
</ul>
 
  
 
=== Connaissances prérequis ===
 
=== Connaissances prérequis ===
<li>Base de données </li>
+
 
<li>JAVA </li>
+
* Base de données
 +
* JAVA
 +
 
 
== Avancement du projet==
 
== Avancement du projet==
  

Version du 28 mars 2012 à 07:54

Présentation

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 .


Résultats