Skip to content
Snippets Groups Projects

Robotise Application

Introduction

Ce code est utilisé pour communiquer avec le raspberry contrôlant Robotise. Le principe de l'application est de communiquer via le protocole de communication ble. Robotise est un robot qui permet de préparer des cocktails.

Pré-Requis

Pour compiler l'application vous avez besoin de :

  • Android SDK 31 Pour utiliser l'application, certaines permissions doivent obligatoirement être acceptées:
  • L'accès à la position
  • L'accès au bluetooth

Différentes Fonctionnalités

Cette application a de multiple fonctionnalités:

  • Elle permet à l'utilisateur de choisir un cocktail à commander
  • Elle permet à l'administrateur de mettre à jour les cocktails de l'application par rapport à la base de données
  • Elle permet à l'administrateur de mettre à jour les ingrédients et leurs quantités dans la base de données
  • Elle permet à l'utilisateur d'avoir des cocktails favoris

Déroulement de l'application

Dans un premier temps, la configuration BLE est obligatoire. L'application nous montre une liste des appareils Bluetooth Low Energy. A ce moment là il suffit de choisir l'appareil avec le nom ou 'robotise' ou 'rpi-gatt-server'

Quand l'appareil est selectionnée un service est créé pour gérer le bluetooth du téléphone. Si l'appareil se déconnecte du ble pour une quelconque raison, onServiceDisconnected sera appelé. Une fois le service bluetooth activé, un autre service est créé (BluetoothLeService) dans le but de gérer la connection et la communication entre ses deux éléments. Ce service se connecte alors à l'appareil rapsberry, et récupère le server gatt du raspberry. L'application communique avec le service qui à son tour communique avec Bluetooth LE API. L'implémentation BLE a été très fortement inspirée d'un projet déjà existant Bluetooth LE GATT

Pour que cela fonctionne correctement il faut que toute les charactéristiques suivantes soit présentes dans le service:

  • CommanderCocktailCharacterisitic : la charactéristique qui permet d'envoyer une commande.
  • BDRecettesCharacterisitic : la caractéristique qui permet de recevoir la liste des recettes
  • BDIngredientsCharacteristic :la caractéristique qui permet de recevoir la liste des ingrédients présent dans la base de données

Si la configuration du BLE est un succès alors nous pouvons passer à la suite de l'application. Nous avons donc dans un premier temps une page qui permet la connection en tant qu'utilisateur ou administrateur (LoginActivity).

L'utilisateur n'a pour l'instant accès qu'à une seule fonctionnalité: commander un cocktail. En se connectant la fenêtre (ListCocktailsActivity) s'ouvre et ainsi l'utilisateur peut voir la liste des cocktails. Cette liste est contrôlé par la classe CocktailListView. Chaque cocktail est représenté par la classe: CocktailItem et son affichage est contrôlé par la classe CocktailsArrayAdapter. En cliquant sur un des cocktail, une page s'ouvre (PopUpCocktail), avec la composition du cocktail. Chaque ingrédient est représenté par la classe: IngredientItem et son affichage est contrôlé dans la classe IngredientArrayAdapter. L'utilisateur peut modifier les quantités de chaque ingrédient et ensuite appuyer sur le bouton commander.

De son côté l'administrateur a besoin d'un mot de passe pour se connecter. Pour l'instant le mot de passe est hello et est codé en dur dans l'application. Après s'être connecté, la fenêtre AdminActivity s'ouvre et l'administrateur a plusieurs fonctionnalités disponibles. Il peut choisir un cocktail à commander(de même que l'utilisateur), récupérer la liste des cocktails à jour de la base de données, mettre à jour la liste des ingrédients disponibles dans la machine et mettre à jour les quantités des ingrédients.

Si l'administrateur choisi de récupérer la liste des cocktails alors nous appelons la fonctions "listenToBdRecettesCharacteristic" qui écoute la charactéristique correspondant à la liste des recettes. Le script python, après avoir détecté un nouveau listener, renvoie la liste des recettes. ReceivedData dans DeviceControl est alors appelé et peut appelé la fonction correspondantes. Il met donc à jour les recettes sur l'application.

Si l'administrateur choisi l'option mettre à jour la liste des ingrédients, alors une nouvelle fenêtre s'ouvre AdminMajListIngredientActivity. La liste des ingrédients est chargé depuis la base de donnée. L'administrateur a ensuite la possibilité d'ajouter un ingrédient. L'ingrédient sera envoyé ensuite via ble dans la base de donnée du raspberry. Ensuite la liste des ingrédients est envoyé du raspberry jusqu'au téléphone.

Si l'administrateur choisi l'option mettre à jour les quantités des ingrédients, alors une nouvelle fenêtre s'ouvre AdminMajQuantiteActivity. Sur cette fenêtre nous pouvons mettre à jour, les quantités et le bec qui correspond à chaque ingrédient. Dès que l'administrateur a fini de mettre à jour les ingrédients alors les nouvelles données sont envoyées à la base de données.

Structure

Robotise    
├── app  
│   ├── libs  
│   ├── src  
│   │   ├── androidTest  
│   │   │   └── java  
│   │   │       └── com/example/robotise  
│   │   └── main  
│   │       ├── java  
│   │       │   └── com/example/robotise  
│   │       │       ├── ble  
│   │       │       ├── bluetooth  
│   │       │       ├── control  
│   │       │       ├── list  
│   │       │       └── model  
│   │       └── res  
│   │           ├── drawable  
│   │           ├── layout  
│   │           ├── menu  
│   │           ├── mipmap  
│   │           └── values  
│   └── build.gradle  
├── build.gradle  
└── settings.gradle  

Screenshots

Screenshot Screenshot

Getting Started

Ce code utilise Gradle build system. Pour reproduire ce projet, utilisez "gradlew build" ou utilisez "Import Projet sur Android studio".

Support