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-config
finns 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 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:
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ö:
Skapa en ny .NET-konsolapp med antingen .NET CLI eller Visual Studio. Ge den namnet SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorial
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-*
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 avI2cConnectionSettings
. Konstruktorn anger parameternbusId
till 1 och parameterndeviceAddress
tillBme280.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 anropaI2cDevice.Create
och skicka ini2cSettings
. DettaI2cDevice
representerar I2C-bussen. Deklarationenusing
säkerställer att objektet tas bort och att maskinvaruresurser släpps korrekt.En annan
using
deklaration skapar en instans avBme280
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: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.
Anteckning
Höjd beräknas med enhetsbindningen. Denna överbelastning av
TryReadAltitude
använder medelvärdet av havsnivåtrycket för att generera en uppskattning.Skriver de aktuella miljövillkoren till konsolen.
Rymmer 1 000 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 körningsbehörigheten med hjälp av
chmod +x
.Kör appen på Raspberry Pi genom att växla till distributionskatalogen och köra den körbara filen.
./SensorTutorial
Observera 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 självstudien är tillgänglig på GitHub.