Aracılığıyla paylaş


Sensörden ortam koşullarını okuma

IoT cihazları için en yaygın senaryolardan biri, ortam koşullarının algılanmasıdır. Sıcaklığı, nemi, barometrik basıncı ve daha fazlasını izlemek için çeşitli algılayıcılar mevcuttur.

Bu konu başlığında, .NET kullanarak bir algılayıcıdan ortam koşullarını okuyacaksınız.

Önkoşullar

  • ARM tabanlı (ARMv7 veya üzeri) tek kartlı bilgisayar (SBC)
  • BME280 nem/barometrik basınç/sıcaklık sensörü kırılması
  • Jumper telleri
  • Devre tahtası (isteğe bağlı)
  • Raspberry Pi GPIO tartışma panosu (isteğe bağlı)
  • .NET SDK 10 veya üzeri

Uyarı

Bu öğretici, hedef cihazın Raspberry Pi olduğu varsayılarak yazılmıştır. Ancak bu öğretici Orange Pi, ODROID ve daha fazlası gibi .NET destekleyen tüm Linux tabanlı SBC'ler için kullanılabilir.

Önemli

BME280 breakout kartlarının birçok üreticisi vardır. Çoğu tasarım benzerdir ve üreticinin işlevsellik açısından hiçbir fark oluşturmaması gerekir. Bu öğretici varyasyonları dikkate almaya çalışıyor. BME280 breakout kartınızın bir Inter-Integrated Devre (I2C) arabirimine sahip olduğundan emin olun.

BME280 modülleri gibi bileşenler genellikle lehimlenmemiş pin başlıklarıyla satılır. Lehim yapmaktan rahatsızsanız, önceden lehimlenmiş pin başlığı veya farklı bir konnektör içeren bir BME280 kıza kartı arayın. İstersen, lehim yapmayı öğrenin! İşte lehimleme için iyi bir başlangıç kılavuzu.

SBC'yi hazırlama

SBC'nizin aşağıdaki hizmetleri destekleyecek şekilde yapılandırıldığından emin olun:

  • SSH
  • I2C

Birçok cihaz için ek yapılandırma gerekmez. Raspberry Pi için komutunu kullanın raspi-config . hakkında raspi-configdaha fazla bilgi için Raspberry Pi belgelerine bakın.

Donanımı hazırlama

Aşağıdaki diyagramda gösterildiği gibi bağlantı hattını oluşturmak için donanım bileşenlerini kullanın:

Raspberry Pi'den BME280 bağlantı kartına bağlantıyı gösteren bir Fritzing diyagramı

Raspberry Pi'den BME280 devre kartına yapılan bağlantılar aşağıdadır. Farklı BME280 kartlarında pin etiketlerinin farklılık gösterdiğini unutmayın.

Raspberry Pi BME280 Tartışması Renk
3,3V VIN/3V3 kırmızı
Zemin GND siyah
SDA (GPIO 2) SDI/SDA mavi
SCL (GPIO 3) SCK/SCL portakal

İhtiyaç duyduğunuzda aşağıdaki pinout diyagramına başvurun.

Raspberry Pi GPIO başlığı pin yerleşimini gösteren diyagram. Görüntü, Raspberry Pi Foundation'ın izniyle.
Görüntü, Raspberry Pi Foundation'ın izniyle.

Tavsiye

GPIO üst bilgisine bağlantıları kolaylaştırmak için bir breadboard ile birlikte bir GPIO kapsam kartı önerilir.

Uygulamayı oluşturma

Tercih ettiğiniz geliştirme ortamında aşağıdaki adımları tamamlayın:

  1. .NET CLI veya Visual Studio kullanarak yeni bir .NET Konsol Uygulaması oluşturun. SensorTutorial olarak adlandır.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Iot.Device.Bindings paketini projeye ekleyin. Proje dizininden .NET CLI veya Visual Studio kullanın.

    dotnet package add Iot.Device.Bindings --version 4.1.0
    
  3. Program.cs dosyasının içeriğini aşağıdaki kodla değiştirin:

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

    Önceki kodda:

    • i2cSettings yeni bir I2cConnectionSettings örneğine ayarlanır. Oluşturucu busId parametresini 1'e ve deviceAddress parametresini Bme280.DefaultI2cAddress'ye ayarlar.

      Önemli

      Bazı BME280 karta montaj üreticileri ikincil adres değerini kullanır. Bu cihazlar için kullanın Bme280.SecondaryI2cAddress.

    • Using bildirimi, I2cDevice.Create işlevini çağırarak ve i2cSettings ileterek bir I2cDevice örneği oluşturur. Bu I2cDevice , I2C veri yolunu temsil eder. using bildirimi, nesnenin atılmasını ve donanım kaynaklarının düzgün şekilde serbest bırakılmasını sağlar.

    • Başka bir using bildirimi, sensörü temsil etmek için Bme280 örneği oluşturur. I2cDevice kurucuya geçirilir.

    • Yonganın geçerli (varsayılan) ayarlarıyla ölçüm yapma süresi çağrılarak GetMeasurementDuration elde edilir.

    • Döngü while süresiz olarak çalışır. Her yineleme:

      1. Konsolu temizler.

      2. Güç modunu Bmx280PowerMode.Forced olarak ayarlar. Bu, yongayı tek bir ölçüm gerçekleştirmeye, sonuçları depolamaya ve sonra uyumaya zorlar.

      3. Sıcaklık, basınç, nem ve rakım değerlerini okur.

        Uyarı

        İrtifa, cihaz bağlantısı tarafından hesaplanır. Bu aşırı yükleme işlevi, deniz seviyesi basıncını kullanarak bir tahmin oluşturur.

      4. Geçerli ortam koşullarını konsola yazar.

      5. 1000 ms uyuyor.

  4. Uygulamayı oluşturun. .NET CLI kullanıyorsanız dotnet build çalıştırın. Visual Studio oluşturmak için Ctrl+Shift+B tuşlarına basın.

  5. Uygulamayı SBC'ye bağımsız bir uygulama olarak dağıtın. Yönergeler için bkz. Raspberry Pi'ye .NET uygulamaları dağıtma. chmod +x kullanarak yürütülebilir yürütme izni verdiğinizden emin olun.

  6. Raspberry Pi'de uygulamayı çalıştırmak için dağıtım dizinine geçin ve yürütülebilir dosyayı çalıştırın.

    ./SensorTutorial
    

    Konsoldaki algılayıcı çıkışını gözlemleyin.

  7. Ctrl+C tuşlarına basarak programı sonlandırın.

Tebrikler! Sıcaklık/nem/barometrik basınç sensöründeki değerleri okumak için I2C kullandınız!

Kaynak kodu alma

Bu öğreticinin kaynağı GitHub üzerinde mevcuttur.

Sonraki adımlar