Carl de Billy
Tout ce que vous voulez de Carl, ou presque.
Carl de Billy
Navigation
  • Carl, le gars…
  • Parcours professionnel
You are here: Home › Développement › Programmez vos tags NFC avec Windows 8

Programmez vos tags NFC avec Windows 8

2012-10-17 | Filed under: Développement, NFC, Windows 8 and tagged with: ndef, nfc, smartposter, tags, Windows 8

Peut-être que peu de programmeurs ont eu la chance de faire du NFC avec Windows 8 pour le moment. Pourquoi ?  Eh bien tout simplement parce que le système d’exploitation n’est pas encore sorti (mais bon… tous les bons programmeurs l’utilisent déjà, non ?), ou peut-être parce que trouver des lecteurs NFC est excessivement difficile pour le moment et qu’il faut attendre encore quelques semaines… mais soyez patient, ça vaudra la peine!

Entre temps, je vais vous donner l’eau à la bouche pour vous montrer à quel point il est facile de programmer une puce NFC a l’aide de l’API de Windows 8 en quelques lignes de code.

Le fonctionnement

Le fonctionnement de la technologie NFC est plutôt simple.  Faisant partie de la famille des technologies RFID (Radio Frequencies IDentification, ou communément appelée la Radio-Identification en français), le champ proche (Near Field) n’existe qu’à quelques dizaines de millimètres de distance tout au plus.  L’intérêt est tout là justement : plus la distance est limité, meilleure est la discrétion des échanges.

Tout comme pour la technologie RFID, il est possible d’avoir des puces passives qui n’ont besoin d’aucune alimentation pour fonctionner.  Le lecteur fournit l’induction nécessaire pour alimenter la puce et lui permettre de communiquer via des fréquences prédéfinies.  Dans le cas du NFC, il s’agit de la fréquence 13,56 MHz.

Lorsque 2 appareils alimentés communiquent ensemble, on dit que la connexion est active-active.  Lorsqu’un appareil doit alimenter une puce à proximité pour communiquer avec, on parle alors de connexion active-passive.  Les communications active-active ont quelques avantages car elles permettent une communication plus rapide.

Cependant, la majorité du temps les données à transférer consistent en un url de quelques caractères et la vitesse de transmission est normalement entre 100 et 800 kbit/seconde, ce qui représente de 12 à 100 caractères par seconde.  Donc transférer un message qui contient un url d’une vingtaine de caractères peut prendre d’un huitième de seconde à un peu plus d’une seconde.  Ce n’est pas très rapide, mais amplement suffisant pour les besoins.  Surtout que les données comme les urls peuvent être abbrégés pour prendre moins de place.

Je n’irai pas plus loin dans l’explication du fonctionnement de cette technologie pour plusieurs raison : je ne suis pas un expert en électronique et en radio-communications et mon objectif est plutôt de vous parler de son utilisation et moins de son fonctionnement.

Les tags

Les tags sont ni plus ni moins qu’une puce passive que vous pouvez acheter à quelques cents l’unité.  Elles se présentent sous plusieurs formes – autocollants, cartes d’affaires, cartes plasfifiées, porte-clés, etc…  Et vous pouvez même acheter juste la puce, si vous souhaitez la mettre dans des vêtements ou d’autres types d’objets.  C’est plutôt versatile.

Personnellement, je les achète sur le site http://www.buynfctags.com/ mais libre à vous de les acheter ailleurs : il y a des dizaines de vendeurs sur le web et il est à prévoir que ce nombre ne va pas aller en diminuant.

Il y a 2 principaux modèles de puces NFC, soit les FeliCa fabriquées par Sony et les MIFARE fabriquées par NXP Semiconductors (filiale de Philips Electronics).  Mais elles s’utilisent grosso-modo de la même manière et le reste de cet article devrait fonctionner avec tous les modèles de tags NFC.

Je ne vous parlerai pas des types de puces (type 1, type 2, type 3 et type 4), ce n’est pas important pour le moment.  Sachez simplement qu’il y a des puces « dry » (sèches) et d’autres « wet » (mouillées).  Les « wet » sont alimentées et coûtent sensiblement plus chères, mais sont également plus rapides.

Finalement, les tags peuvent être réécrits à volonté, mais la majorité permettent également une commande permettant de les verrouiller de manière permanente.  Ceci permet d’éviter que vos tags ne soient reprogrammées par le premier venu qui a une application pour ça sur son téléphone…

L’API

L’api de Windows 8 est vraiment simple.  Vous allez le trouverez dans le namespace Windows.Networking.Proximity de WinRT.  Je crois qu’il doit être possible de l’utiliser à partir d’une application .NET 4.5, mais je n’ai pas expérimenté sur ce terrain pour le moment.

La classe qui va nous intéresser dans cet article est ProxymityDevice et comporte les membres suivants :

  • Méthodes statiques
    • FromId(), GetDefault() et GetDeviceSelector() sont grosso-modo des factories qui permettent d’obtenir le device NFC qui vous intéresse.
  • Méthodes d’instance
    • PublishBinaryMessage(), PublishMessage() et PublishUriMessage() permettent de publier un message vers le device.  S’il y a un device à proximité il sera transmis jusqu’à ce que StopPublishingMessage() soit appelé.  La version binaire demande cependant de connaître le format NDEF, décrit dans la section suivante de cet article.
    • StopPublishingMessage() a un nom suffisamment éloquant pour que sa description soit inutile.
    • SubscribeForMessage() permet de recevoir un message selon un format défini.  Je ne vais cependant pas couvrir cette méthode dans cet article.
  • Propriétés
    • BitsPerSecond, DeviceId et MaxMessageBytes permettent d’en savoir davantage sur un device en particulier.
  • Évènements
    • DeviceArrived et DeviceDeparted permettent d’être notifié lorsqu’un autre appareil ou un tag est détecté par notre périphérique NFC.

Que représente une instance de ProximityDevice ?

Une instance de la classe ProximityDevice représente le périphérique physique (normalement branché en USB ou incorporé à l’intérieur de l’ordinateur lui-même) qui a la capacité de communiquer en NFC.  Il peut être mélangeant car lorsqu’un appareil arrive à proximité et que l’événement « DeviceArrived » est levé, le nom de l’évènement porterait à croire qu’il s’agit d’une nouvelle instance de ProximityDevice qui représente l’autre appareil.  Mais il n’en est rien : l’API se contente de respecter (partiellement) le patron standard d’évènement de .NET et d’envoyer le sender comme premier paramètre.

Ainsi, il n’y a pas moyen de viser un appareil distant en particulier.  Prenez pour acquis qu’il n’y en aura qu’un seul a la fois par périphéque NFC que vous avez (et qu’il est improbable que vous en ayez plus d’un).

NDEF : Le format de données

Les données binaires transférées via NFC suivent un format standardisé défini par la norme NDEF (NFC Data Exchange Format), publiées par un consortium qui s’appelle NFC Forum.  Les specifications peuvent être téléchargées gratuitement depuis leur site, en échange de la création d’un compte.

Je ne vais pas décrire l’ensemble des possibilités du format NDEF, mais je vais plutôt me concentrer sur la fonctionnalitée appelée « SmartPoster », qui consiste à programmer un tag NFC de manière à ce que ce dernier transmette un URL.

Le format NDEF fonctionne en 2 niveaux :

  • Un message, qui est l’intégralité de ce qui est transféré entre 2 appareils selon le protocole NFC et peut contenir un ou plusieurs records.
  • Un record, qui est une instruction spécifique.  Ce record peut être standard ou pripriétaire, le format est assez extensible pour couvrir un bon nombre de scénarios applicatifs.

Programmer un tag NFC

Pour programmer un tag NFC, je vais faire le paresseux et vous diriger vers d’autres qui le font très bien : le projet « ndef » sur codeplex, disponible à l’adresse http://ndef.codeplex.com/.

Ils fournissent le code qui permet de programmer un SmartPoster que je recopie intégralement ici, tout en changeant les commentaires :

// Création d'un record NDEF de type "SmartPoster"
// Il s'agit d'un message à destination d'un tag pour
// le programmer.
var spRecord = new NdefSpRecord {
                  Uri = "http://nokia.com", 
                  NfcAction = NdefSpActRecord.NfcActionType.DoAction };
spRecord.AddTitle(new NdefTextRecord { 
                  Text = "Nokia", LanguageCode = "en" });

// On crée un message NDEF dans lequel on met le record de
// type "SmartPoster" créé précédemment
var msg = new NdefMessage { spRecord };

// On envoie le message en spécifiant à Windows qu'ils faut utiliser
// la commande d'écriture de tag
_device.PublishBinaryMessage("NDEF:WriteTag", msg.ToByteArray().AsBuffer());

C’est tout!  Après cela, si vous approchez votre tablette de ce tag (ou le tag de la tablette, ce qui est souvent le cas lorsque l’on développe), il sera lu automatiquement par l’OS!

Et l’URI transmis, ça peut être quoi ?

Noter qu’on parle d’URI ici et non pas d’URL.  La différence est subtile, mais ça veut dire qu’on ne se limite pas à des http:// ou https:// ici.  On peut y mettre des « scheme » propriétaire ou spécifique aux applications qu’on veut faire.

Il existe d’autres schemes standard tels que tel:, sms:, mailto:, irc…  Certaines applications ont même déjà publiées certains schemes tels que skype:<username/number>, gtalk (google Talk), ymsgr (Yahoo Messenger).  Le RFC 5870 défini même le scheme « geo: » qui permet de spécifier des trajets géographiques.  Les possibilités sont nombreuses.  Imaginez un tag NFC qui vous donne le trajet pour vous rendre à pied un chalet en plein bois…

Les possibilités sont tellement nombreuses qu’il est impossible de toutes les énumérer dans cet article.

Et Windows Phone ?

Il est tout à fait prévisible que les principes décrits ci-haut soient directement compatible avec Windows Phone 8.  À suivre lorsque le le SDK sera disponible, probablement dans quelques jours (les téléphones seront en vente dans 12 jours).

Vais-je pouvoir l’utiliser dans le métro ?

Le métro de Montréal utilise la carte OPUS, qui fait partie du réseau Calypso (tout comme le Navigo  à Paris, la carte Modalis en Aquitaine, la SmartLink à Newark… et une quarantaine d’autres réseaux de transports dans le monde) et utilise des protocoles propriétaires.  Je crois qu’il est trop tôt pour se prononcer s’il sera possible de mettre un titre du réseau Calypso dans votre tablette Windows 8 ou votre téléphone Windows Phone 8.

Si par contre vous avez des détails à ce sujet, contactez-moi, ça m’intéresse !

Et si j’ai un iPhone ?

Apple a décidé que le NFC, ce n’est pas pour vous.  Que faites-vous sur ce blog ??

Did you like this article? Share it with your friends!

Tweet

Written by cdebilly

6 Responses to "Programmez vos tags NFC avec Windows 8"

  1. cdebilly dit :
    2012-10-17 à 23:42

    Question de rester dans le sujet, Communauto vient d’annoncer qu’ils permettront d’utiliser la Carte OPUS pour prendre des voitures!

    http://actualites.communauto.com/2012/10/17/lautomobile-libre-service-le-transport-en-commun-accessibles-avec-la-meme-carte/

    Drôle de coïncidence…

    Répondre
  2. hamadycisse dit :
    2012-10-17 à 23:52

    Super content que le monde .NET atterisse sur la planete NFC. Superbe redaction debordant d’information.
    Merci pour ce beau post

    Répondre
  3. Erick dit :
    2012-10-18 à 00:12

    C’est disponible autant pour WinRT que .Net 4.5 pour la classe ProximityDevice, tu vas sur la page MSDN de la classe c’est indiqué « Applies to: Windows Store apps | desktop apps »

    Tu devrais trouver quelques infos utiles ici pour appeler des librairies WinRT à partir du desktop : http://www.hanselman.com/blog/HowToCallWinRTAPIsInWindows8FromCDesktopApplicationsWinRTDiagram.aspx 🙂

    Répondre
  4. Jean-Philippe Encausse dit :
    2013-03-01 à 15:08

    Bonjour et merci pour les infos !

    Est ce qu’il y a un soft de prédilection pour Windows 8 (pro) qui exécute simplement les URL lues ou déclenche l’ouverture de programme ? Bref le petit utilitaire bien pratique ?

    Je vais me coder une fonction dans SARAH mais j’aurais souhaitez jouer avant ^^

    Répondre
    1. cdebilly dit :
      2013-03-01 à 15:17

      @Jean-Philippe : Windows, tout simplement. L’OS va faire ça pour toi.

      Répondre
      1. Jean-Philippe Encausse dit :
        2013-03-23 à 08:50

        Merci,

        Au final je me suis codé le petit soft pour balancer les requêtes sans avoir le « tap to accept » et réécrire des URL.

        http://encausse.wordpress.com/2013/03/21/le-nfc-pour-piloter-s-a-r-a-h/

        Répondre

Répondre à Jean-Philippe Encausse Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Catégories

  • .NET
  • Développement
  • Internet
  • Javascript
  • NFC
  • Non catégorisé
  • Open-Source
  • Reactive Extension
  • Silverlight
  • Téléphonie
  • Windows 10
  • Windows 8
  • Windows Phone 8
  • Windows Server 2012
  • WPF

Archives

  • février 2018
  • janvier 2015
  • juin 2014
  • novembre 2013
  • octobre 2013
  • avril 2013
  • février 2013
  • novembre 2012
  • octobre 2012
  • avril 2012
  • septembre 2011
  • juillet 2011
  • février 2011
  • janvier 2011
  • novembre 2010
  • septembre 2010
  • août 2010

Bookmark or Pin us!

Carl de Billy supports many popular operating systems!

Supported platforms include:

  • FavIcons for desktop and mobile browsers
  • Windows 8 and Windows Phone 8.1 Live Tiles
  • iOS Home Screen Icons
  • iOS WebApp

Tags

.Net Framework 3g ADSL autocomplete C# Communauto contrat numérique css foursquare hadopi HoloLens internet IObservable jquery Microsoft Montréal ndef nfc nventive Observable Pixel shader RAID Reactive Extension Roslyn Rx rxjs semantic silverlight smartposter Storage Spaces styling tags Teksavvy telephonie Uno videotron Visual Studio web Windows 8 Windows 10 Windows Phone WP7

Navigation

  • Inscription
  • Connexion
  • Flux des publications
  • Flux des commentaires
  • Site de WordPress-FR

Mastodon

© 2025 Carl de Billy

Powered by Esplanade Theme and WordPress