Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
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.
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:
Buat Aplikasi Konsol .NET baru menggunakan .NET CLI atau Visual Studio. Beri nama SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorial
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-*
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 dariI2cConnectionSettings
. Konstruktor mengatur parameter kebusId
1 dandeviceAddress
parameter keBme280.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 meneruskanI2cDevice.Create
. IniI2cDevice
mewakili bus I2C.using
Deklarasi memastikan objek dilepaskan dan sumber daya perangkat keras dibebaskan dengan benar.Deklarasi lain
using
membuat instansBme280
untuk mewakili sensor. ElemenI2cDevice
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:Menghapus konsol.
Mengatur mode daya ke
Bmx280PowerMode.Forced
. Ini memaksa chip untuk melakukan satu pengukuran, menyimpan hasilnya, dan kemudian tidur.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.Menulis kondisi lingkungan saat ini ke konsol.
Menunggu selama 1000 ms.
Buat aplikasi. Jika menggunakan .NET CLI, jalankan
dotnet build
. Untuk membuat di Visual Studio, tekan Ctrl+Shift+B.Sebarkan aplikasi ke SBC sebagai aplikasi mandiri. Untuk petunjuknya, lihat Menyebarkan aplikasi .NET ke Raspberry Pi. Pastikan untuk memberikan izin eksekusi menggunakan
chmod +x
.Jalankan aplikasi pada Raspberry Pi dengan beralih ke direktori penyebaran dan jalankan executable.
./SensorTutorial
Perhatikan keluaran sensor di konsol.
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.