Sdílet prostřednictvím


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

Jedním z nejběžnějších scénářů pro zařízení IoT je detekce podmínek prostředí. K dispozici je ř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) založený na ARM (ARMv7 nebo novější)
  • BME280 senzor vlhkosti / barometrického tlaku / teploty - rozšíření senzoru
  • Propojovací vodiče
  • Popis cesty (volitelné)
  • Raspberry Pi GPIO rozšiřující deska (volitelné)
  • .NET SDK 8 nebo novější

Poznámka:

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

Důležité

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

Komponenty, jako jsou BME280 breakouts, se často prodávají s nepřipojenými pinovými lištami. Pokud se necítíte na pájení, vyhledejte breakout desku BME280 s předpájenou záhlavní nebo jiným konektorem. Pokud chcete, zvažte naučit se pájet! Tady je dobrý průvodce pro začátečníky na pájení.

Příprava SBC

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

  • SSH
  • I2C

U mnoha zařízení není nutná žádná další konfigurace. V případě Raspberry Pi použijte raspi-config příkaz. Další informace najdete raspi-configv 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 diagram znázorňující připojení od Raspberry Pi k rozšiřující desce BME280

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

Raspberry Pi BME280 Breakout Barva
3.3V VIN/3V3 červený
Půda GND černý
SDA (GPIO 2) SDI/SDA modrý
SCL (GPIO 3) SCK/SCL oranžová

Podle potřeby si projděte následující vývodové schéma.

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

Návod

Pro zjednodušení připojení k hlavičce GPIO se doporučuje použít rozšiřovací desku GPIO ve spojení s kontaktním polem.

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í .NET CLI nebo Visual Studio. Pojmenujte ji SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Přidejte do projektu balíček Iot.Device.Bindings . Použijte .NET CLI z adresáře projektu nebo sady Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.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:

    • i2cSettings je nastaveno na novou instanci I2cConnectionSettings. Konstruktor nastaví busId parametr na 1 a deviceAddress parametr na Bme280.DefaultI2cAddress.

      Důležité

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

    • Deklarace using vytvoří instanci I2cDevice voláním I2cDevice.Create a předáním i2cSettings. To I2cDevice představuje autobus I2C. Deklarace using zajišťuje, že objekt je ukončen a hardwarové prostředky jsou uvolněny správně.

    • Další using deklarace vytvoří instanci Bme280 představující senzor. Předává se I2cDevice v konstruktoru.

    • Čas potřebný pro měření s aktuálním (výchozím) nastavením čipu se získá voláním GetMeasurementDuration.

    • Smyčka while běží nekonečně. Každá iterace:

      1. Vymaže konzolu.

      2. Nastaví režim napájení na Bmx280PowerMode.Forced. Nutí čip provést jedno měření, uložit výsledky a pak přejít do režimu spánku.

      3. Čte hodnoty pro teplotu, tlak, vlhkost a výšku.

        Poznámka:

        Výška se vypočítá vazbou zařízení. Toto přetížení používá průměrný tlak na hladině moře ke generování odhadu TryReadAltitude.

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

      5. Spí 1000 ms.

  4. Sestavení aplikace Pokud používáte .NET CLI, spusťte dotnet build. Pokud chcete sestavovat v sadě Visual Studio, stiskněte kombinaci kláves 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 spustitelnému souboru udělíte oprávnění execute pomocí 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 ctrl+C.

Gratulujeme! Použili jsteI 2C 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