Sdílet prostřednictvím


Čtení podmínek prostředí ze senzoru

Jedním z nejčastějších scénářů použití zařízení IoT je zjišťování stavu okolního prostředí. K dispozici je celá řada senzorů pro monitorování teploty, vlhkosti, barometrického tlaku a dalších.

V tomto tématu použijete .NET ke čtení podmínek prostředí ze senzoru.

Požadavky

  • Počítač s jednou deskou (SBC) s procesorem ARM (ARMv7 nebo vyšším)
  • BME280 vlhkost/ barometrický tlak / přerušení senzoru teploty
  • Dráty propojek
  • Breadboard (volitelné)
  • Breakout board Raspberry Pi GPIO (volitelné)
  • .NET SDK 7 nebo novější

Poznámka

Tento kurz je napsán za předpokladu, že cílové zařízení je Raspberry Pi. Tento kurz se ale dá použít pro jakýkoli linuxový SBC, který podporuje .NET, například Orange Pi, ODROID a další.

Důležité

Existuje mnoho výrobců breakoutů BME280. Většina návrhů je podobných a výrobce by na funkčnosti neměl mít žádný vliv. Tento kurz se pokouší zohlednit varianty. Ujistěte se, že váš breakout BME280 obsahuje rozhraní Inter-Integrated Circuit (I2C).

Komponenty, jako jsou breakouty BME280, se často prodávají s nesoldovanými kolíky. Pokud se vám nelíbí pájení, podívejte se na breakout desku BME280 s předem pájeným záhlavím nebo jiným konektorem. Pokud chcete, zvažte, jak se pájet! Zde je dobrý začátečník průvodce pájení.

Příprava SBC

Ujistěte se, že je váš SBC nakonfigurovaný tak, aby podporoval následující služby:

  • SSH
  • I2C

U mnoha zařízení se nevyžaduje žádná další konfigurace. V případě Raspberry Pi použijte raspi-config příkaz . Další informace o raspi-confignajdete v dokumentaci k Raspberry Pi.

Příprava hardwaru

Pomocí hardwarových komponent sestavte okruh, jak je znázorněno v následujícím diagramu:

Fritzingův diagram znázorňující připojení z Raspberry Pi k BME280 breakout board

Následují připojení z Raspberry Pi do breakoutu BME280. Všimněte si, že popisky špendlíků se u různých breakoutů BME280 liší.

Raspberry Pi BME280 Breakout Barva
3,3V VIN/3V3 červená
Zemi GND black
SDA (GPIO 2) SDI/SDA blue
SCL (GPIO 3) SCK/SCL orange

Podle potřeby si projděte následující diagram pinout:

Diagram znázorňující pinout hlavičky Raspberry Pi GPIO Obrázek se svolením Raspberry Pi Foundation.
Obrázek se svolením Raspberry Pi Foundation.

Tip

Pro zjednodušení připojení k hlavičce GPIO se doporučuje breakout board GPIO ve spojení s breadboardem.

Vytvoření aplikace

V upřednostňovaném vývojovém prostředí proveďte následující kroky:

  1. Vytvořte novou konzolovou aplikaci .NET pomocí rozhraní příkazového řádku .NET nebo sady Visual Studio. Pojmenujte ho SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Přidejte do projektu balíček Iot.Device.Bindings . Použijte rozhraní příkazového řádku .NET z adresáře projektu nebo sadu Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Obsah souboru Program.cs nahraďte tímto kódem:

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

    V předchozím kódu:

    • i2cSettingsje nastavená na novou instanci .I2cConnectionSettings Konstruktor nastaví busId parametr na hodnotu 1 a deviceAddress parametr na Bme280.DefaultI2cAddress.

      Důležité

      Někteří výrobci breakoutů BME280 používají sekundární hodnotu adresy. Pro tato zařízení použijte Bme280.SecondaryI2cAddress.

    • Deklarace using vytvoří instanci I2cDevice tak, že zavolá I2cDevice.Create a předá i2cSettings. To I2cDevice představuje autobus I2C. Deklarace using zajišťuje odstranění objektu a správné uvolnění hardwarových prostředků.

    • Jiná using deklarace vytvoří instanci , Bme280 která představuje senzor. Předá se I2cDevice v konstruktoru .

    • Čas potřebný k provedení měření čipu pomocí aktuálního (výchozího) nastavení čipu se načte voláním GetMeasurementDurationmetody .

    • Smyčka while běží neomezeně dlouho. Každá iterace:

      1. Vymaže konzolu.

      2. Nastaví režim napájení na Bmx280PowerMode.Forced. To vynutí čip provést jedno měření, uložit výsledky a pak uspat.

      3. Načte hodnoty teploty, tlaku, vlhkosti a nadmořské výšky.

        Poznámka

        Nadmořská výška se počítá vazbou zařízení. Toto přetížení používá k vygenerování odhadu TryReadAltitude průměrný tlak na hladinu moře.

      4. Zapíše aktuální podmínky prostředí do konzoly nástroje .

      5. Režim spánku 1000 ms.

  4. Sestavení aplikace Pokud používáte .NET CLI, spusťte dotnet buildpříkaz . K sestavení v sadě Visual Studio stiskněte klávesu Ctrl+Shift+B.

  5. Nasaďte aplikaci do SBC jako samostatnou aplikaci. Pokyny najdete v tématu Nasazení aplikací .NET do Raspberry Pi. Ujistěte se, že jste spustitelnému souboru dali oprávnění ke spuštění pomocí příkazu chmod +x.

  6. Spusťte aplikaci na Raspberry Pi přepnutím do adresáře nasazení a spuštěním spustitelného souboru.

    ./SensorTutorial
    

    Sledujte výstup senzoru v konzole.

  7. Ukončete program stisknutím kláves Ctrl+C.

Gratulujeme! Použili jste I2C ke čtení hodnot ze senzoru teploty / vlhkosti / barometrického tlaku!

Získání zdrojového kódu

Zdroj pro tento kurz je k dispozici na GitHubu.

Další kroky