1. Préparation
2. Un peu de théorie sur bluetooth
3. Le code commenté
4. Le projet eclipse avec toutes les dépendances
Cette article suppose que vous débutez en Java et sur Bluetooth et s'adresse à ceux qui souhaite avoir un tutoriel qui explique comment mettre en oeuvre un serveur et un client qui permettront à deux PC d'échanger des données.
Le code complet du projet eclipse illustrant ce tutoriel peut-être téléchargé ici, toutes les librairies sont incluses.
https://www.dropbox.com/s/e5r74khzt75wvbq/bluetooth.zip
Première étape, comprendre et vérifier le bon fonctionnement du stack java bluetooth
Un stack bluetooth est une pile d'interface matériels puis logiciels permettant au logiciels utilisateurs de communiquer avec un device bluetooth. Plus on est haut dans la pile, plus le niveau d'abstraction est élevé.Par exemple L2CAP est assez bas niveau et ressemble à un échange entre deux sockets, Obex permet l'échange de fichier, le profil main libre permet d'envoyer un appel téléphonique dans l'autoradio...
Différents fabricants ou éditeurs de logiciels (souvent des éditeurs d'OS) propose leur stack, parmi ceux-ci on peut citer les plus connus :
- Broadcom (WIDCOMM)
- Winsock (Microsoft)
- BlueSoleil (IVT Corporation)
- OS X (Universal Mac)
- Linux BlueZ (D-Bus BlueZ API)
- Linux BlueZ (historic BlueZ API)
En java les api d'utilisation du stack bluetooth sont défini par la JSR 82 : http://www.jcp.org/en/jsr/detail?id=82. Cette JSR a été créé en 2000 et sa dernière mise à jour est de 2010.
En utilisant cette api les développeurs n'ont pas à se préocuper de la façon dont l'os et les matériels gère bluetooth, leur code est (théoriquement) immédiatement portable pourvu qu'au classpath soit ajouté une implémentation du stack pour l'environnement cible.
Sur la base de cette JSR plusieurs éditeurs ont proposé leurs implémentations dont certaines en licence open-source comme bluecove. Tous les éditeurs n'ont pas forcément choisi de supporter tous les os comme electric blue qui ne supporte que les stacks windows.
Un mot sur les emulateurs
Pour faire tourner les tests unitaires, pour développer sur des machines ne disposant pas de stack bluetooth, on peut remplacer le stack natif par un émulateur. Pour blue cove on peut utiliser http://bluecove.org/bluecove-emu/. Electric blue fournit aussi un émulateur : http://www.javabluetoothstack.com/bluesim.htm.
Commençons par découvrir les devices bluetooth autour de nous
Je vais utiliser bluecove pour la partie pc aussi bien sur debian que sur windows
Le code complet du projet eclipse illustrant ce tutoriel peut-être téléchargé ici, toutes les librairies sont incluses.
https://www.dropbox.com/s/e5r74khzt75wvbq/bluetooth.zip
Installation sous Debian x64
Le support pour x64 de blue cove est disponible depuis la version 2.1.1 vous trouverez les derniers snapshots ici.
http://snapshot.bluecove.org/distribution/download/
Le projet eclipse les inclut également vous n'avez pas besoin de les télécharger.
Ensuite il faudra vous assurer que le package libluetooth-dev est installé sur la debian
# apt-cache show libbluetooth-dev
Sinon vous devrez l'installer
# apt-get install libluetooth-dev
Par défaut bluecove ira chercher cette librairie dans /usr/lib/ créer donc un lien sybolique vers cette librairie dans ce répertoire
# ln -s /usr/lib/x86_64-linux-gnu/libbluetooth.so /usr/lib/libbluetooth.so
Installation sous Windows
Windows 7 et Windows 8 on été testé avec une version récente du JDK sur un ordinateur portable disposant du bluetooth et ont fonctionné sans efforts particuliers.
Attention néanmoins pour les tests sous windows 8 j'ai utilisé le portable de ma femme et j'ai acheté un dispositif bluetooth USB car son HP n'avait pas de bluetooth intégré. Dans l'emballage de l'USB était proposé par défaut les drivers de BlueSoleil qui sont très mal supportés par BlueCove. J'ai du les désinstaller puis replugger le dongle et laisser Windows 8 installer son propre stack : Winsock. Pour une listes des stacks supporté par blueCove : https://code.google.com/p/bluecove/wiki/stacks.
Lancer l'application
Maintenant pour tester que le java stack bluetooth est opérationel faite run as java application sur la classe Client.
Vous pouvez constater que mon Samsung Galaxy S2 a été découvert. Pour ce faire il faut rendre le téléphone découvrable le temps que vous exécutiez ce test : en activant le bluetooth android vous proposera de le rendre découvrable pendant deux minutes.Le support pour x64 de blue cove est disponible depuis la version 2.1.1 vous trouverez les derniers snapshots ici.
http://snapshot.bluecove.org/distribution/download/
Le projet eclipse les inclut également vous n'avez pas besoin de les télécharger.
Ensuite il faudra vous assurer que le package libluetooth-dev est installé sur la debian
# apt-cache show libbluetooth-dev
Sinon vous devrez l'installer
# apt-get install libluetooth-dev
Par défaut bluecove ira chercher cette librairie dans /usr/lib/ créer donc un lien sybolique vers cette librairie dans ce répertoire
# ln -s /usr/lib/x86_64-linux-gnu/libbluetooth.so /usr/lib/libbluetooth.so
Installation sous Windows
Windows 7 et Windows 8 on été testé avec une version récente du JDK sur un ordinateur portable disposant du bluetooth et ont fonctionné sans efforts particuliers.
Attention néanmoins pour les tests sous windows 8 j'ai utilisé le portable de ma femme et j'ai acheté un dispositif bluetooth USB car son HP n'avait pas de bluetooth intégré. Dans l'emballage de l'USB était proposé par défaut les drivers de BlueSoleil qui sont très mal supportés par BlueCove. J'ai du les désinstaller puis replugger le dongle et laisser Windows 8 installer son propre stack : Winsock. Pour une listes des stacks supporté par blueCove : https://code.google.com/p/bluecove/wiki/stacks.
Lancer l'application
Maintenant pour tester que le java stack bluetooth est opérationel faite run as java application sur la classe Client.
On remarque aussi que dans l'environnement linux c'est le stack bluez qui est utilisé, dans un environnement windows c'est le stack winsock qui sera utilisé.
Cette première étape est necessaire c'est l'étape d'inquiry: découvrir les autres dispositifs bluetooth. Après avoir découvert les dispositifs il faut maintenant se connecter à ces derniers.
Liens utile :
La documentation offcielle d'android sur l'utilisation de bluetooth
http://developer.android.com/guide/topics/connectivity/bluetooth.html
Un tutoriel sur l'api bluetooth d'android.
http://homepages.ius.edu/RWISMAN/C490/html/Android-Bluetooth.htm
Un tutoriel sur l'utilisation de la JSR 82
http://homepages.ius.edu/RWISMAN/C490/html/JavaandBluetooth.htm
Sur le site d'Oracle : Putting the core API to work
http://www.oracle.com/technetwork/articles/javame/index-140411.html
Aucun commentaire:
Enregistrer un commentaire