Scroll Indicator
Séduction des capteurs I2C : DigiLab + Flipper
Le DigiLab est un accessoire pour FlipperZero fabriqué par Lab401 et tixlegeek, qui a pour but d'être le premier outil que vous utilisez pour explorer l'électronique. Il intègre un oscilloscope et une sonde, et utilise le son, la lumière et les vibrations comme outils de rétroaction physique, ce qui permet d'explorer les circuits d'une manière entièrement nouvelle et curieusement intuitive.
Il dispose également d'un outil de sonde I2C. Vous avez probablement entendu parler de l'I2C, et si vous avez construit des gadgets basés sur Arduino ou RaspberryPi auxquels sont attachés des gadgets, vous avez probablement utilisé l'I2C.
L'I2C est un protocole de communication construit dans les années 1980, mais qui reste aujourd'hui le protocole de référence pour les communications à faible vitesse entre les modules et les capteurs en raison de sa simplicité (il n'utilise que deux fils), de sa flexibilité (vous pouvez avoir jusqu'à plus de 127 appareils sur les mêmes lignes, et leur parler individuellement) et de son omniprésence (presque tout parle I2C).
Avant que vous ne vous endormiez, voici la question clé : pourquoi devrais-je m'enthousiasmer pour un outil qui utilise un protocole vieux de 40 ans ?
La réalité est que travailler avec des dispositifs I2C, même aujourd'hui, peut être très frustrant. La plupart des capteurs I2C ne sont que des micro-ordinateurs avec lesquels vous pouvez communiquer. Supposons que vous ayez un capteur de température et que vous souhaitiez connaître sa température. En théorie, vous pouvez simplement lui demander quelle est la température et il vous le dira. En réalité, vous devez relier le capteur à un ordinateur quelconque - un Arduino, un ESP-32, un Raspberry PI. Il faut ensuite configurer un environnement de programmation pour l'appareil hôte, puis trouver une bibliothèque ou écrire du code pour essayer d'interfacer avec le capteur. C'est très inefficace et peu pratique. Pourquoi ne pouvez-vous pas simplement accéder au capteur, saisir les données et en finir, sans tracas ?
Avec la sonde I2C du DigiLab, travailler avec I2C est un jeu d'enfant. Branchez le module et il est automatiquement détecté (et supporte même plusieurs modules en même temps). Il identifie également chaque module grâce à son moteur prédictif intégré. L'envoi et la récupération des données s'effectuent via l'interface utilisateur intégrée et l'éditeur hexadécimal. En résumé, vous pouvez connecter, détecter, identifier et interagir avec un module I2C en quelques minutes, plutôt qu'en quelques heures.
Commençons
Dans ce tutoriel, nous allons apprendre à connecter et à lire les données d'un capteur en moins d'une minute. Nous allons travailler avec le capteur LM75A, un capteur de température très populaire. Nous verrons comment connecter le module, l'identifier et lire les données de température directement à partir du capteur - sans code, sans débogage.
Il existe de nombreuses cartes d'extension LM75A, mais celle-ci est la mienne.
A la fin de ce tutoriel, vous aurez acquis les compétences suivantes :
- Comment communiquer avec des modules inconnus via les principes de base
- Comment utiliser les fiches techniques pour utiliser des modules inconnus
- Comment utiliser le DigiLab pour identifier des modules I2C inconnus
- Comment lire 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 LM75ADP au DigiLab
- Détecter et identifier le LM75ADP
- Obtenir et utiliser la fiche technique
- Lire les données de température
- Construire un outil pour interpréter les données récupérées
Remarque: Le DigiLab peut également écrire des données sur des périphériques I2C, ce qui vous permet de configurer des capteurs, d'écrire sur des puces mémoire, etc. Nous avons un autre tutoriel sur l'utilisation du DigiLab avec un capteur BMP280 - un capteur beaucoup plus complexe, qui nécessite la lecture et l'écriture. C'est un peu plus compliqué, mais vous pouvez néanmoins le contrôler complètement avec le DigiLab. Si vous voulez apprendre à interagir complètement avec des capteurs et des modules, c'est une lecture recommandée !
Pour jouer le jeu à la maison, vous n'aurez besoin que de trois choses :
- L'accessoire DigiLab Lab401 pour FlipperZero®
- Un circuit imprimé LM75A
- Quelques câbles Dupont
Connexion du LM75A au DigiLab
Tout d'abord, nous allons connecter le module LM75A Breakout au DigiLab. Nous connecterons
- La broche 3.3V du DigiLab à la broche VCC/3.3v du LM75A
- La broche GND du DigiLab à la broche GND du LM75A
- La broche SCL du DigiLab vers la broche SCL du LM75A
- La broche DigiLab SDA à la broche SDA du LM75A
C'est tout le câblage que nous avons à faire ! Important - si vous utilisez une carte différente, assurez-vous de suivre ce qui est imprimé sur le circuit imprimé afin d'éviter de faire griller votre module !
Détection et identification du LM75
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 0x46. 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 naviguez dans la liste, vous verrez que le LM75B a été trouvé, et qu'il s'agit d'un "capteur de température" de NXP. 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 LM75A.
En parcourant le document, nous constatons que le capteur peut en fait faire un certain nombre de choses intéressantes (il peut également être utilisé comme thermostat, qui se déclenche à des températures spécifiques). Cependant, ce qui nous intéresse le plus se trouve à la page 6, avec la liste des registres (tableau 5). Un registre est le nom d'une partie de la mémoire où les données sont stockées. C'est un peu comme une boîte aux lettres. Elle a un numéro, on peut y mettre des choses, en retirer, et en fonction de sa taille, y stocker des quantités différentes.
Le LM75A stocke les données de température dans le registre avec l'adresse : 0x00. Le registre a une taille totale de 2 octets.
La page 8 décrit comment les données sont encodées, et donne quelques exemples sur la façon de les décoder. Maintenant, nous savons où obtenir les données, quelle quantité de données obtenir et comment les convertir en quelque chose de lisible par l'homme !
Lecture des données de température
Dans l'application DigiLab, allez à I2C Probe, et sélectionnez l'appareil avec l'adresse 0x48. Cette fois, cliquez sur le bouton R/W - et vous serez amené à un écran où vous pouvez entrer le registre que nous voulons lire.
Entrez le registre 00 (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 de 2 octets, nous entrons donc 2 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 LM75. Nous pouvons voir qu'il y a deux octets de données. C'est la réponse du module à la température !
Prenez note de ces deux octets : Dans notre exemple, 1E 20
Construire un outil pour interpréter les données récupérées
Maintenant que nous avons récupéré les données, nous devons les convertir en une forme lisible par l'homme. La fiche technique nous a fourni des informations sur la manière dont les données sont encodées, ainsi que de nombreux exemples. Nous pouvons exploiter ces données et un moteur d'intelligence artificielle pour construire un outil permettant de décoder les données
Nous travaillons avec un capteur de température LM75A.
Le capteur conserve les données de température dans deux octets de données de 8 bits, composés d'un octet le plus significatif (MSByte) et d'un octet le moins significatif (LSByte).
- Seuls 11 bits de ces deux octets sont utilisés pour stocker les données de température au format complément à 2 avec une résolution de 0,125 °C.
- Dans l'octet MSByte, tous les bits sont utilisés.
- Dans l'octet LSByte, seuls les bits 7, 6, et 5 sont utilisés.
Les autres bits sont rejetés.
Les bits sont mis en correspondance comme suit :Octet le plus significatif Bit 7 : `D10` Octet le plus significatif Bit 6 : `D9` Octet le plus significatif Bit 5 : `D8`. Octet le plus significatif Bit 4 : `D7` Octet le plus significatif Bit 3 : `D6` Octet le plus significatif Bit 2 : `D5` Octet le plus significatif Bit 1 : `D4` Octet le plus significatif Bit 0 : `D3` Octet le moins significatif Bit 7 : `D2` Octet le plus significatif Bit 6 : `D1` Octet le plus significatif Bit 5 : `D0`La température est calculée selon la méthode suivante :
1. Si le bitD10du MSByte des données de température= 0, la température est positive etValeur de la température (°C) = +(données de température) * 0,125 °C.
2. Si le bitD10de l'octet MSB des données de température= 1, la température est négative etValeur de la température (°C) = -(complément à 2 des données de température) * 0,125 °C.
Créez un outil Javascript qui prend deux octets hexadécimaux en entrée et décode la température correspondante. N'oubliez pas de convertir l'hexadécimal en binaire, de supprimer les bits 4, 3, 2, 1 et 0 de l'octet LSB. Mettez ensuite en correspondance les valeurs des bits de l'octet MSB et de l'octet LSB conformément au tableau ci-dessus et effectuez la conversion.
L'IA va glouglouter pendant un certain temps, puis vous obtiendrez, avec un peu de chance, un outil qui convertira les données de température du module en quelque chose de lisible par l'homme. Bien que nous hésitions à déclarer que l'IA est un élément positif, les LLM nous permettent d'itérer rapidement des outils qui, auparavant, nous auraient distraits de la tâche principale à accomplir.
Félicitations !
Félicitations, vous venez d'apprendre à utiliser le DigiLab pour apprivoiser les modules I2C. Comme vous pouvez le constater, le DigiLab fait abstraction de plusieurs couches de complexité, ce qui vous permet de travailler directement avec les modules. Bien que dans ce tutoriel nous n'ayons fait que lire des données, vous pouvez tout aussi bien écrire des données. Nous avons un article à venir sur l'utilisation du DigiLab pour configurer un module plus complexe en écrivant directement dans le module.
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, et 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
Notre outil d'interprétation des données du capteur LM75A est disponible sur GitHub pour expérimentation et adaptation : https://github.com/lab-401/digilab-tutorial-lm75a

Laisser un commentaire