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:
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:
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:
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 2.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 instansI2cConnectionSettings
baru . Konstruktor mengatur parameter kebusId
1 dan parameter kedeviceAddress
Bme280.DefaultI2cAddress
.Penting
Beberapa produsen breakout BME280 menggunakan nilai alamat sekunder. Untuk perangkat tersebut, gunakan
Bme280.SecondaryI2cAddress
.Deklarasi menggunakan membuat instans
I2cDevice
dengan memanggilI2cDevice.Create
dan meneruskani2cSettings
. IniI2cDevice
mewakili bus I2C.using
Deklarasi memastikan objek dibuang dan sumber daya perangkat keras dirilis dengan benar.Deklarasi lain
using
membuat instansBme280
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: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.
Catatan
Ketinggian dihitung oleh pengikatan perangkat. Kelebihan penggunaan
TryReadAltitude
ini berarti tekanan permukaan laut untuk menghasilkan perkiraan.Menulis kondisi lingkungan saat ini ke konsol.
Tidur 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 yang dapat dieksekusi menggunakan
chmod +x
.Jalankan aplikasi pada Raspberry Pi dengan beralih ke direktori penyebaran dan menjalankan executable.
./SensorTutorial
Amati output 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.