Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- Breadboard (optional)
- Raspberry Pi GPIO Breakout Board (optional)
- .NET SDK 8 oder höher
Hinweis
Dieses Tutorial wurde unter der Annahme geschrieben, dass das Zielgerät ein Raspberry Pi ist. Dieses Tutorial kann jedoch für jeden Linux-basierten 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 der BME280-Breakout eine I2C-Schnittstelle (Inter-Integrated Circuit) 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 bei einem Raspberry Pi den raspi-config
-Befehl. Weitere Informationen zu raspi-config
finden Sie in der Dokumentation für Raspberry Pi.
Vorbereiten der Hardware
Verwenden Sie die Hardwarekomponenten, um den Schaltkreis wie im folgenden Diagramm dargestellt zu erstellen:
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:
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:
Erstellen Sie eine neue .NET-Konsolen-App, indem Sie entweder die .NET-CLI oder Visual Studio verwenden. Nennen Sie es SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorial
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 3.2.0-*
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 als neue Instanz vonI2cConnectionSettings
gesetzt. Der Konstruktor legt denbusId
Parameter auf 1 und dendeviceAddress
Parameter aufBme280.DefaultI2cAddress
.Wichtig
Einige BME280-Breakout-Hersteller verwenden den sekundären Adresswert. Verwenden Sie
Bme280.SecondaryI2cAddress
für diese Geräte .Eine using-Deklaration erstellt eine Instanz von
I2cDevice
, indemI2cDevice.Create
aufgerufen wird undi2cSettings
übergeben wird. Diese Instanz vonI2cDevice
stellt den I2C-Bus dar. Mit derusing
-Deklaration wird sichergestellt, dass das Objekt verworfen wird und die Hardwareressourcen richtig freigegeben werden.Eine andere
using
-Deklaration erstellt eine Instanz vonBme280
zur Darstellung des Sensors. DasI2cDevice
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
GetMeasurementDuration
abgerufen.Eine
while
-Schleife wird ohne zeitliche Begrenzung ausgeführt. Bei jeder Iteration passiert Folgendes:Löscht die Konsole.
Legt den Energiemodus auf
Bmx280PowerMode.Forced
. Dadurch wird der Chip gezwungen, eine Messung durchzuführen, die Ergebnisse zu speichern und dann zu schlafen.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 Meeresspiegeldruck, um eine Schätzung zu generieren.Schreibt die aktuellen Umgebungsbedingungen in die Konsole.
Wartet 1000 ms lang ab.
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 erstellen.Stellen Sie die App auf dem SBC 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 die
chmod +x
-Berechtigung für ausführbare Dateien.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.
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
Der Quellcode für dieses Tutorial ist auf GitHub verfügbar.