Delen via


Omgevingscondities van een sensor lezen

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

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

Vereisten

  • Op ARM gebaseerde (ARMv7 of hoger) computer met één bord (SBC)
  • BME280 luchtvochtigheid/barometrische druk/temperatuur sensor breakout
  • Jumper-draden
  • Breadboard (optioneel)
  • Raspberry Pi GPIO breakout board (optioneel)
  • .NET SDK 7 of hoger

Notitie

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

Belangrijk

Er zijn veel fabrikanten van BME280-breakouts. De meeste ontwerpen zijn vergelijkbaar en de fabrikant mag geen verschil maken voor de functionaliteit. In deze zelfstudie wordt geprobeerd rekening te houden met variaties. Zorg ervoor dat uw BME280-breakout een interface Inter-Integrated Circuit (I2C) bevat.

Onderdelen zoals BME280-breakouts worden vaak verkocht met onopgesolderde speldheaders. Als u zich niet prettig voelt bij solderen, zoekt u een BME280-breakoutboard met een voorges soldeerde header of een andere connector. Als je wilt, overweeg dan om te leren soldeer! Hier is een goede handleiding voor beginners voor solderen.

De SBC voorbereiden

Zorg ervoor dat uw SBC is geconfigureerd om de volgende services te ondersteunen:

  • SSH
  • I2C

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

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 het BME280-breakoutboard

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

Raspberry Pi BME280-onderbreking Kleur
3.3V VIN/3V3 rood
Aarden GND zwart
SDA (GPIO 2) SDI/SDA blue
SCL (GPIO 3) SCK/SCL orange

Raadpleeg indien nodig het volgende pin-outdiagram:

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.

Tip

Een GPIO-breakoutboard 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. Geef het de naam SensorTutorial.

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

    dotnet add package Iot.Device.Bindings --version 2.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-aparte fabrikanten gebruiken de secundaire adreswaarde. Gebruik Bme280.SecondaryI2cAddressvoor deze apparaten.

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

    • Een andere using declaratie maakt een exemplaar van Bme280 om de sensor weer te geven. De I2cDevice wordt doorgegeven in de constructor.

    • De tijd die de chip nodig heeft om metingen uit te voeren met de huidige (standaard) instellingen van de chip, wordt opgehaald door aan te roepen GetMeasurementDuration.

    • Een while lus wordt voor onbepaalde tijd 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 in de slaapstand te plaatsen.

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

        Notitie

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

      4. Hiermee worden de huidige omgevingsomstandigheden naar de console geschreven.

      5. Slaapt 1000 ms.

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

  5. Implementeer de app in de SBC als een zelfstandige app. Zie .NET-apps implementeren in Raspberry Pi voor instructies. Zorg ervoor dat u de uitvoerbare uitvoerbare uitvoermachtiging 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