Comment contourner rapidement et sans puces inutiles l'immuabilité de l'adresse du capteur HTU21

Salutations à tous les habitants de Habr!


Je veux parler d'une nouvelle façon inattendue de connecter plusieurs capteurs HTU21 via le bus I2C sans utiliser de puces supplémentaires.


Ce capteur est toujours populaire auprès de divers maîtres du bricolage, et il est mérité: il est plus précis que son prédécesseur et de petite taille (ce qui est pratique pour l'intégration dans des appareils).


Plus récemment, comme de nombreux utilisateurs, j'ai été intrigué par le manque de possibilité de changer l'adresse de ce capteur. Google, bien sûr, a publié un tas d'articles sur toutes sortes de multiplexeurs pour le bus I2C, de «acheter dans la célèbre boutique en ligne chinoise» à «bricolage». Nulle part il n'y avait d'options sans fer à souder et coûts supplémentaires. Cela ne pouvait que bouleverser car il était nécessaire de résoudre le problème ici et maintenant (les clients sont de tels clients). Je veux parler d'un moyen plus simple et plus détendu et très simple de sortir de cette situation. Intrigué? Alors je vous dis.


Données initiales: Arduino mega et 4 capteurs HTU21.


Tâche: il est nécessaire de connecter tous les capteurs htu via le bus I2C et de lire les valeurs. De plus, ces capteurs ne sont pas les seuls périphériques esclaves sur ce bus (les plans incluent également un écran LCD et d'autres capteurs).


Que savons-nous? Le capteur HTU21 a une adresse fixe sur le bus - 0x40 1 . Comment, ayant un microcontrôleur et 4 capteurs avec les mêmes adresses sur le bus, comment accéder à un appareil spécifique sans puces supplémentaires?


Tout se révèle assez simple:


  1. connectez la masse, scl et sda comme d'habitude (n'oubliez pas les résistances de pull-up pour la ligne de données et la synchronisation);
  2. nous connectons le câble d'alimentation de chaque capteur à une entrée numérique sur l'Arduino (vous comprenez probablement déjà où je mène)
  3. appliquer alternativement HIGH à chaque entrée numérique qui alimente un capteur séparé et, après un délai, lire la valeur du capteur alimenté.
  4. donner un signal BAS pour ce capteur et répéter le cycle pour les autres capteurs.

Bien entendu, cette méthode présente également des inconvénients, par exemple, le nombre requis de sorties numériques ou analogiques libres peut tout simplement ne pas être disponible. Mais pour une utilisation dans des projets, ce principe fonctionne et fonctionne à des distances suffisantes du microcontrôleur. J'espère que cet article vous aidera à économiser vos nerfs, votre argent et votre temps.


Pas étonnant qu'on dise que tout ingénieux est simple!


Annonce jointe:


/* ,        HTU21   BME280 */ void greenhouseHT() { delay(30); rooms[3].TempA = bme.readTemperature(); delay(30); rooms[3].HumA = bme.readHumidity(); delay(30); for (int i=0; i<3; i++) { digitalWrite(HTU21_pins[i], HIGH); delay(30); rooms[i].HumA = myGreenhouseHumidity.readHumidity(); rooms[i].TempA = myGreenhouseHumidity.readTemperature(); delay(30); digitalWrite(HTU21_pins[i], LOW); delay(30); } digitalWrite(pin_HTU21_1, HIGH); } 

Source: https://habr.com/ru/post/fr425541/


All Articles