Lesen von Umgebungsbedingungen aus einem Sensor

Eines der gängigsten Szenarien für IOT-Geräte ist das Erkennen von Umgebungsbedingungen. Es stehen eine Vielzahl von Sensoren zur Verfügung, um Temperatur, Luftfeuchtigkeit, den barometrischen Druck und mehr zu überwachen.

In diesem Thema verwenden Sie .NET zum Lesen von Umgebungsbedingungen von einem Sensor.

Voraussetzungen

  • Raspberry Pi (2 oder größer) mit installiertem Raspberry Pi OS
  • BME280 Feuchtigkeit/Luftdruck/Temperatursensor-Breakout
  • Jumperdrähte
  • Breadboard (optional)
  • Raspberry Pi GPIO Breakout Board (optional)
  • Version 5.0.100 RC2 oder höher des .NET SDK

Wichtig

Es gibt viele Hersteller von BME280 Breakouts. Die meisten Designs sind ähnlich, und der Hersteller sollte keinen Unterschied zu den Funktionen machen. In diesem Tutorial wird versucht, mehrere Variationen zu berücksichtigen. Stellen Sie sicher, dass BME280 Breakout eine Schnittstelle für die Inter Integrated Circuit (I2C) enthält.

Komponenten wie BME280-Breakouts werden in der Regel mit nicht gelöteten Stiftleisten verkauft. Wenn Sie sich mit Löten auskennen, suchen Sie nach einem BME280-Breakoutboard mit einer vorgelöteten Stiftleiste oder einer anderen Verbindung. Wenn Sie Zeit und Lust haben, können Sie auch Löten lernen. Hier ist ein guter Leitfaden für Anfänger.

Vorbereiten von Raspberry Pi

Verwenden Sie den raspi-config-Befehl, um sicherzustellen, dass die folgenden zwei Dienste aktiviert sind:

  • SSH
  • I2C

Weitere Informationen zu raspi-config finden Sie in der Dokumentation für Raspberry Pi.

Vorbereiten der Hardware

Verwenden Sie die Hardwarekomponenten, um eine Schaltung wie im folgenden Diagramm zu erstellen:

Ein Fritzing-Diagramm, das die Verbindung zwischen Raspberry Pi und BME280 Breakout Board anzeigt

Im folgenden sind die Verbindungen vom Raspberry Pi zum BME280-Breakout aufgeführt:

  • 3.3 v bis Vin ODER 3v3 (rot dargestellt)
  • Erde zu GND (schwarz)
  • SDA (GPIO 2) zu SDI ODER SDA (blau)
  • SCL (GPIO 3) zu SCK ODER SCL (Orange)

Beachten Sie falls nötig das folgende Anschlussdiagramm:

Anschlussdiagramm: Raspberry Pi GPIO-Header. Bild mit freundlicher Genehmigung der Raspberry Pi Foundation.
Bild mit freundlicher Genehmigung der Raspberry Pi Foundation.

Tipp

Ein GPIO-Breakout-Board in Verbindung mit einer Steckplatine wird empfohlen, um die Verbindungen zum GPIO-Header zu optimieren.

Erstellen der App

Führen Sie in Ihrer bevorzugten Entwicklungsumgebung die folgenden Schritte aus:

  1. Erstellen Sie eine neue .NET-Konsolen-App, indem Sie entweder die .NET-CLI oder Visual Studio verwenden. Nennen Sie sie SensorTutorial.

    dotnet new console -o SensorTutorial
    
  2. Fügen Sie das Paket Iot.Device.Bindings in das Projekt ein. Verwenden Sie entweder .NET CLI aus dem Projektverzeichnis oder Visual Studio.

    dotnet add package Iot.Device.Bindings --version 1.1.0-*
    
  3. Ersetzen Sie den Inhalt von Program.cs durch den folgenden Code:

    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);
    }
    

    Für den Code oben gilt:

    • i2cSettings wird auf eine neue Instanz von I2cConnectionSettings festgelegt. Vom Konstruktor wird der Parameter busId auf „1“ und der Parameter deviceAddress auf Bme280.DefaultI2cAddress festgelegt.

      Wichtig

      Einige BME280-Breakout-Hersteller verwenden den sekundären Adresswert. Nutzen Sie für solche Geräte Bme280.SecondaryI2cAddress.

    • Mit einer using-Deklaration wird eine Instanz von I2cDevice erstellt, indem I2cDevice.Create aufgerufen und i2cSettings übergeben wird. Diese I2cDevice steht für den I2C-Bus. Mit der using-Deklaration wird sichergestellt, dass das Objekt verworfen wird und die Hardwareressourcen richtig freigegeben werden.

    • Eine andere using-Deklaration erstellt eine Instanz von Bme280 zur Darstellung des Sensors. Das I2cDevice wird im Konstruktor übergeben.

    • Die Zeit, die der Chip zum Übernehmen von Messungen mit den aktuellen (Standard-) Einstellungen des Chips benötigt, wird durch das Aufrufen von GetMeasurementDuration abgerufen.

    • Eine while-Schleife wird ohne zeitliche Begrenzung ausgeführt. Bei jeder Iteration passiert Folgendes:

      1. Löscht die Konsole.

      2. Legt den Energiemodus auf Bmx280PowerMode.Forced fest. Dies zwingt den Chip, eine Messung durchzuführen, die Ergebnisse zu speichern und sich dann in den Standbymodus zu versetzen.

      3. Liest die Werte für Temperatur, Druck, Luftfeuchtigkeit und Höhe.

        Hinweis

        Die Höhe wird von der Gerätebindung berechnet. Diese Überladung von TryReadAltitude verwendet den mittleren Meeresspiegeldruck, um eine Schätzung zu generieren.

      4. Schreibt die aktuellen Umgebungsbedingungen in die Konsole.

      5. Wartet 1000 ms lang ab.

  4. Erstellen Sie die App. Führen Sie dotnet build aus, wenn Sie die .NET-CLI verwenden. Drücken Sie STRG+UMSCHALT+B, um die App in Visual Studio zu kompilieren.

  5. Stellen Sie die App auf dem Raspberry Pi-Gerät als eigenständige App bereit. Anweisungen hierzu finden Sie unter Bereitstellen von .NET-Apps auf einem Raspberry Pi-Gerät. Erteilen Sie dabei mithilfe von chmod +x die execute-Berechtigung für ausführbare Dateien.

  6. Führen Sie die App auf dem Raspberry Pi aus, indem Sie zum Bereitstellungsverzeichnis wechseln und die ausführbare Datei ausführen.

    ./SensorTutorial
    

    Beachten Sie die Sensorausgabe in der Konsole.

  7. Beenden Sie das Programm, indem Sie STRG+C drücken.

Herzlichen Glückwunsch! Sie haben I2C verwendet, um Werte von einem Temperatur-/Luftfeuchtigkeits-/Luftdrucksensor zu lesen!

Herunterladen des Quellcodes

Der Quellcode für dieses Tutorial ist auf GitHub verfügbar.

Nächste Schritte