Partager via


Lire les conditions environnementales à partir 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.

Prerequisites

  • Ordinateur monocarte basé sur ARM (ARMv7 ou supérieur) (SBC)
  • Module de capteur d'humidité/pression barométrique/température BME280
  • Fils de jumper
  • Plaque d'essai (facultatif)
  • Plaque d'extension GPIO Raspberry Pi (facultatif)
  • .NET SDK 10 ou version ultérieure

Note

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 y a de nombreux fabricants de cartes BME280. La plupart des conceptions sont similaires, et le fabricant ne doit pas faire de différence avec les fonctionnalités. Ce didacticiel tente de tenir compte des variations. Vérifiez que votre breakout BME280 inclut une interface Inter-Integrated Circuit (I2C).

Les composants tels que les breakouts BME280 sont souvent vendus avec des broches non soudées. Si vous n’êtes pas à l’aise avec la soudure, recherchez une carte de dérivation BME280 avec un en-tête pré-soudé ou un autre connecteur. Si vous le souhaitez, envisagez d’apprendre à souder ! Voici un bon guide de débutant pour souder.

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 raspi-config commande. Pour plus d’informations sur raspi-config, reportez-vous à la documentation 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 à BME280 breakout board

Voici les connexions du Raspberry Pi au breakout BME280. Notez que les étiquettes d’épingle diffèrent sur les différents breakouts BME280.

Raspberry Pi BME280 Breakout Couleur
3.3V VIN/3V3 rouge
Terre GND black
SDA (GPIO 2) SDI/SDA bleu
SCL (GPIO 3) SCK/SCL orange

Reportez-vous au schéma de brochage suivant si nécessaire.

Diagramme montrant le pinout de l’en-tête GPIO Raspberry Pi. Image courtesy Raspberry Pi Foundation.
Image courtesy Raspberry Pi Foundation.

Conseil / Astuce

Une carte de dérivation GPIO en conjonction avec une plaque de prototypage est recommandée pour simplifier les connexions à l'en-tête GPIO.

Créer l’application

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

  1. Créez une nouvelle application console .NET à l’aide de la 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 .NET CLI à partir du répertoire du projet ou Visual Studio.

    dotnet package add Iot.Device.Bindings --version 4.1.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 busId paramètre sur 1 et le deviceAddress paramètre sur Bme280.DefaultI2cAddress.

      Important

      Certains fabricants de modules BME280 utilisent la valeur d’adresse secondaire. Pour ces appareils, utilisez Bme280.SecondaryI2cAddress.

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

    • Une autre using déclaration crée une instance de Bme280 représentant le capteur. Le I2cDevice est passé 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ée en appelant GetMeasurementDuration.

    • Une while boucle 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 dormir.

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

        Note

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

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

      5. Veille à 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+Shift+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 d’exécution à l’aide de chmod +x.

  6. Exécutez l’application sur 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/température/humidité !

Obtenir le code source

La source de ce didacticiel est available sur GitHub.

Prochaines étapes