Freigeben über


Lesen von Umgebungsbedingungen von einem Sensor

Eines der häufigsten Szenarien für IoT-Geräte ist die Erkennung von Umgebungsbedingungen. Eine Vielzahl von Sensoren stehen zur Verfügung, um Temperatur, Feuchtigkeit, barometrischer Druck und vieles mehr zu überwachen.

In diesem Thema verwenden Sie .NET, um Umgebungsbedingungen von einem Sensor zu lesen.

Voraussetzungen

  • ARM-basierter (ARMv7 oder höher) Single-Board-Computer (SBC)
  • BME280 Feuchtigkeit/barometrischer Druck-/Temperatursensorausbruch
  • Jumper-Kabel
  • Steckplatine (optional)
  • Raspberry Pi GPIO Breakout Board (optional)
  • .NET SDK 10 oder höher

Hinweis

Dieses Tutorial wurde unter der Annahme geschrieben, dass das Zielgerät ein Raspberry Pi ist. Dieses Lernprogramm kann jedoch für jeden linuxbasierten SBC verwendet werden, der .NET unterstützt, z. B. Orange Pi, ODROID und mehr.

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 Lernprogramm wird versucht, Variationen zu berücksichtigen. Stellen Sie sicher, dass Ihr BME280-Breakout eine Inter-Integrated Circuit (I2C)-Schnittstelle enthält.

Komponenten wie BME280-Breakouts werden in der Regel mit nicht gelöteten Kontaktheadern 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 Anfängerleitfaden zum Verlöten.

Vorbereiten des SBC

Stellen Sie sicher, dass Ihr SBC für die Unterstützung der folgenden Dienste konfiguriert ist:

  • SSH
  • I2C

Bei vielen Geräten ist keine weitere Konfiguration erforderlich. Verwenden Sie für Raspberry Pi den raspi-config Befehl. Weitere Informationen raspi-configfinden Sie in der Raspberry Pi-Dokumentation.

Vorbereiten der Hardware

Verwenden Sie die Hardwarekomponenten, um den Schaltkreis wie im folgenden Diagramm dargestellt zu erstellen:

Ein Fritzing-Diagramm mit der Verbindung zwischen Raspberry Pi und BME280 Breakout board

Nachfolgend sind die Verbindungen vom Raspberry Pi zum BME280 Breakout aufgeführt. Beachten Sie, dass die Pin-Beschriftungen bei den verschiedenen BME280-Breakouts unterschiedlich sind.

Raspberry Pi BME280-Breakout Farbe
3,3 V VIN/3V3 Rot
Boden GND schwarz
SDA (GPIO 2) SDI/SDA blau
SCL (GPIO 3) SCK/SCL orange

Beachten Sie falls nötig das folgende Anschlussdiagramm:

Ein Diagramm, das die Pinbelegung des Raspberry Pi GPIO-Headers zeigt. 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 entweder mithilfe der .NET CLI oder Visual Studio. Nennen Sie es SensorTutorial.

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

    dotnet package add Iot.Device.Bindings --version 4.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);
    }
    

    Im vorhergehenden Code:

    • i2cSettings wird auf eine neue Instanz von I2cConnectionSettings. Der Konstruktor legt den busId Parameter auf 1 und den deviceAddress Parameter auf Bme280.DefaultI2cAddress.

      Wichtig

      Einige BME280-Breakout-Hersteller verwenden den sekundären Adresswert. Verwenden Sie Bme280.SecondaryI2cAddressfür diese Geräte .

    • Eine using-Deklaration erstellt eine Instanz von I2cDevice, indem sie I2cDevice.Create aufruft und i2cSettings übergibt. Dies I2cDevice stellt den I2C-Bus dar. Die using Deklaration stellt sicher, dass das Objekt beendet wird und Hardwareressourcen ordentlich freigegeben werden.

    • Eine weitere using Deklaration von erstellt eine Instanz von Bme280, um den Sensor darzustellen. Der I2cDevice wird im Konstruktor übergeben.

    • Die Zeit, die für den Chip erforderlich ist, um Messungen mit den aktuellen Einstellungen des Chips (Standardeinstellungen) zu nehmen, wird durch Aufrufen GetMeasurementDurationabgerufen.

    • Eine while Schleife läuft endlos. Bei jeder Iteration passiert Folgendes:

      1. Löscht die Konsole.

      2. Legt den Energiemodus auf Bmx280PowerMode.Forced. Dadurch wird der Chip gezwungen, eine Messung durchzuführen, die Ergebnisse zu speichern und dann zu schlafen.

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

        Hinweis

        Die Höhe wird durch die Gerätebindung berechnet. Diese Überladung von TryReadAltitude verwendet den mittleren Luftdruck auf Meereshöhe, um eine Schätzung zu erstellen.

      4. Schreibt die aktuellen Umgebungsbedingungen in die Konsole.

      5. Wartet 1000 ms lang ab.

  4. Erstellen Sie die App. Wenn Sie die .NET CLI verwenden, führen Sie dotnet build aus. Zum Erstellen in Visual Studio drücken Sie Ctrl+Shift+B.

  5. Stellen Sie die App auf dem SBC als eigenständige App bereit. Anweisungen finden Sie unter Deploy .NET apps to Raspberry Pi. Stellen Sie sicher, dass Sie der ausführbaren Datei mit chmod +x die Berechtigung zum Ausführen erteilen.

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

    ./SensorTutorial
    

    Beobachten Sie die Sensorausgabe in der Konsole.

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

Glückwunsch! Sie haben I2C verwendet, um Werte aus einem Temperatur-/Feuchtigkeits-/barometrischen Drucksensor zu lesen!

Herunterladen des Quellcodes

Die Quelle für dieses Lernprogramm ist auf GitHub verfügbar.

Nächste Schritte