Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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:
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.
              
              
              
              
              
              
            
              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:
Skapa en ny .NET-konsolapp med hjälp av .NET CLI eller Visual Studio. Ge den namnet SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorialLä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-*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:
i2cSettingsställs in som en ny instans avI2cConnectionSettings. Konstruktorn anger parameternbusIdtill 1 och parameterndeviceAddresstillBme280.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
I2cDevicegenom att anropaI2cDevice.Createoch skicka ini2cSettings. DettaI2cDevicerepresenterar I2C-bussen. Deklarationenusingsäkerställer att objektet tas bort och att maskinvaruresurser släpps korrekt.En annan
usingdeklaration skapar en instans avBme280fö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
whileloop körs på obestämd tid. Varje iteration:Rensar konsolen.
Anger energiläget till
Bmx280PowerMode.Forced. Detta tvingar chipet att utföra en mätning, lagra resultaten och sedan viloläge.Läser värdena för temperatur, tryck, luftfuktighet och höjd.
Anmärkning
Höjd beräknas genom enhetens koppling. Denna överbelastning av
TryReadAltitudeanvänder genomsnittligt havsnivåtryck för att generera en uppskattning.Skriver de aktuella miljövillkoren till konsolen.
Väntar i 1000 ms.
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.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.Kör appen på Raspberry Pi genom att växla till mappen för distribution och köra den körbara filen.
./SensorTutorialObservera sensorutdata i konsolen.
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.