Udostępnij za pośrednictwem


Odczytywanie warunków środowiskowych 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 z jedną płytą (ARMv7 lub nowszy) oparty na architekturze ARM (SBC)
  • BME280 wilgotność/ciśnienie barometryczne/przerwanie czujnika temperatury
  • Przewody skoczkowe
  • Płytka stykowa (opcjonalnie)
  • Płytka stykowa GPIO dla Raspberry Pi (opcjonalnie)
  • Zestaw .NET SDK 8 lub nowszy

Uwaga

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

Ważne

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

Elementy, takie jak moduły BME280, są często sprzedawane z niewlutowanymi złączami pinów. Jeśli nie czujesz się pewnie z lutowaniem, poszukaj płytki breakout BME280 z wstępnie przylutowanym złączem lub innym łącznikiem. Jeśli chcesz, rozważ nauczenie się lutowania! Oto dobry przewodnik dla początkujących po lutowaniu.

Przygotowywanie SBC

Upewnij się, że protokół SBC jest skonfigurowany 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 polecenia raspi-config. Aby uzyskać więcej informacji na temat raspi-config, zapoznaj się z dokumentacją Raspberry Pi.

Przygotowywanie sprzętu

Użyj składników sprzętowych do skompilowania obwodu, jak pokazano na poniższym diagramie:

Diagram Fritzing przedstawiający połączenie z Raspberry Pi do płytki breakout BME280

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

Raspberry Pi Podział BME280 Kolor
3.3V VIN/3V3 czerwony
Ziemia GND czarny
SDA (GPIO 2) SDI/SDA niebieski
SCL (GPIO 3) SCK/SCL pomarańcza

W razie potrzeby zapoznaj się z następującym diagramem wyprowadzeń.

Diagram przedstawiający układ wyprowadzeń złącza GPIO urządzenia Raspberry Pi. Zdjęcie za zgodą Raspberry Pi Foundation.
Obraz dzięki uprzejmości Raspberry Pi Foundation.

Wskazówka

Zaleca się użycie płytki rozszerzeń GPIO w połączeniu z płytką stykową, aby 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 .NET CLI z katalogu projektu lub programu Visual Studio.

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

    W poprzednim kodzie:

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

      Ważne

      Niektórzy producenci płytek BME280 używają drugorzędnej wartości adresu. W przypadku tych urządzeń użyj Bme280.SecondaryI2cAddress.

    • Deklaracja using tworzy wystąpienie obiektu I2cDevice przez wywołanie I2cDevice.Create i przekazanie elementu i2cSettings. To I2cDevice reprezentuje magistralę I2C. Deklaracja using gwarantuje, że obiekt zostanie usunięty, a zasoby sprzętowe zostaną prawidłowo zwolnione.

    • Inna using deklaracja tworzy wystąpienie Bme280 do 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 w nieskończoność. 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 wykorzystuje ciśnienie na poziomie morza do wygenerowania oszacowania.

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

      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 Ctrl+Shift+B.

  5. Wdróż aplikację w SBC jako samodzielną aplikację. Aby uzyskać instrukcje, zobacz Wdrażanie aplikacji .NET na urządzeniach Raspberry Pi. Upewnij się, że nadajesz plikowi wykonywalnemu uprawnienia do wykonywania używając 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 Ctrl+C.

Gratulacje! Użyłeś I2C do odczytywania wartości z czujnika temperatury, wilgotności i ciśnienia atmosferycznego!

Pobieranie kodu źródłowego

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

Następne kroki