Delen via


Omgevingsomstandigheden van een sensor lezen

Een van de meest voorkomende scenario's voor IoT-apparaten is het detecteren van omgevingsomstandigheden. Er zijn verschillende sensoren beschikbaar om temperatuur, vochtigheid, barometrische druk en meer te bewaken.

In dit onderwerp gebruikt u .NET om omgevingsomstandigheden van een sensor te lezen.

Vereiste voorwaarden

  • OP ARM gebaseerde (ARMv7 of hoger) single-board computer (SBC)
  • BME280 vochtigheid/barometrische druk/temperatuursensor breakout
  • Jumperdraden
  • Breadboard (prototypeplaat, optioneel)
  • Raspberry Pi GPIO uitbreidingsbord (optioneel)
  • .NET SDK 8 of hoger

Opmerking

Deze handleiding is geschreven, ervan uitgaande dat het doelapparaat een Raspberry Pi is. Deze zelfstudie kan echter worden gebruikt voor elke linux-SBC die .NET ondersteunt, zoals Orange Pi, ODROID en meer.

Belangrijk

Er zijn veel fabrikanten van BME280 breakoutboards. De meeste ontwerpen zijn vergelijkbaar en de fabrikant mag geen verschil maken met de functionaliteit. In deze zelfstudie wordt geprobeerd rekening te houden met variaties. Zorg ervoor dat uw BME280 breakout board een inter-integrated circuitinterface (I2C) bevat.

Onderdelen zoals BME280 breakout-boards worden vaak verkocht met ongesoldeerde headerpinnen. Als u niet vertrouwd bent met solderen, kunt u zoeken naar een BME280-breakout board met een vooraf gesoldeerde pinheader of een andere connector. Als u wilt, kunt u overwegen om te leren hoe u soldeert! Hier is een goede beginnershandleiding voor solderen.

De SBC voorbereiden

Zorg ervoor dat uw SBC is geconfigureerd ter ondersteuning van de volgende services:

  • SSH
  • I2C

Voor veel apparaten is geen extra configuratie vereist. Gebruik de raspi-config opdracht voor Raspberry Pi. Raadpleeg de raspi-config voor meer informatie.

De hardware voorbereiden

Gebruik de hardwareonderdelen om het circuit te bouwen zoals wordt weergegeven in het volgende diagram:

Een Fritzing-diagram met de verbinding van Raspberry Pi naar BME280 breakoutboard

Hier volgen de verbindingen van de Raspberry Pi naar de BME280-breakout. Houd er rekening mee dat pinlabels verschillen op verschillende BME280-modules.

Raspberry Pi BME280-aparte sessies Kleur
3.3V VIN/3V3 rood
Grond GND zwart
SDA (GPIO 2) SDI/SDA blauw
SCL (GPIO 3) SCK/SCL oranje

Raadpleeg indien nodig het volgende pinnendiagram:

Een diagram met de pinout van de Raspberry Pi GPIO-header. Afbeelding met dank aan Raspberry Pi Foundation.
Afbeelding met dank aan Raspberry Pi Foundation.

Hint

Een GPIO-breakoutbord in combinatie met een breadboard wordt aanbevolen om verbindingen met de GPIO-header te stroomlijnen.

De app maken

Voer de volgende stappen uit in de ontwikkelomgeving van uw voorkeur:

  1. Maak een nieuwe .NET-console-app met behulp van de .NET CLI of Visual Studio. Noem het SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Voeg het pakket Iot.Device.Bindings toe aan het project. Gebruik .NET CLI uit de projectmap of Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Vervang de inhoud van Program.cs door de volgende 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);
    }
    

    In de voorgaande code:

    • i2cSettings is ingesteld op een nieuw exemplaar van I2cConnectionSettings. De constructor stelt de busId parameter in op 1 en de deviceAddress parameter op Bme280.DefaultI2cAddress.

      Belangrijk

      Sommige BME280-breakoutfabrikanten gebruiken de secundaire adreswaarde. Voor deze apparaten gebruikt u Bme280.SecondaryI2cAddress.

    • Een using-declaratie maakt een exemplaar van I2cDevice door I2cDevice.Create aan te roepen en i2cSettings mee te geven. Dit I2cDevice vertegenwoordigt de I2C-bus. De using declaratie zorgt ervoor dat het object wordt verwijderd en hardwarebronnen correct worden vrijgegeven.

    • Met een andere using declaratie wordt een exemplaar van Bme280 gemaakt om de sensor te vertegenwoordigen. De I2cDevice wordt doorgegeven in de constructor.

    • De tijd die nodig is om de chip te laten meten met de huidige (standaard) instellingen van de chip wordt opgehaald door aan te roepen GetMeasurementDuration.

    • Een while lus wordt oneindig uitgevoerd. Elke iteratie:

      1. Hiermee wordt de console gewist.

      2. Hiermee stelt u de energiemodus in op Bmx280PowerMode.Forced. Dit dwingt de chip om één meting uit te voeren, de resultaten op te slaan en vervolgens te slapen.

      3. Leest de waarden voor temperatuur, druk, vochtigheid en hoogte.

        Opmerking

        Hoogte wordt berekend door de apparaatbinding. Deze overbelasting van TryReadAltitude gebruikt gemiddelde zeeniveaudruk om een schatting te genereren.

      4. Hiermee schrijft u de huidige omgevingsomstandigheden naar de console.

      5. Wacht 1000 milliseconden.

  4. Bouw de app. Als u de .NET CLI gebruikt, voert u het volgende uit dotnet build. Druk op Ctrl+Shift+B om te bouwen in Visual Studio.

  5. Implementeer de app als een zelfstandige app in de SBC. Zie .NET-apps implementeren in Raspberry Pi voor instructies. Zorg ervoor dat u de uitvoerbare uitvoerbaar bestand uitvoeringsrechten geeft met behulp van chmod +x.

  6. Voer de app uit op de Raspberry Pi door over te schakelen naar de implementatiemap en het uitvoerbare bestand uit te voeren.

    ./SensorTutorial
    

    Bekijk de sensoruitvoer in de console.

  7. Beëindig het programma door op Ctrl+C te drukken.

Gefeliciteerd! U hebt I2C gebruikt om waarden te lezen van een temperatuur-/vochtigheids-/barometrische druksensor!

De broncode ophalen

De bron voor deze zelfstudie is beschikbaar op GitHub.

Volgende stappen