Scroll Indicator
DigiLab : Extraire des données de l'air (et un module BMP280)
L'une des caractéristiques étonnantes de l'accessoire DigiLab de Lab401 pour FlipperZero® est sa sonde I2C. Si vous avez déjà joué avec l'électronique, les microcontrôleurs ou les ordinateurs embarqués comme l'ESP-32, vous avez sans aucun doute rencontré l'I2C.
Il s'agit d'un protocole de communication qui fonctionne sur deux fils seulement et qui permet de connecter plusieurs (en théorie des milliers...) d'appareils et de capteurs sur les mêmes lignes, tout en étant capable de gérer une communication directe.
Bien qu'elle ait été inventée dans les années 1980, cette technologie est incroyablement importante et populaire. Il n'est pas exagéré de dire qu'il existe littéralement des milliers de types de capteurs I2C et des millions d'appareils qui les utilisent !
Des modules, des modules, des modules.
Mais si vous avez un capteur I2C sur votre bureau, comment interagir avec lui ?
Aujourd'hui, vous prenez généralement un Ardunio ou un Raspberry Pi, et vous espérez que quelqu'un a écrit une bibliothèque pour ce capteur. Peut-être vous battrez-vous avec des planches à pain et des cavaliers, et peut-être souhaiterez-vous un moyen de dialoguer directement avec le module. Ou alors il s'agit d'une puce mystère AliExpress non identifiée, et vous n'avez aucune idée de ce qu'elle fait. Ou pire encore, vous avez peut-être besoin de faire quelque chose de spécial que les bibliothèques ne couvrent pas - et il n'y a pas de moyen simple de le faire.

C'est là qu'intervient le DigiLab et son outil I2C Probe. Vous pouvez facilement détecter les périphériques sur le bus I2C et utiliser le moteur prédictif intégré pour deviner ce qu'ils sont. Ensuite, vous pouvez vous salir les mains et fouiller directement à l'intérieur du module lui-même.
Commençons
Dans ce tutoriel, nous allons étudier le BMP280, un capteur de pression d'air de Bosch. Ces capteurs sont assez omniprésents - mais ne vous y trompez pas, ce sont des capteurs incroyablement puissants qui peuvent être configurés de milliers de façons pour répondre aux exigences de millions d'appareils. Chez Lab401, nous pensons qu'il est plus important de comprendre que de faire. Plus votre compréhension est approfondie, plus vous serez en mesure d'agir.
Le module BMP280, sur un circuit imprimé.
A la fin de ce tutoriel, vous aurez acquis les compétences suivantes :
- Comment communiquer avec des modules inconnus via les principes premiers
- Comment utiliser les fiches de données pour utiliser des modules inconnus
- Comment utiliser le DigiLab pour identifier des modules I2C inconnus
- Comment modifier directement la mémoire / les registres des modules I2C
- Exploiter l'IA pour construire des outils utiles
Dans ce tutoriel, nous allons couvrir les étapes suivantes :
- Connecter le BMP280 au DigiLab
- Détection et identification du BMP280
- Obtenir et utiliser la fiche technique
- Configurer le BMP280
- Extraction des données de température
- Extraction des données de pression
- Extraction des données d'étalonnage
- Construire un outil pour interpréter les données récupérées
Pour jouer le jeu à la maison, vous n'aurez besoin que de trois choses :
- L'accessoire DigiLab Lab401 pour FlipperZero®
- Une carte d'interface BMP280
- Quelques câbles Dupont
Connexion du BMP280 au DigiLab
Tout d'abord, nous allons connecter le module BMP280 Breakout au DigiLab. Nous allons connecter
- La broche 3.3V du DigiLab à la broche VCC/3.3v du BMP280
- La broche GND du DigiLab à la broche GND du BMP280
- La broche SCL du DigiLab vers la broche SCL du BMP280
- La broche SDA du DigiLab à la broche SDA du BMP280
C'est tout le câblage que nous devons faire ! Important - si vous utilisez une carte différente, assurez-vous de suivre ce qui est imprimé sur le circuit imprimé pour éviter de faire griller votre module !

Détection et identification du BMP280
Maintenant, connectez votre DigiLab à votre FlipperZero, et allez dans Apps ' GPIO ' Lab401/DigiLab. Si vous n'avez pas encore installé l'application, vous pouvez l'obtenir sur le Flipper App Store : https://lab.flipper.net/apps/401_digilab.
Si c'est la première fois que vous utilisez l'application DigiLab, il vous sera demandé de calibrer votre DigiLab. Suivez les instructions à l'écran - touchez la sonde rouge à la pastille +5V, et cliquez sur OK.
Dans l'application DigiLab, allez à I2C Probe. L'appareil va rapidement rechercher des appareils et vous présenter une liste de résultats. Vous pouvez naviguer dans la liste avec les flèches gauche et droite.
Si tout a été connecté correctement, vous devriez voir deux appareils trouvés. Le DigiLab est équipé d'une puce mémoire I2C, il y aura donc toujours un appareil trouvé.
Naviguez dans la liste jusqu'à ce que vous voyiez le périphérique 0x76. Ce numéro est l'adresse de l'appareil, et il est "plus ou moins" unique. Cliquer sur le bouton Info.

Le DigiLab utilise son moteur de prédiction pour essayer de deviner le type de module auquel il est connecté. Il peut y avoir plusieurs types de modules, mais cela vous aide à déterminer ce à quoi vous avez affaire. Si vous parcourez la liste, vous verrez que le BMP280 a été trouvé et qu'il s'agit d'un "capteur de température et de pression" de Bosch. C'est super !
À ce stade, vous pouvez cliquer sur le bouton R/W pour lire et écrire des valeurs dans les emplacements de mémoire du module ("registres") - mais par où commencer ? C'est là que les fiches techniques entrent en jeu.
Obtenir et utiliser la fiche technique
Une recherche rapide sur Internet permet d'obtenir une copie de la fiche technique du capteur BMP280. En parcourant le document, on s'aperçoit que le capteur est en fait assez complexe - il y a beaucoup de fonctionnalités cachées dans un petit boîtier. Il dispose de plusieurs filtres pour gérer les pics, peut être interrogé lentement mais avec précision, ou (très) rapidement, dispose de plusieurs modes d'alimentation et de résolutions différentes.
Plus précisément, nous allons devoir configurer le capteur (c'est-à-dire y inscrire nos paramètres préférés) avant de pouvoir en extraire des données.
Pour ce qui nous concerne, le document devient vraiment intéressant vers la page 25, lorsqu'il aborde les différents registres. Un registre est une autre façon de désigner un morceau de mémoire. D'après la documentation, chaque registre du BMP280 représente 8 bits, soit 1 octet de données. Chaque registre possède une adresse (généralement exprimée en hexadécimal).
Il est bon de voir que Bosch s'intéresse aux clients qui utilisent des graphiques CGA.
Dans le tableau 18, nous pouvons voir la disposition de la mémoire. Quatre sections semblent intéressantes :
-
0xF5: le registre contenant les données de configuration de l'appareil -
0xF4: le registre contenant la configuration de la mesure -
0x88 - 0xA1: Registres contenant les valeurs d'étalonnage -
0xF7 - 0xF9: Registres contenant les valeurs de pression -
0xFA - 0xFC: Registres contenant les valeurs de température
Avec les informations de ce tableau, nous pouvons maintenant compléter les étapes 3 à 6:
- Configuration du BMP280
- Extraction des données de température
- Extraction des données de pression
- Extraction des données d'étalonnage
Configuration du BMP280
Commençons par configurer le BMP280. Nous n'avons pas d'exigences très techniques (par exemple, nous n'avons pas besoin d'un mode ultra-basse consommation ou d'une interrogation ultra-rapide). Nous pouvons consulter la page 26 pour plus de détails sur la façon dont cette valeur de configuration est construite. Une valeur de configuration courante se compose comme suit :
0xF5 - Configuration du dispositif
-
Bit 7,6,5 ->
101(1000ms de temps de veille) -
Bit 4,3,2 ->
000(coefficient de filtrage = désactivé) -
Bit 1 ->
0 -
Bit 0 ->
0(désactive le SPI à 3 fils) -
Valeur finale :
10100000en binaire, ou0xA0en hexadécimal.
0xF4 - Configuration de la mesure
-
Bit 7,6,5 ->
001(suréchantillonnage de la température x1) -
Bit 4,3,2 ->
001(suréchantillonnage de la pression x1) -
Bit 1,0 ->
11(Mode normal - mesures continues) -
Valeur finale :
00100111en binaire, ou0x27en hexadécimal.
OK - maintenant nous savons que si nous écrivons ces valeurs dans les registres correspondants, le module commencera à mesurer les données, et nous pourrons les lire en retour ! Retournons dans le DigiLab pour écrire les valeurs !
Dans l'application DigiLab, aller dans I2C Probe, et sélectionner l'appareil avec l'adresse 0x76. Cette fois, cliquez sur le bouton R/W - et vous serez amené à un écran où vous pouvez entrer le registre que vous voulez modifier.
Entrez le registre F5 (vous pouvez le taper ou utiliser les touches fléchées pour augmenter l'adresse) et cliquez sur OK. On nous demande maintenant combien de données nous devons lire dans le registre. D'après le document, nous savons qu'il s'agit d'un octet, nous entrons donc 1 et cliquons sur OK.
Nous sommes maintenant dans l'éditeur hexadécimal intégré au DigiLab, et nous regardons directement dans la mémoire du BMP280. A l'aide des touches fléchées, définissez la valeur du registre à A0 et cliquez sur OK. Vous obtiendrez une confirmation que la puce a été programmée.

Maintenant, faites la même chose pour le registre 0xF4, en fixant sa valeur à 27 et cliquez sur OK. Vous obtiendrez à nouveau la confirmation que la puce a été programmée. Félicitations ! Le BMP280 est maintenant configuré et mesure des données selon vos valeurs de configuration. Prochaine étape : lire les valeurs !
Extraction des données de température
Vous l'avez peut-être deviné - pour extraire les données de température, nous devons vérifier les valeurs dans les registres 0xFA - 0xFC. Parcourez chaque registre et notez les données quelque part.

Extraction des données de pression
Répétez le processus pour les données de pression, dans les registres 0xF7 - 0xF9. Parcourez à nouveau chaque registre et notez les données quelque part.
Extraction des données d'étalonnage
Le BMP280 s'auto-calibre en utilisant une variété de points de données différents. Afin de traduire correctement les valeurs de pression et de température, nous devons également noter les données d'étalonnage. Répétez donc le processus une dernière fois, pour les registres 0x88 - 0xA1.
Au total, vous devriez avoir 3 octets de données de température, 3 octets de données de pression et 26 octets de valeurs d'étalonnage - quelque chose comme :
Données de température
0xFA : 0x88 0xFB : 0x27 0xFC : 0x00
Données de pression 0xF7 : 0x54 0xF8 : 0x8C 0xF9 : 0x00 Données d'étalonnage 0x88 : 37 0x89 : 70 0x8A : d0 0x8B : 68 0x8C : 32 0x8D : 00 0x8E : 1C 0x8F : 90 0x90 : 25 0x91 : D6 0x92 : D0 0x93 : 0B 0x94 : 04 0x95 : 1B 0x96 : 40 0x97 : 00 0x98 : F9 0x99 : FF 0x9A : B4 0x9B : 2D 0x9C : E8 0x9D : D1 0x9E : 88 0x9F : 13 0xA0 : 00 0xA1 : 4B
Construction d'un outil d'interprétation des données extraites
Nous sommes prêts à transformer les données en quelque chose de lisible par l'homme. Selon la fiche technique (page 21), les données sont stockées dans un format appelé "16-bit two's complement". Au lieu de passer des heures à se battre pour construire un outil, nous nous appuyons sur l'IA pour nous construire un interprète. Nous avons utilisé l'agent / outil cli Aider avec Claude Opus, mais n'importe quel modèle ou moyen fonctionnerait très bien.
Créer un outil de calcul javascript qui prend les valeurs de température de 0xFA-0xFC et les valeurs de pression de 0xF7-0xF9, et les valeurs d'étalonnage de 0x88-0xA1 - à partir d'un module BMP280, et fournit une sortie de température (en °C) et une sortie de pression en hectoPascals.
Visitez le calculateur en ligne ici
Nous pouvons introduire nos données dans l'outil qui en résulte, et il produira les valeurs de température et de pression correctes du capteur.
Nous pouvons même étendre l'outil pour estimer l'altitude. Le calcul de l'altitude est assez simple :
altitude = 44330 * (1 - (pression/pression_niveau_de_la_mer)^0,1903)
La seule variable qui nous manque est la "pression au niveau de la mer". Nous pouvons soit utiliser une "moyenne mondiale", 1013,25hPa, mais les résultats auront une grande marge d'erreur. Nous pouvons également obtenir la pression au niveau de la mer à partir d'une station météorologique proche !
Modifiez le formulaire de la calculatrice comme suit :
1) Lorsque vous avez cliqué sur Calculer la température et la pression et que les résultats ont été calculés, ajoutez un bouton sous le cadre "Debug Information" :"Estimate Altitude (Requires Localisation)".Sous ce bouton, ajouter en italique "Les données de localisation sont utilisées pour envoyer une requête anonyme à l'API Open-Meteo, afin de récupérer la valeur de la pression atmosphérique QNH/niveau de la mer la plus proche de vous. Cela nous permet d'estimer votre altitude actuelle."
Lorsque l'utilisateur clique sur ce bouton, demandez-lui ses données de localisation via le navigateur. S'il refuse, affichez un cadre d'erreur qui dit: "Désolé, nous ne pouvons pas estimer l'altitude sans données de localisation".
Si nous disposons des données de localisation de l'utilisateur, nous envoyons une demande à Open-Meteo pour récupérer la valeur QNH la plus proche de sa position.
S'il y a une erreur, l'afficher dans un cadre Si nous obtenons des informations positives, utiliser toutes les données pour estimer l'altitude actuelle de l'utilisateur.
Visitez le calculateur en ligne ici
Maintenant, l'outil peut même estimer l'altitude ! À notre avis, la possibilité d'accomplir rapidement des quêtes secondaires est un outil parfait pour l'IA. Traditionnellement, il aurait fallu au moins une heure pour terminer ce type d'outil, ce qui aurait détourné l'attention de nos objectifs principaux.
En résumé
Nous avons vu que la fonction I2C Probe du DigiLab Lab401 est incroyablement utile. Elle est puissante, polyvalente, mais simple à utiliser. Elle fait abstraction de toutes les parties difficiles de la communication, et utilise son "moteur de prédiction" pour identifier les différents modules, et vous permet même de lire et d'écrire des valeurs directement sur le module.
L'exploration des modules I2C a toujours été assez compliquée, ou nécessite des outils plus coûteux, l'écriture de code et n'est généralement pas une expérience facile. Le DigiLab rend l'exploration I2C non seulement simple, mais accessible à tous, de sorte que votre curiosité ne soit pas bloquée par des frustrations.
Travail à domicile
Nous avons mentionné que le DigiLab possède une puce mémoire I2C embarquée! Avec tout ce que vous avez appris, votre devoir est d'utiliser le DigiLab pour détecter et identifier la puce mémoire, puis d'y écrire quelques valeurs. Tu peux vérifier si cela a fonctionné - en déconnectant le DigiLab et en le reconnectant - les données que tu as écrites seront toujours sauvegardées dans la mémoire. Si tu as besoin de stocker secrètement des données que tu ne veux pas que ton Flipper connaisse, tu as maintenant une cachette !
Ressources
Les deux outils d'interprétation des données du capteur BMP280 sont disponibles sur GitHub pour expérimentation et adaptation : https://github.com/lab-401/digilab-tutorial-bmp280
Laisser un commentaire