Archives mensuelles : février 2015

Une manette de jeu réalisée avec un SensorTag

Si vous avez suivi un peu nos aventures vous savez que chez GUYZMO nous aimons beaucoup le SensorTag de Texas Instruments.

ti-sensortag

Après la station météo présentée aux TechDays lors de notre session sur « le Bluetooth Low Energy dans les applications Windows » qui utilisait les capteurs de pression atmosphérique, de température et d’humidité du SensorTag, je me suis demandé comment utiliser, de manière ludique, ses boutons de commande (2 boutons placés sur la partie haute du SensorTag) et ses accéléromètres.

J’avais développé un petit jeu pour Windows Phone, dans lequel le joueur pilote un petit vaisseau spatial devant tirer sur une multitude d’astéroïdes sans les percuter, et ce en avançant dans des niveaux de plus en plus difficiles (très classique me direz vous mais très amusant à coder).

J’ai donc adapté ce jeu pour utiliser un bouton de commande du SensorTag pour tirer, et ses accéléromètres pour déplacer le vaisseau. Le résultat final dans cette petite vidéo :

Stéphane Sibué

 

Bluetooth Low Energy sous Windows Phone : Différences entre Silverlight et WinRT

Comme vous le savez très certainement, si vous suivez un peu ce blog, j’ai présenté une session aux TechDays 2015 sur le Bluetooth Low Energy dans les applications Windows (sous entendu applications universelles Windows Store et Windows Phone), vous trouverez d’ailleurs quelques infos ici.

Je suis en train de préparer un article complet qui reprendra chaque point de cette session, mais en attendant je vous propose de voir quelques différences entre la gestion du BLE en WinRT et en Silverlight.

Actuellement vous pouvez développer des applications Windows Store uniquement en utilisant Windows RT, alors que pour Windows Phone vous avez le choix entre Windows RT et Silverlight.

Chose importante aussi, BLE n’est supporté qu’à partir de Windows Phone 8.1 et Windows 8.1 donc pour les versions précédentes on se contentera du Bluetooth classique.

Dernièrement j’ai voulu ajouter des fonctions BLE (Bluetooth Low Energy) dans une applications Windows Phone Silverlight et je me suis rendu compte de 2 choses importantes :

  • Les fonctions BLE en WinRT sont accessibles depuis SL mais ne fonctionnent pas.
  • Les fonctions BLE incluses dans SL fonctionnent mais sont différentes de celles de WinRT

Capabilities

Elles doivent être placées au même endroit, dans le fichier « Package.appxmanifest » du projet, qu’on soit en SL ou en WinRT.

Par exemple, déclaration de 2 GATT services :

   <Capabilities>
    <Capability Name="internetClient" />
    <m2:DeviceCapability Name="bluetooth.genericAttributeProfile">
      <m2:Device Id="any">
        <m2:Function Type="serviceId:0000ffe0-0000-1000-8000-00805f9b34fb"/>
        <m2:Function Type="serviceId:f000aa50-0451-4000-b000-000000000000"/>
      </m2:Device>
    </m2:DeviceCapability>
  </Capabilities>

Connexion à un service

Le code de connexion à un service (qui aura au préalable été déclaré dans les capabilities sinon vous n’aurez aucune possibilité de vous y connecter) est légèrement différent en Silverlight et en WinRT.

Voici une fonction qui recherche à se connecter à un service avec la vérification que le serveur est un SensorTag (code en WinRT puis en Silverlight) :

WinRT

N’oubliez pas de déclarer les espaces de noms suivants :

Windows.Devices.Bluetooth.GenericAttributeProfile
Windows.Devices.Enumeration

private async Task<GattDeviceService> GetDeviceService(Guid service)
{
    var filter = GattDeviceService.GetDeviceSelectorFromUuid(service);
    var deviceInfos = await DeviceInformation.FindAllAsync(filter);

    foreach (var deviceInfo in deviceInfos)
    {
        if (deviceInfo.Name == "TI BLE Sensor Tag")
        {
            // On a trouvé un SensorTag qui implémente le service recherché
            return await GattDeviceService.FromIdAsync(deviceInfo.Id);
         }
     }

    return null;
}

Silverlight

N’oubliez pas de déclarer les espaces de noms suivants :

Windows.Devices.Enumeration
Windows.Devices.Bluetooth
Windows.Devices.Bluetooth.GenericAttributeProfile

private async Task<GattDeviceService> GetDeviceService(Guid service)
{
    var deviceInfos = await DeviceInformation.FindAllAsync(BluetoothLEDevice.GetDeviceSelector());

    foreach (var deviceInfo in deviceInfos)
    {
        if (deviceInfo.Name == "TI BLE Sensor Tag")
        {
            // On a trouvé un SensorTag qui implémente le service recherché

            var bluetoothDevice = await BluetoothLEDevice.FromIdAsync(deviceInfo.Id);
            var gattService = bluetoothDevice.GetGattService(service);

            return gattService;
        }
    }

    return null;
}

Accès aux caractéristiques

Pour ce qui est d’accéder aux caractéristiques, le principe est le même en WinRT et en Silverlight.

Par contre, en Silverlight la manipulation des buffers est moins simple car les classes DataReader et DataWriter de Silverlight ne travaillent pas directement sur un IBuffer qui est systématiquement utilisé pour lire et écrire des données au niveau des caractéristiques.

Dans Silverlight le plus simple est de passer par un tableau de bytes en utilisant les méthodes ToArray() pour passer du IBuffer au tableau et AsBuffer() pour passer du tableau de bytes au IBuffer.

Note : Pour avoir accès à la méthode AsBuffer depuis un tableau de bytes vous devez déclarer l’espace de nom System.Runtime.InteropServices.WindowsRuntime, que vous soyez en WinRT ou en Silverlight.

 

Conclusion

Les différences ne sont pas énormes mais suffisamment importantes pour dérouter le développeur qui débute dans ce genre de développement.

 

Stéphane Sibué

 

 

 

 

La Grappe d’Or

Vous ne le savez peut-être pas mais GUYZMO est une société basée en Savoie, à Technolac très exactement et à ce titre elle est entourée de vignes et de viticulteurs (que nous saluons au passage).

GUYZMO a été retenue par Coeur de Savoie pour le développement d’une application iOS et Android, de type chasse au trésor.

Cette application destinée prioritairement aux jeunes de 8 à 15 ans et aussi aux familles, permettra de découvrir les richesses de la commune de Chignin (73800).

Chignin

Le but est de relever plusieurs défis qui permettront au final de trouver « La Grappe d’Or » qui protège depuis très longtemps la commune de Chignin. C’est Victor, un jeune garçon, gardien de la Grappe d’Or de son état, qui guidera les joueurs tout au long de cette chasse au trésor.

La grappe d'or

Au menu, de la cartographie, des quizz, des énigmes à résoudre, et beaucoup d’informations présentées de manière ludique qui permettront de bien comprendre l’histoire et le quotidien de ce beau site.

Nous sommes très heureux de participer à ce beau projet dans lequel nous devons gérer la création graphique (Cyril Delhomenie), les enregistrements sonores et bien sûr le développement de l’application mobile.

Stéphane Sibué