Share via


Läsa miljöförhållanden från en sensor

Ett vanligt användningsområde för IoT-enheter är att identifiera miljöförhållanden. Det finns en mängd olika sensorer för att övervaka temperatur, luftfuktighet, barometertryck med mera.

I det här avsnittet använder du .NET för att läsa miljöförhållanden från en sensor.

Krav

  • ARM-baserad (ARMv7 eller senare) enkelkortsdator (SBC)
  • BME280 luftfuktighet/barometertryck/temperatursensorutbrott
  • Bygeltrådar
  • Brödbräda (valfritt)
  • Raspberry Pi GPIO breakout board (valfritt)
  • .NET SDK 7 eller senare

Anteckning

Den här självstudien skrivs förutsatt att målenheten är Raspberry Pi. Den här självstudien kan dock användas för alla Linux-baserade SBC som stöder .NET, till exempel Orange Pi, ODROID med mera.

Viktigt

Det finns många tillverkare av BME280 breakouts. De flesta designerna liknar dem och tillverkaren bör inte göra någon skillnad för funktionerna. Den här självstudien försöker ta hänsyn till variationer. Se till att BME280-utbrytningen innehåller ett Inter-Integrated Circuit-gränssnitt (I2C).

Komponenter som BME280 breakouts säljs ofta med olösliga pin-huvuden. Om du känner dig obekväm med lödning letar du efter en BME280-utbrytartavla med en försåld rubrik eller en annan anslutningsapp. Om du vill kan du lära dig att löda! Här är en bra nybörjarguide till lödning.

Förbereda SBC

Se till att din SBC är konfigurerad för att stödja följande tjänster:

  • SSH
  • I2C

För många enheter krävs ingen ytterligare konfiguration. Använd kommandot för raspi-config Raspberry Pi. Mer information om raspi-configfinns i Raspberry Pi-dokumentationen.

Förbereda maskinvaran

Använd maskinvarukomponenterna för att skapa kretsen enligt följande diagram:

Ett Fritzing-diagram som visar anslutningen från Raspberry Pi till BME280 breakout board

Följande är anslutningarna från Raspberry Pi till BME280-utbrytningen. Observera att fästetiketter skiljer sig åt på olika BME280-brytpunkter.

Raspberry Pi BME280 Breakout Färg
3.3V VIN/3V3 red
Marken GND svart
SDA (GPIO 2) SDI/SDA blue
SCL (GPIO 3) SCK/SCL orange

Se följande pinout-diagram efter behov:

Ett diagram som visar pinouten för Raspberry Pi GPIO-huvudet. Bild med tillstånd Raspberry Pi Foundation.
Bild med tillstånd Raspberry Pi Foundation.

Tips

En GPIO-utbrytningstavla tillsammans med en brödbräda rekommenderas för att effektivisera anslutningarna till GPIO-huvudet.

Skapa appen

Slutför följande steg i önskad utvecklingsmiljö:

  1. Skapa en ny .NET-konsolapp med antingen .NET CLI eller Visual Studio. Ge den namnet SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Lägg till paketet Iot.Device.Bindings i projektet. Använd antingen .NET CLI från projektkatalogen eller Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Ersätt innehållet i Program.cs med följande kod:

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

    I koden ovan:

    • i2cSettings är inställd på en ny instans av I2cConnectionSettings. Konstruktorn anger parametern busId till 1 och parametern deviceAddress till Bme280.DefaultI2cAddress.

      Viktigt

      Vissa BME280 breakout-tillverkare använder det sekundära adressvärdet. För dessa enheter använder du Bme280.SecondaryI2cAddress.

    • En användningsdeklaration skapar en instans av I2cDevice genom att anropa I2cDevice.Create och skicka in i2cSettings. Detta I2cDevice representerar I2C-bussen. Deklarationen using säkerställer att objektet tas bort och att maskinvaruresurser släpps korrekt.

    • En annan using deklaration skapar en instans av Bme280 för att representera sensorn. I2cDevice Skickas i konstruktorn.

    • Den tid det tar för chipet att göra mätningar med chipets aktuella (standardinställningar) hämtas genom att anropa GetMeasurementDuration.

    • En while loop körs på obestämd tid. Varje iteration:

      1. Rensar konsolen.

      2. Anger energiläget till Bmx280PowerMode.Forced. Detta tvingar chipet att utföra en mätning, lagra resultaten och sedan viloläge.

      3. Läser värdena för temperatur, tryck, luftfuktighet och höjd.

        Anteckning

        Höjd beräknas med enhetsbindningen. Denna överbelastning av TryReadAltitude använder medelvärdet av havsnivåtrycket för att generera en uppskattning.

      4. Skriver de aktuella miljövillkoren till konsolen.

      5. Rymmer 1 000 ms.

  4. Skapa appen. Om du använder .NET CLI kör du dotnet build. Om du vill skapa i Visual Studio trycker du på Ctrl+Skift+B.

  5. Distribuera appen till SBC som en fristående app. Anvisningar finns i Distribuera .NET-appar till Raspberry Pi. Se till att ge den körbara körningsbehörigheten med hjälp av chmod +x.

  6. Kör appen på Raspberry Pi genom att växla till distributionskatalogen och köra den körbara filen.

    ./SensorTutorial
    

    Observera sensorutdata i konsolen.

  7. Avsluta programmet genom att trycka på Ctrl+C.

Grattis! Du har använt I2C för att läsa värden från en temperatur/luftfuktighet/barometertryckssensor!

Hämta källkoden

Källan för den här självstudien är tillgänglig på GitHub.

Nästa steg