Share via


Lire les conditions environnementales d’un capteur

L’un des scénarios les plus courants pour les appareils IoT est la détection des conditions environnementales. Plusieurs capteurs sont disponibles pour surveiller la température, l’humidité, la pression barométrique, etc.

Dans cette rubrique, vous allez utiliser .NET pour lire les conditions environnementales d’un capteur.

Prérequis

  • Ordinateur à carte unique (SBC) ARM (ARMv7 ou version supérieure)
  • Carte d’évaluation de capteur d’humidité/pression atmosphérique/température BME280
  • Câbles de liaison
  • Tableau de navigation (facultatif)
  • Carte d’évaluation GPIO Raspberry Pi (facultative)
  • Kit de développement logiciel (SDK) .NET version 7 ou ultérieure

Notes

Ce tutoriel est écrit en supposant que l’appareil cible est Raspberry Pi. Toutefois, ce tutoriel peut être utilisé pour n’importe quel SBC Linux qui prend en charge .NET, comme Orange Pi, ODROID, etc.

Important

Il existe de nombreux fabricants de cartes BME280. La plupart des conceptions sont similaires, et le fabricant n’influe pas sur leur fonctionnement. Ce didacticiel tente de tenir compte des variations. Vérifiez que votre carte BME280 comprend une interface I2C (Inter-Integrated Circuit).

Les composants comme les circuits imprimés BME280 sont généralement vendus avec des têtes de broche non soudées. Si vous n’êtes pas à l’aise avec le soudage, recherchez un circuit imprimé BME280 avec une tête de broche présoudée ou un autre connecteur. Si vous le souhaitez, envisagez d’apprendre à souder ! Voici un bon guide de débutant pour le soudage.

Préparer le SBC

Vérifiez que votre SBC est configuré pour prendre en charge les services suivants :

  • SSH
  • I2C

Pour de nombreux appareils, aucune configuration supplémentaire n’est requise. Pour Raspberry Pi, utilisez la commande raspi-config. Pour plus d’informations sur raspi-config, reportez-vous à la documentation sur Raspberry Pi.

Préparer le matériel

Utilisez les composants matériels pour générer le circuit, comme illustré dans le diagramme suivant :

Diagramme Fritzing montrant la connexion de Raspberry Pi au circuit imprimé BME280

Voici les connexions du Raspberry Pi au circuit imprimé BME280. Notez que les étiquettes de broche diffèrent sur les différents circuits imprimés BME280.

Raspberry Pi Circuit imprimé BME280 Couleur
3,3V VIN/3V3 rouge
Masse GND black
SDA (GPIO 2) SDI/SDA blue
SCL (GPIO 3) SCK/SCL orange

Si nécessaire, reportez-vous au schéma de raccordement suivant :

Diagramme montrant le raccordement de l’en-tête GPIO Raspberry Pi. Image avec la permission de Raspberry Pi Foundation.
Image avec la permission de Raspberry Pi Foundation.

Conseil

Un circuit imprimé GPIO conjointement avec un tableau de navigation est recommandé pour simplifier les connexions à la tête du GPIO.

Créer l’application

Effectuez les étapes suivantes dans votre environnement de développement préféré :

  1. Créez une application console .NET à l’aide de l’interface CLI .NET ou de Visual Studio. Nommez le SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Ajoutez le package Iot.Device.Bindings au projet. Utilisez l’interface CLI .NET du répertoire du projet ou Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Remplacez le contenu du fichier Program.cs par le code suivant :

    using System;
    using System.Device.I2c;
    using System.Threading;
    using Iot.Device.Bmxx80;
    using Iot.Device.Bmxx80.PowerMode;
    
    var i2cSettings = new I2cConnectionSettings(1, Bme280.DefaultI2cAddress);
    using I2cDevice i2cDevice = I2cDevice.Create(i2cSettings);
    using var bme280 = new Bme280(i2cDevice);
    
    int measurementTime = bme280.GetMeasurementDuration();
    
    while (true)
    {
        Console.Clear();
    
        bme280.SetPowerMode(Bmx280PowerMode.Forced);
        Thread.Sleep(measurementTime);
    
        bme280.TryReadTemperature(out var tempValue);
        bme280.TryReadPressure(out var preValue);
        bme280.TryReadHumidity(out var humValue);
        bme280.TryReadAltitude(out var altValue);
    
        Console.WriteLine($"Temperature: {tempValue.DegreesCelsius:0.#}\u00B0C");
        Console.WriteLine($"Pressure: {preValue.Hectopascals:#.##} hPa");
        Console.WriteLine($"Relative humidity: {humValue.Percent:#.##}%");
        Console.WriteLine($"Estimated altitude: {altValue.Meters:#} m");
    
        Thread.Sleep(1000);
    }
    

    Dans le code précédent :

    • i2cSettings est défini sur une nouvelle instance de I2cConnectionSettings. Le constructeur définit le paramètre busId sur 1 et le paramètre deviceAddress sur Bme280.DefaultI2cAddress.

      Important

      Certains fabricants de circuits imprimés BME280 utilisent la valeur d’adresse secondaire. Pour ces appareils, utilisez Bme280.SecondaryI2cAddress.

    • Une déclaration using crée une instance d’appel de I2cDevice en appelant I2cDevice.Create et en transférant à i2cSettings. Ce I2cDevice représente le bus I2C. La déclaration using garantit que l’objet est supprimé et que les ressources matérielles sont correctement libérées.

    • Une autre déclaration using crée une instance de Bme280 représentant le capteur. Le I2cDevice est transmis au constructeur.

    • Le temps nécessaire pour que la puce prenne des mesures avec les paramètres actuels (par défaut) de la puce est récupéré en appelant GetMeasurementDuration.

    • Une boucle while s’exécute indéfiniment. Chaque itération :

      1. Efface la console.

      2. Définit le mode d’alimentation sur Bmx280PowerMode.Forced. Cela force la puce à effectuer une mesure, à stocker les résultats, puis à se mettre en veille.

      3. Lit les valeurs de température, de pression, d’humidité et d’altitude.

        Notes

        L’altitude est calculée par la liaison de périphériques. Cette surcharge de TryReadAltitude utilise la pression moyenne au niveau de la mer pour générer une estimation.

      4. Écrit les conditions environnementales actuelles dans la console.

      5. Mise en veille pendant 1 000 ms.

  4. Générez l'application. Si vous utilisez l’interface CLI .NET, exécutez dotnet build. Pour générer dans Visual Studio, appuyez sur Ctrl+Maj+B.

  5. Déployez l’application sur le SBC en tant qu’application autonome. Pour obtenir des instructions, consultez Déployer des applications .NET sur Raspberry Pi. Veillez à accorder à l’exécutable l’autorisation exécuter à l’aide de chmod +x.

  6. Exécutez l’application sur le Raspberry Pi en basculant vers le répertoire de déploiement et en exécutant l’exécutable.

    ./SensorTutorial
    

    Observez la sortie du capteur dans la console.

  7. Terminez le programme en appuyant sur Ctrl+C.

Félicitations ! Vous avez utilisé I2C pour lire les valeurs d’un capteur de pression barométrique/de température/d’humidité !

Obtenir le code source

La source de ce tutoriel est disponible sur GitHub.

Étapes suivantes