Odczytywanie warunków środowiska z czujnika

Jednym z najbardziej typowych scenariuszy dla urządzeń IoT jest wykrywanie warunków środowiskowych. Dostępne są różne czujniki do monitorowania temperatury, wilgotności, ciśnienia barometrycznego i nie tylko.

W tym temacie użyjesz platformy .NET do odczytania warunków środowiskowych z czujnika.

Wymagania wstępne

  • Komputer jednowłotowy oparty na usłudze ARM (ARMv7 lub nowszy) (SBC)
  • BME280 wilgotność/ciśnienie barometryczne/przerwanie czujnika temperatury
  • Przewody skoczkowe
  • Tablica do chleba (opcjonalnie)
  • Tablica breakout urządzenia Raspberry Pi GPIO (opcjonalnie)
  • Zestaw .NET SDK 7 lub nowszy

Uwaga

Ten samouczek został napisany przy założeniu, że urządzenie docelowe to Raspberry Pi. Jednak ten samouczek może być używany dla dowolnego systemu Linux SBC, który obsługuje platformę .NET, taką jak Orange Pi, ODROID i nie tylko.

Ważne

Istnieje wiele producentów rozłamów BME280. Większość projektów jest podobna, a producent nie powinien mieć żadnej różnicy w funkcjonalności. Ten samouczek próbuje uwzględnić odmiany. Upewnij się, że awaria BME280 zawiera interfejs Inter-Integrated Circuit (I2C).

Składniki, takie jak wyłączniki BME280, są często sprzedawane z niezwiązanymi nagłówkami pinów. Jeśli nie jesteś niewygodny w przypadku lutowania, poszukaj tablicy wyłącznika BME280 z wstępnie sprzedanym nagłówkiem lub innym łącznikiem. Jeśli chcesz, rozważ nauczenie się, jak lutować! Oto dobry przewodnik dla początkujących po lutowaniu.

Przygotowywanie protokołu SBC

Upewnij się, że usługa SBC jest skonfigurowana do obsługi następujących usług:

  • Protokół SSH
  • I2C

W przypadku wielu urządzeń nie jest wymagana żadna dodatkowa konfiguracja. W przypadku urządzenia Raspberry Pi użyj raspi-config polecenia . Aby uzyskać więcej informacji na temat raspi-configusługi , zapoznaj się z dokumentacją urządzenia Raspberry Pi.

Przygotowywanie sprzętu

Użyj składników sprzętowych, aby skompilować obwód, jak pokazano na poniższym diagramie:

Diagram Fritzing przedstawiający połączenie z urządzenia Raspberry Pi do tablicy breakout BME280

Poniżej przedstawiono połączenia z urządzenia Raspberry Pi do wyłącznika BME280. Należy pamiętać, że etykiety przypinania różnią się w różnych podziałach BME280.

Raspberry Pi BME280 Breakout Kolor
3.3V VIN/3V3 red
Uziemić GND black (czarny)
SDA (GPIO 2) SDI/SDA blue
Lista SCL (GPIO 3) SCK/SCL Pomarańczowy

W razie potrzeby zapoznaj się z następującym diagramem przypinania:

Diagram przedstawiający wyprowadzenia nagłówka GPIO urządzenia Raspberry Pi. Obraz dzięki uprzejmości Raspberry Pi Foundation.
Obraz dzięki uprzejmości Raspberry Pi Foundation.

Porada

Tablica podziału GPIO w połączeniu z tablicą do chleba zaleca się usprawnić połączenia z nagłówkiem GPIO.

Tworzenie aplikacji

Wykonaj następujące kroki w preferowanym środowisku projektowym:

  1. Utwórz nową aplikację konsolową platformy .NET przy użyciu interfejsu wiersza polecenia platformy .NET lub programu Visual Studio. Nadaj mu nazwę SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Dodaj pakiet Iot.Device.Bindings do projektu. Użyj interfejsu wiersza polecenia platformy .NET z katalogu projektu lub programu Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.2.0-*
    
  3. Zastąp zawartość pliku Program.cs następującym kodem:

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

    Powyższy kod ma następujące działanie:

    • i2cSettings jest ustawiona na nowe wystąpienie klasy I2cConnectionSettings. Konstruktor ustawia busId parametr na wartość 1, a deviceAddress parametr na Bme280.DefaultI2cAddress.

      Ważne

      Niektórzy producenci podziału BME280 używają pomocniczej wartości adresu. W przypadku tych urządzeń użyj polecenia Bme280.SecondaryI2cAddress.

    • Deklaracja using tworzy wystąpienie I2cDevice obiektu przez wywołanie I2cDevice.Create i przekazanie elementu i2cSettings. Reprezentuje to I2cDevice magistralę I2C. Deklaracja using zapewnia, że obiekt jest usuwany, a zasoby sprzętowe są prawidłowo zwalniane.

    • Inna using deklaracja tworzy wystąpienie do Bme280 reprezentowania czujnika. Element I2cDevice jest przekazywany w konstruktorze.

    • Czas wymagany do wykonania pomiarów przez mikroukład z bieżącymi (domyślnymi) ustawieniami mikroukładu jest pobierany przez wywołanie metody GetMeasurementDuration.

    • Pętla while jest uruchamiana na czas nieokreślony. Każda iteracja:

      1. Czyści konsolę.

      2. Ustawia tryb zasilania na Bmx280PowerMode.Forced. Zmusza to chip do wykonania jednej miary, przechowywania wyników, a następnie uśpienia.

      3. Odczytuje wartości temperatury, ciśnienia, wilgotności i wysokości.

        Uwaga

        Wysokość jest obliczana przez powiązanie urządzenia. To przeciążenie TryReadAltitude użycia średniej ciśnienia na poziomie morza w celu wygenerowania oszacowania.

      4. Zapisuje bieżące warunki środowiskowe w konsoli programu .

      5. Śpi 1000 ms.

  4. Kompilowanie aplikacji. Jeśli używasz interfejsu wiersza polecenia platformy .NET, uruchom polecenie dotnet build. Aby skompilować w programie Visual Studio, naciśnij klawisze Ctrl+Shift+B.

  5. Wdróż aplikację w SBC jako samodzielną aplikację. Aby uzyskać instrukcje, zobacz Wdrażanie aplikacji .NET na urządzeniach Raspberry Pi. Pamiętaj, aby nadać wykonywalne uprawnienie do wykonywania przy użyciu polecenia chmod +x.

  6. Uruchom aplikację na urządzeniu Raspberry Pi, przełączając się do katalogu wdrożenia i uruchamiając plik wykonywalny.

    ./SensorTutorial
    

    Obserwuj dane wyjściowe czujnika w konsoli.

  7. Zakończ program, naciskając klawisze Ctrl+C.

Gratulacje! Użyto2C do odczytywania wartości z czujnika ciśnienia temperatury/wilgotności/barometrycznej!

Uzyskiwanie kodu źródłowego

Źródło tego samouczka jest dostępne w usłudze GitHub.

Następne kroki