J'ai trouvé une liste assez exhaustive de UUID et j'ai pris ceux qui pouvaient m'intéresser. Pour autant, je n'arrive à rien. Je pense que je n'ai pas compris la stratégie de communication.
Cordialement.
Pierre.
J'ai trouvé une liste assez exhaustive de UUID et j'ai pris ceux qui pouvaient m'intéresser. Pour autant, je n'arrive à rien. Je pense que je n'ai pas compris la stratégie de communication.
Cordialement.
Pierre.
Rien ne dit que ton bidule utilise un de ces UUID !!!
Il me semble que ta liste ne montre que celles prédéfinies par l'organisme Biuetooth , caractéristiques basiques dont l'UUID est codable (en abrégé) sur 16bits (commençant par 0000XXXX)
Que voit nRFConnect ?
Une fois connecté (non appairé) au bidule il va te fournir une floppée de services et leurs caractéristiques
dans le lot il y a ce qui t'intéresse
j'ai ajouté ci dessus un extrait d'un LYWSD03 avec LA caractéristique porteuse de l'info utile
son UUID n'a rien à voir avec la liste que tu as trouvé, c'est un UUID pondu par Xiaomi et non l'organismes Bluetooth.
Où est l'info ? comment l'obtenir ?(lecture ou notification) comment la décoder....
Pour moi nRFConnect est incontournable pour découvrir et tester la stratégie de communication ... avant codage.
De mes petites manips en BLE j'ai retenu que la seule alternative réside dans quelques utilitaires Linux en ligne de commande (bluetoothctl, gatttool...)
Ce vendeur attire l'attention sur le service (SENSOR) et 5 caractéristiques pour accéder aux mesures.
(Pour ton bidule il ya très certainement en plus d'autres services fournis du genre DFU, UART......).
[https://fr.aliexpress.com/item/4000420947841.html?spm=a2g0o.productlist.0.0.4c1530bcuu692Y&algo_pvid=94a7e567-79b7-45e7-b46e-5ac10a4aed52&algo_expid=94a7e567-79b7-45e7-b46e-5ac10a4aed52-0&btsid=2100bdd016166123268886667e8882&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_](https://fr.aliexpress.com/item/4000420947841.html?
spm=a2g0o.productlist.0.0.4c1530bcuu692Y&algo_pvid=94a7e567-79b7-45e7-b46e-5ac10a4aed52&algo_expid=94a7e567-79b7-45e7-b46e-5ac10a4aed52-0&btsid=2100bdd016166123268886667e8882&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_)
Si on se base sur les images:
le service SENSORS a pour UUID 0x6E00001......,
il comporte 5 caractéristiques (pour 5 grandeurs physiques mesurées )
0x6E400002....
0x6E400003....
0x6E400004....
0x6E400005....
0x6E400006....
Il semble qu'on accède aux valeurs par notification il faut donc s'enregistrer aux caractéristiques desquelles on veut recevoir les valeurs par notification
On a d'ailleurs des copies d'écran de valeurs des mesures notifiées par ces 5 services
al1fch:
Ce vendeur attire l'attention sur le service (SENSOR) et 5 caractéristiques pour accéder aux mesures.
(Pour ton bidule il ya très certainement en plus d'autres services fournis du genre DFU, UART......).
https://fr.aliexpress.com/item/4000420947841.html?spm=a2g0o.productlist.0.0.4c1530bcuu692Y&algo_pvid=94a7e567-79b7-45e7-b46e-5ac10a4aed52&algo_expid=94a7e567-79b7-45e7-b46e-5ac10a4aed52-0&btsid=2100bdd016166123268886667e8882&ws_ab_test=searchweb0_0,searchweb201602_,searchweb201603_Si on se base sur les images:
le service SENSORS a pour UUID 0x6E00001......,
il comporte 5 caractéristiques (pour 5 grandeurs physiques mesurées )
0x6E400002....
0x6E400003....
0x6E400004....
0x6E400005....
0x6E400006....Il semble qu'on accède aux valeurs par notification il faut donc s'enregistrer aux caractéristiques desquelles on veut recevoir les valeurs par notification
On a d'ailleurs des copies d'écran de valeurs des mesures notifiées par ces 5 services
Désolé "al1fch", j'avais mal lu ces codes sur le liens que tu me donnes, je croyais que c'était des codes commerciaux.
Dans mon application, j'ai cette méthode :
// Demonstrates how to iterate through the supported GATT Services/Characteristics.
// In this sample, we populate the data structure that is bound to the ExpandableListView
// on the UI.
private void displayGattServices(List<BluetoothGattService> gattServices) {
if (gattServices == null) return;
String uuid = null;
String unknownServiceString = getResources().getString(R.string.unknown_service);
String unknownCharaString = getResources().getString(R.string.unknown_characteristic);
ArrayList<HashMap<String, String>> gattServiceData = new ArrayList<HashMap<String, String>>();
ArrayList<ArrayList<HashMap<String, String>>> gattCharacteristicData
= new ArrayList<ArrayList<HashMap<String, String>>>();
mGattCharacteristics = new ArrayList<ArrayList<BluetoothGattCharacteristic>>();
// Loops through available GATT Services.
for (BluetoothGattService gattService : gattServices) {
HashMap<String, String> currentServiceData = new HashMap<String, String>();
uuid = gattService.getUuid().toString();
currentServiceData.put(
LIST_NAME, SampleGattAttributes.lookup(uuid, unknownServiceString));
currentServiceData.put(LIST_UUID, uuid);
gattServiceData.add(currentServiceData);
ArrayList<HashMap<String, String>> gattCharacteristicGroupData =
new ArrayList<HashMap<String, String>>();
List<BluetoothGattCharacteristic> gattCharacteristics =
gattService.getCharacteristics();
ArrayList<BluetoothGattCharacteristic> charas =
new ArrayList<BluetoothGattCharacteristic>();
// Loops through available Characteristics.
for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) {
charas.add(gattCharacteristic);
HashMap<String, String> currentCharaData = new HashMap<String, String>();
uuid = gattCharacteristic.getUuid().toString();
currentCharaData.put(
LIST_NAME, SampleGattAttributes.lookup(uuid, unknownCharaString));
currentCharaData.put(LIST_UUID, uuid);
gattCharacteristicGroupData.add(currentCharaData);
}
mGattCharacteristics.add(charas);
gattCharacteristicData.add(gattCharacteristicGroupData);
}
qui, d'après ce que je comprends, reçoit des codes provenant de ma carte. Il y a des codes de services et des codes de caractéristiques.
Ce que j'ai relevé ressemble aux codes donnés par le lien, mais est quand même différent :
Service : 00001800-0000-1000-8000-00805f9b34fb --> Generic Access
Caractéristiques associées : 00002a00-0000-1000-8000-00805f9b34fb --> Device Name
00002a01-0000-1000-8000-00805f9b34fb --> Appearance
00002a04-0000-1000-8000-00805f9b34fb --> Peripheral Prefered
Service : 00001801-0000-1000-8000-00805f9b34fb --> Generic Attribute
Pas de Caractéristique associée
Service : 6a800001-b5a3-f393-e0a9-e50e24dcca9e
Caractéristiques associées : 6a80b280-b5a3-f393-e0a9-e50e24dcca9e --> Température
6a806050-b5a3-f393-e0a9-e50e24dcca9e --> MPU 6050
6a803216-b5a3-f393-e0a9-e50e24dcca9e --> Ambient Light
6a80ff0c-b5a3-f393-e0a9-e50e24dcca9e --> ??
Apparemment, 6a800001 serait une nouvelle version de 6e400001
J'ai associé ces UUID aux chaînes qui suivent, mais je n'arrive toujours pas à recueillir de données.
Cordialement.
Pierre.
Bonjour
si je comprend bien ton code il interroge ton bidule BLE et dresse la listes des services offerts et pour chacun d'eux des caractéristiques disponibles. C'est nécessaire ... mais pas suffisant.
Par exemple :
Service : 6a800001-b5a3-f393-e0a9-e50e24dcca9e
Caractéristiques associée : 6a80b280-b5a3-f393-e0a9-e50e24dcca9e --> Température
A ce stade tu as identifié une piste ....mais ne sais pas encore comment traiter cette caractéristique intéressante.
Comment accéder à l'info température qu'elle recèle : par lecture ? par notification ?
Demander les propriétés (NOTIFY ? READ ?) de cette caractéristique pour avoir la réponse
nRFConnect (je remet une couche !!!) te le dirait et si, par exemple, l'info température doit être réçue par notification il te resterait a :
-t'enregister à cette caractéristique pour pouvoir recevoir ensuite d'elle une notification
-écrire une fonction de callback pour gérer cette notification et ainsi récupéerer l'info température; En matière d'outils je privilégie ceux que Nordic Semiconductor propose pour facilter l'utilsation de ses divers soc BLE
En fait j'ai une approche différente de la tienne : j'exploite les outils BLE (applis, outils Linux) disponibles pour receuillir le maximum d'informations sur la puce avant de tester la moindre ligne de code.
Pourquoi se priver des utilitaires proposoés par Nordic Semiconductor en accompagnement des divers soc BLE qu'il réalise ?
al1fch:
Comment accéder à l'info température qu'elle recèle : par lecture ? par notification ?
Demander les propriétés (NOTIFY ? READ ?) de cette caractéristique pour avoir la réponse ...
Je vais essayer de comprendre toute la mécanique de cette communication BLe (c'est pas gagné).
al1fch:
... nRFConnect (je remet une couche !!!) te le dirait et si, par exemple, l'info température doit être reçue par notification il te resterait a :
Comme je l'avais dit dans ma réponse #15 :
nrfToolbox, comme les autres "apk" et sources que j'ai pu installer ou compiler et exécuter ne réussissent à trouver ma carte.
Pour que les applications fonctionnent sur mon smartphone, il faut qu'elles aient l'autorisation d'accès au GPS. Apparemment les applications compilées ne l'ont pas. Quant à celles dont j'ai le source, j'ai rajouté cette autorisation et je détecte ma carte. Pour autant, c'est de cette application que j'ai tiré les codes ci-dessus. J'ai l'impression qu'elle contient toutes les fonctions nécessaires, mais certainement je ne sais pas les mettre en œuvre.
Cordialement.
Pierre.
Je suis très surpris que nRF Connect for Mobile (appli Android prise dans Google Play) ne puisse gérer ce capteur BLE une fois installée sur un smartphone Android compatible BLE et la localisation activée (comme d'autres utilitaires BLE)
(nRF Toolbox c'est autre chose, limité à quelques 'profils' particuliers, idem pour les autres outils proposés par Nordic Semiconductor)
Je n'ai jamais rencontré cette situation et ça ne m'encourage pas pas à faire venir un exemplaire de ce capteur multiple !! J'en fais quasiment un prérequis pour tester à la main un algorithme d'accès aux données.
J'ai rencontré une fois un capteur particulier pour lequel la connection avec nrF Connect se faisait puis se refermait trop vite parce que je n'avais pas le temps, à la main, de jouer avec les bonnes caractéristiques en notification.
Je pouvais au moins voir les UUID des services, de leurs multiples caractéristiques ainsi que leurs propriétés (READ, WRITE, NOTIFY)
Les opérations exctutées par un code se faisaient , elles, assez rapidement pour que le capteur ne referme pas le connection.
Pour moi ce qui n'est pas gérable avec cet utilitaire BLE universel fourni par Nordic Semiconductor est douteux.
al1fch:
Je suis très surpris que nRF Connect for Mobile (appli Android prise dans Google Play) ne puisse gérer ce capteur BLE une fois installée sur un smartphone Android compatible BLE et la localisation activée (comme d'autres utilitaires BLE)
(nRF Toolbox c'est autre chose, limité à quelques 'profils' particuliers, idem pour les autres outils proposés par Nordic Semiconductor) ...
Bon, encore une confusion de ma part. Je viens d'installer "nRF Connect" à partir de google play et ... cette application trouve ma carte sans problème. J'y vois tous les codes que j'avais décrit plus haut ainsi qu'une myriade d'autres données ... que je ne sais pas interpréter. Certains codes reçoivent des données, pas d'autres.
De toute évidence, la chose vit
!
Reste plus qu'à savoir comment gérer tout ça tout seul.
Cordialement.
Pierre.
Hello,
j'ai également acheté cette petite carte pour faire de la mesure de température sans vraiment savoir comment ça allait fonctionner.
A force de recherches, je suis tombé sur votre sujet. Merci pour vos réponses, ça fait plaisir de voir qu'on n'est pas seul dans la galère ^^
Au passage j'ai fait un petit screen de nRF Connect sur le service du BMP280 (température/pression). On voit bien que ça bouge quand je l'ai mis au congélateur ou dans la main : ScreenRecord 20210627124255 - YouTube
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.