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 (SBC) berbasis ARM (ARMv7 atau lebih besar)
  • BME280 kelembaban/tekanan barometrik/breakout sensor suhu
  • Kabel jumper
  • Papan roti (opsional)
  • Papan breakout Raspberry Pi GPIO (opsional)
  • .NET SDK 7 atau yang lebih baru

Catatan

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 breakout BME280. Sebagian besar desain sama, dan produsen tidak boleh membuat perbedaan dengan fungsionalitas. Tutorial ini mencoba mempertanyakan variasi. Pastikan breakout BME280 Anda menyertakan antarmuka Inter-Integrated Circuit (I2C).

Komponen seperti breakout BME280 sering dijual dengan header pin yang tidak tergoyahkan. Jika Anda tidak nyaman dengan solder, cari papan breakout BME280 dengan header pra-solder atau konektor yang berbeda. Jika mau, pertimbangkan untuk mempelajari cara solder! Berikut adalah panduan pemula yang baik untuk solder.

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 memperlihatkan koneksi dari Raspberry Pi ke papan breakout BME280

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

Raspberry Pi BME280 Breakout Warna
3.3V VIN/3V3 red
Tanah GND Hitam
SDA (GPIO 2) SDI/SDA Biru
SCL (GPIO 3) SCK/SCL Orange

Lihat diagram pinout berikut sesuai kebutuhan:

Diagram yang menunjukkan pinout header Raspberry Pi GPIO. Gambar oleh Raspberry Pi Foundation.
Gambar oleh Raspberry Pi Foundation.

Tip

Papan breakout GPIO bersama dengan breadboard disarankan untuk menyederhanakan 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 2.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 I2cConnectionSettingsbaru . Konstruktor mengatur parameter ke busId 1 dan parameter ke deviceAddressBme280.DefaultI2cAddress.

      Penting

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

    • Deklarasi menggunakan membuat instans I2cDevice dengan memanggil I2cDevice.Create dan meneruskan i2cSettings. Ini I2cDevice mewakili bus I2C. using Deklarasi memastikan objek dibuang dan sumber daya perangkat keras dirilis dengan benar.

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

    • Waktu yang diperlukan untuk 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.

        Catatan

        Ketinggian dihitung oleh pengikatan perangkat. Kelebihan penggunaan TryReadAltitude ini berarti tekanan permukaan laut untuk menghasilkan perkiraan.

      4. Menulis kondisi lingkungan saat ini ke konsol.

      5. Tidur 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 yang dapat dieksekusi menggunakan chmod +x.

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

    ./SensorTutorial
    

    Amati output 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