Megosztás a következőn keresztül:


Környezeti feltételek olvasása érzékelőből

Az IoT-eszközök egyik leggyakoribb forgatókönyve a környezeti feltételek észlelése. Számos érzékelő áll rendelkezésre a hőmérséklet, a páratartalom, a barometrikus nyomás és egyebek monitorozására.

Ebben a témakörben a .NET használatával fogja olvasni a környezeti feltételeket egy érzékelőből.

Előfeltételek

  • ARM-alapú (ARMv7 vagy újabb) egylapos számítógép (SBC)
  • BME280 páratartalom/barometrikus nyomás/hőmérséklet-érzékelő kitörése
  • Átvezető vezetékek
  • Próbatábla (nem kötelező)
  • Raspberry Pi GPIO-csatlakozólap (opcionális)
  • .NET SDK 8 vagy újabb

Megjegyzés

Ez az oktatóanyag meg van írva, feltéve, hogy a céleszköz Raspberry Pi. Ez az oktatóanyag azonban bármilyen Linux-alapú SBC-hez használható, amely támogatja a .NET-et, például az Orange Pi-t, az ODROID-ot és sok mást.

Fontos

A BME280-nak számos gyártója van. A legtöbb kialakítás hasonló, és a gyártónak nem szabad különbséget tennie a funkcionalitásban. Ez az oktatóanyag megpróbálja figyelembe venni a változatokat. Győződjön meg arról, hogy a BME280 modul tartalmaz egy inter-integrált áramköri (I2C) interfészt.

Az olyan összetevőket, mint például a BME280 kitörő modulokat, gyakran forrasztás nélküli tűfejlécekkel értékesítik. Ha kényelmetlenül érzi magát a forrasztással kapcsolatban, keressen egy előre forrasztott fejlécű BME280 kitörő panelt vagy egy másik csatlakozóval rendelkező modult. Ha szeretné, fontolja meg a forrasztás tanulását! Íme egy jó kezdő útmutató a forrasztáshoz.

Az SBC előkészítése

Győződjön meg arról, hogy az SBC a következő szolgáltatások támogatására van konfigurálva:

  • SSH
  • I2C

Sok eszköz esetén nincs szükség további konfigurációra. Raspberry Pi esetén használja a raspi-config parancsot. További információkért raspi-configtekintse meg a Raspberry Pi dokumentációját.

A hardver előkészítése

A következő ábrán látható módon használja a hardver összetevőket az áramkör megépítéséhez.

Fritzing diagram, amely a Raspberry Pi és a BME280 mellékfal közötti kapcsolatot mutatja be

Az alábbiakban találhatók a Raspberry Pi és a BME280 breakout közötti kapcsolatok. Vegye figyelembe, hogy a tű címkék különböző BME280 modulokon eltérhetnek.

Raspberry Pi BME280 csatlakozótábla Szín
3.3V VIN/3V3 piros
Föld GND fekete
SDA (GPIO 2) SDI/SDA kék
SCL (GPIO 3) SCK/SCL narancs

Igény szerint tekintse meg a következő lábelrendezési diagramot:

Egy diagram, amely bemutatja a Raspberry Pi GPIO fejlécének lábkiosztását. A kép a Raspberry Pi Foundation jóvoltából.
Kép jóvoltból Raspberry Pi Foundation.

Jótanács

A GPIO csatlakozólap és a próbaáramköri lap együttes használata javasolt a GPIO-fejléchez való kapcsolódások egyszerűsítése érdekében.

Az alkalmazás létrehozása

Hajtsa végre a következő lépéseket az előnyben részesített fejlesztési környezetben:

  1. Hozzon létre egy új .NET-konzolalkalmazást a .NET CLI vagy a Visual Studio használatával. Nevezze el SensorTutorial néven.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Adja hozzá az Iot.Device.Bindings csomagot a projekthez. Használja a .NET CLI-t a projektkönyvtárból vagy a Visual Studióból.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Cserélje le a Program.cs fájl tartalmát a következő kódra:

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

    Az előző kódban:

    • i2cSettings új példányát a I2cConnectionSettings-ra/-re állítják. A konstruktor a busId paramétert 1 értékre, a deviceAddress paramétert pedig Bme280.DefaultI2cAddress értékre állítja.

      Fontos

      Egyes BME280-mellékgyártók a másodlagos címértéket használják. Ezekhez az eszközökhöz használja a következőt: Bme280.SecondaryI2cAddress.

    • A using nyilatkozat létrehoz egy I2cDevice példányt azáltal, hogy meghívja a I2cDevice.Create-t, és átadja a i2cSettings-t. Ez I2cDevice az I2C buszt jelöli. A using deklaráció biztosítja az objektum ártalmatlanítását és a hardvererőforrások megfelelő kiadását.

    • Egy másik using deklaráció egy Bme280 példányt hoz létre az érzékelő reprezentálására. Az I2cDevice átadás a konstruktorban történik.

    • Az GetMeasurementDuration meghívásával nyerhető ki az idő, amely a chip aktuális (alapértelmezett) beállításaival végzett mérésekhez szükséges.

    • A while hurok határozatlan ideig fut. Minden iteráció:

      1. Törli a konzolt.

      2. A teljesítménymódot beállítja a következőre: Bmx280PowerMode.Forced. Ez arra kényszeríti a chipet, hogy végezzen el egy mérést, tárolja az eredményeket, majd aludjon.

      3. Beolvassa a hőmérséklet, a nyomás, a páratartalom és a magasság értékeit.

        Megjegyzés

        A magasságot az eszközkötés számítja ki. Ennek a TryReadAltitude túlterhelésnek az átlagos tengerszint feletti légnyomást használják becslés készítésére.

      4. Az aktuális környezeti feltételeket írja a konzolra.

      5. 1000 ms-ig alszik.

  4. Hozza létre az alkalmazást. Ha a .NET parancssori felületet használja, futtassa a parancsot dotnet build. A Visual Studióban való buildeléshez nyomja le a CtrlShift+B+.

  5. Helyezze üzembe az alkalmazást az SBC-ben önálló alkalmazásként. Útmutatásért lásd: .NET-alkalmazások üzembe helyezése a Raspberry Pi-ben. Győződjön meg arról, hogy a végrehajtható fájlnak végrehajtás engedélyt ad, a chmod +x használatával.

  6. Futtassa az alkalmazást a Raspberry Pi-en az üzembehelyezési könyvtárra való váltással és a végrehajtható fájl futtatásával.

    ./SensorTutorial
    

    Figyelje meg az érzékelő kimenetét a konzolon.

  7. Állítsa le a programot a Ctrl+C billentyűkombináció lenyomásával.

Gratulálok! I2C-t használta arra, hogy beolvassa a hőmérséklet-, páratartalom- és barométeres nyomásérzékelők értékeit!

A forráskód lekérése

Az oktatóanyag forrása a GitHubon érhető el.

Következő lépések