Dela via


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

Ett av de vanligaste scenarierna för IoT-enheter är identifiering av 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.

Förutsättningar

  • ARM-baserad (ARMv7 eller senare) enkelkortsdator (SBC)
  • BME280 fuktighet/barometertryck/temperatursensorutbrott
  • Bygeltrådar
  • Brödskiva (valfritt)
  • Raspberry Pi GPIO anslutningskort (valfritt)
  • .NET SDK 8 eller senare

Anmärkning

Den här handledningen är skriven med antagandet att målenheten är en Raspberry Pi. Den här handledningen 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 är liknande och tillverkaren bör inte göra någon skillnad för funktionerna. Den här handledningen försöker ta hänsyn till variationer. Se till att BME280-utbrytningen innehåller ett gränssnitt för interintegrerad krets (I2C).

Komponenter som BME280 breakouts säljs ofta med olödda stiftlister. Om du är obekväm med lödning kan du leta efter en BME280-brytarbräda med en förlödad header eller en annan anslutning. Om du vill kan du lära dig att löda! Här är en bra nybörjarguide till lödning.

Förbereda SBC

Kontrollera att din SBC har konfigurerats 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 Raspberry Pi raspi-config . 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 pinnetiketter skiljer sig åt på olika BME280-kretskort.

Raspberry Pi BME280 Breakout Färg
3.3V VIN/3V3 röd
Jord GND svart
SDA (GPIO 2) SDI/SDA blå
SCL (GPIO 3) SCK/SCL apelsin

Konsultera följande kopplingsschema vid behov.

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

Tips/Råd

En GPIO-utbrytartavla tillsammans med en brödskiva rekommenderas för att effektivisera anslutningarna till GPIO-huvudet.

Skapa appen

Slutför följande steg i den utvecklingsmiljö du föredrar:

  1. Skapa en ny .NET-konsolapp med hjälp av .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 3.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 ställs in som en ny instans av I2cConnectionSettings. Konstruktorn anger parametern busId till 1 och parametern deviceAddress till Bme280.DefaultI2cAddress.

      Viktigt!

      Vissa tillverkare av BME280-breakoutmoduler 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 överförs 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.

        Anmärkning

        Höjd beräknas genom enhetens koppling. Denna överbelastning av TryReadAltitude använder genomsnittligt havsnivåtryck för att generera en uppskattning.

      4. Skriver de aktuella miljövillkoren till konsolen.

      5. Väntar i 1000 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 filen körningsbehörighet med hjälp av chmod +x.

  6. Kör appen på Raspberry Pi genom att växla till mappen för distribution 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 handledningen är tillgänglig på GitHub.

Nästa steg