Étape 5: L’app Smartphone
Dernière partie du projet !
Comme toujours, nous commençons par les bibliothèques, vous aurez besoin. Les cordova.js, les evothings.js et les ui.js sont inclus automatiquement lorsque vous créez un nouveau projet dans le workbench de Evothings. Les bibliothèques de jquery.js n’est pas obligatoire, vous pourriez modifier le code afin qu’il ne serait pas besoin, mais cela rend les choses plus faciles.
Pour la communication de BLE, nous allons utiliser easyble.js, qui est basé sur le plugin de ble de Cordova (com.evothings.ble, dont vous avez besoin d’inclure si vous voulez construire l’app) et nécessite également la bibliothèque de util.js .
Afin de définir les limites, nous allons utiliser un curseur. J’ai utilisé la bibliothèque rangeSlider.js , téléchargeable ici, pour le rendre plus joli.
Nous allons ensuite créer certains objets. L’une, app, contiendra les variables et les fonctions de notre application. L’autre, BluefruitUART, contiendra l’objet de Bluefruit une fois que nous l’avons trouvée après le scan. L’objet BLEDevice tiendra des renseignements nécessaires pour communiquer avec le Conseil de Bluefruit.
Ensuite, nous remplissons l’objet BLEDevice avec l’information. La propriété name contient la chaîne qui est diffusée par la puce Bluefruit et peut être utilisée pour l’identifier. Les propriétés de services, writeCharacteristicUUID et readCharacteristicUUID contient les UUID qui sont spécifiques à la puce Bluefruit. Le premier est utilisé pour lire les services de la puce et obtenir accès à eux, l’autre pour envoyer des données à la puce et le tiers pour recevoir les données.
Nous remplissons maintenant l’objet app avec les variables globales du code. La propriété values va stocker les valeurs provenant de la "mère" Arduino et message stockera les données brutes. nbRooms contient le nombre total de chambres et de msgLength la longueur du message qui sera reçu.
La principale fonction est appelée une fois que le périphérique est prêt. Il ajoute des écouteurs d’événements pour les boutons connecter et déconnecter . L’un se connecte à la puce Bluefruit, lit ses services, active les notifications et envoie ensuite les limites à la « mère » Arduino.
Une fois que le périphérique est prêt, la principale fonction est appelée.
Nous passons maintenant aux fonctions. Le premier, connectToBluefruit scanne pour les appareils BLE et s’arrête dès qu’il a trouvé celui avec celui avec le nom correct. Puis, il stocke l’appareil dans l’objet BluefruitUART et utilise l’une de ses méthodes s’y pour connecter. Une fois la connexion établie, elle appelle une autre fonction passée comme un paramètre, qui est readServices.
La fonction de déconnexion utilise la méthode close de l’objet BluefruitUART pour débrancher l’appareil de Bluefruit.
La fonction readServices lit les services de l’appareil BLE une fois que la connexion a été établie. Il utilise les services UUID que nous avons spécifiés précédemment.
La fonction sendMessage envoie des données de la puce Bluefruit. Il utilise le writeCharacteristic UUID que nous avons spécifiés précédemment.
La fonction enableNotifications est utilisée pour recevoir les données de la puce Bluefruit pour le Smartphone. La première chose à faire est d’écrire le descripteur pour pouvoir activer les notifications lorsque celle-ci change. La méthode writeDescriptor de l’objet BluefruitUART prend plusieurs paramètres. La première est la readCharacteristicUUID que nous avons spécifiés précédemment. Le second est le descripteur UUID, qui est la même pour chaque périphérique BLE. Le troisième est le conteneur pour les données qui seront lus à partir de la puce Bluefruit.
Une fois le descripteur est écrite, il faut activer les notifications qui appellent une fonction à chaque fois les données lues à partir des changements de descripteur. Cela se fait à l’aide de la méthode enableNotification de l’objet BluefruitUART , qui a besoin de la readCharacteristicUUID. Puis vient la fonction qui est appelée lorsque les données changent. Il analyse le message et enregistre les valeurs. L’analyse peut sembler un peu délicat et complexe, mais j’ai voulu prendre des précautions pour s’assurer qu’aucune donnée n’est perdue.
Une fois que les valeurs sont enregistrées, la fonction fillRoomList est appelée, qui appelle la fonction setupSlider qui nous couvrirons ensuite.
La fonction setupSlider configure les curseurs. Lorsqu’un curseur est déplacé, la limite change et est stocké dans localStorage par la fonction déclenchée par l’événement onSlide . Les limites sont ensuite envoyés à la « mère » Arduino à l’aide de la fonction sendLimits .
Que vous vous souvenez sans doute, la fonction fillRoomList est appelée une fois que les données a été analysées à partir du message reçu de la "mère" Arduino. Il affiche l’état de la lumière et un curseur pour chaque chambre. Un élément HTML est créé et ajouté à la liste roomList .
Notez que la valeur du curseur représente la limite et la mémoire tampon la valeur lue par la sonde. La mémoire tampon est exprimé en pourcentage, d'où la division par 10.
La fonction sendLimits crée un message commençant par un #, contenant les limites séparées par un / et se terminant par un * et l’envoie à la "mère" Arduino.