Bagikan melalui


Membaca kondisi lingkungan dari sensor

Salah satu skenario paling umum untuk perangkat IoT adalah deteksi kondisi lingkungan. Berbagai sensor tersedia untuk memantau suhu, kelembaban, tekanan barometrik, dan banyak lagi.

Dalam topik ini, Anda akan menggunakan .NET untuk membaca kondisi lingkungan dari sensor.

Prasyarat

  • Komputer papan tunggal berbasis ARM (ARMv7 atau lebih besar) (SBC)
  • BME280 sensor breakout untuk kelembaban/tekanan barometrik/suhu
  • Kabel penghubung
  • Papan roti (opsional)
  • Papan antarmuka GPIO Raspberry Pi (opsional)
  • .NET SDK 8 atau yang lebih baru

Nota

Tutorial ini ditulis dengan asumsi perangkat target adalah Raspberry Pi. Namun, tutorial ini dapat digunakan untuk SBC berbasis Linux apa pun yang mendukung .NET, seperti Orange Pi, ODROID, dan banyak lagi.

Penting

Ada banyak produsen BME280 breakout. Sebagian besar desain sama, dan produsen tidak boleh membuat perbedaan dengan fungsionalitas. Tutorial ini mencoba memperhitungkan variasi. Pastikan breakout BME280 Anda memiliki antarmuka Inter-Integrated Circuit (I2C).

Komponen seperti BME280 breakout sering dijual dengan header pin yang belum disolder. Jika Anda tidak nyaman dengan menyolder, carilah papan breakout BME280 dengan header yang sudah disolder sebelumnya atau konektor yang berbeda. Jika mau, pertimbangkan untuk mempelajari cara melakukan solder! Berikut adalah panduan pemula terbaik untuk menyolder.

Menyiapkan SBC

Pastikan SBC Anda dikonfigurasi untuk mendukung layanan berikut:

  • SSH
  • I2C

Untuk banyak perangkat, tidak diperlukan konfigurasi tambahan. Untuk Raspberry Pi, gunakan raspi-config perintah . Untuk informasi selengkapnya tentang raspi-config, lihat dokumentasi Raspberry Pi.

Menyiapkan perangkat keras

Gunakan komponen perangkat keras untuk membangun sirkuit seperti yang digambarkan dalam diagram berikut:

Diagram Fritzing yang menunjukkan koneksi dari Raspberry Pi ke papan breakout BME280

Berikut ini adalah koneksi dari Raspberry Pi ke modul breakout BME280. Perhatikan bahwa label pin dapat berbeda pada berbagai jenis breakout BME280.

Raspberry Pi BME280 Breakout Warna
3.3V VIN/3V3 merah
Tanah GND hitam
SDA (GPIO 2) SDI/SDA biru
SCL (GPIO 3) SCK/SCL jeruk

Silakan lihat diagram pinout berikut jika diperlukan.

Diagram yang menampilkan pinout header GPIO pada Raspberry Pi. Gambar milik Raspberry Pi Foundation.
Gambar atas izin Raspberry Pi Foundation.

Petunjuk / Saran

Papan breakout GPIO dalam kombinasi dengan breadboard dianjurkan untuk mempermudah koneksi ke header GPIO.

Membuat aplikasi

Selesaikan langkah-langkah berikut di lingkungan pengembangan pilihan Anda:

  1. Buat Aplikasi Konsol .NET baru menggunakan .NET CLI atau Visual Studio. Beri nama SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Tambahkan paket Iot.Device.Bindings ke proyek. Gunakan .NET CLI dari direktori proyek atau Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Ganti konten Program.cs dengan kode berikut:

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

    Dalam kode sebelumnya:

    • i2cSettings diatur ke instans baru dari I2cConnectionSettings. Konstruktor mengatur parameter ke busId 1 dan deviceAddress parameter ke Bme280.DefaultI2cAddress.

      Penting

      Beberapa produsen modul breakout BME280 menggunakan nilai alamat sekunder. Untuk perangkat tersebut, gunakan Bme280.SecondaryI2cAddress.

    • Deklarasi 'using' membuat instans dengan memanggil I2cDevice dan meneruskan I2cDevice.Create. Ini I2cDevice mewakili bus I2C. using Deklarasi memastikan objek dilepaskan dan sumber daya perangkat keras dibebaskan dengan benar.

    • Deklarasi lain using membuat instans Bme280 untuk mewakili sensor. Elemen I2cDevice diteruskan dalam konstruktor.

    • Waktu yang diperlukan chip untuk mengambil pengukuran dengan pengaturan chip saat ini (default) diambil dengan memanggil GetMeasurementDuration.

    • Perulangan while berjalan tanpa batas waktu. Setiap perulangan:

      1. Menghapus konsol.

      2. Mengatur mode daya ke Bmx280PowerMode.Forced. Ini memaksa chip untuk melakukan satu pengukuran, menyimpan hasilnya, dan kemudian tidur.

      3. Membaca nilai untuk suhu, tekanan, kelembaban, dan ketinggian.

        Nota

        Ketinggian dihitung melalui penghubungan perangkat. Beban berlebih dari TryReadAltitude ini menggunakan tekanan rata-rata permukaan laut untuk menghasilkan perkiraan.

      4. Menulis kondisi lingkungan saat ini ke konsol.

      5. Menunggu selama 1000 ms.

  4. Buat aplikasi. Jika menggunakan .NET CLI, jalankan dotnet build. Untuk membuat di Visual Studio, tekan Ctrl+Shift+B.

  5. Sebarkan aplikasi ke SBC sebagai aplikasi mandiri. Untuk petunjuknya, lihat Menyebarkan aplikasi .NET ke Raspberry Pi. Pastikan untuk memberikan izin eksekusi menggunakan chmod +x.

  6. Jalankan aplikasi pada Raspberry Pi dengan beralih ke direktori penyebaran dan jalankan executable.

    ./SensorTutorial
    

    Perhatikan keluaran sensor di konsol.

  7. Hentikan program dengan menekan Ctrl+C.

Selamat! Anda telah menggunakan I2C untuk membaca nilai dari sensor suhu/kelembaban/tekanan barometrik!

Dapatkan kode sumber

Sumber untuk tutorial ini tersedia di GitHub.

Langkah berikutnya