Čtení podmínek prostředí ze senzoru
Jedním z nejčastějších scénářů použití zařízení IoT je zjišťování stavu okolního prostředí. K dispozici je celá řada senzorů pro monitorování teploty, vlhkosti, barometrického tlaku a dalších.
V tomto tématu použijete .NET ke čtení podmínek prostředí ze senzoru.
Požadavky
- Počítač s jednou deskou (SBC) s procesorem ARM (ARMv7 nebo vyšším)
- BME280 vlhkost/ barometrický tlak / přerušení senzoru teploty
- Dráty propojek
- Breadboard (volitelné)
- Breakout board Raspberry Pi GPIO (volitelné)
- .NET SDK 7 nebo novější
Poznámka
Tento kurz je napsán za předpokladu, že cílové zařízení je Raspberry Pi. Tento kurz se ale dá použít pro jakýkoli linuxový SBC, který podporuje .NET, například Orange Pi, ODROID a další.
Důležité
Existuje mnoho výrobců breakoutů BME280. Většina návrhů je podobných a výrobce by na funkčnosti neměl mít žádný vliv. Tento kurz se pokouší zohlednit varianty. Ujistěte se, že váš breakout BME280 obsahuje rozhraní Inter-Integrated Circuit (I2C).
Komponenty, jako jsou breakouty BME280, se často prodávají s nesoldovanými kolíky. Pokud se vám nelíbí pájení, podívejte se na breakout desku BME280 s předem pájeným záhlavím nebo jiným konektorem. Pokud chcete, zvažte, jak se pájet! Zde je dobrý začátečník průvodce pájení.
Příprava SBC
Ujistěte se, že je váš SBC nakonfigurovaný tak, aby podporoval následující služby:
- SSH
- I2C
U mnoha zařízení se nevyžaduje žádná další konfigurace. V případě Raspberry Pi použijte raspi-config
příkaz . Další informace o raspi-config
najdete v dokumentaci k Raspberry Pi.
Příprava hardwaru
Pomocí hardwarových komponent sestavte okruh, jak je znázorněno v následujícím diagramu:
Následují připojení z Raspberry Pi do breakoutu BME280. Všimněte si, že popisky špendlíků se u různých breakoutů BME280 liší.
Raspberry Pi | BME280 Breakout | Barva |
---|---|---|
3,3V | VIN/3V3 | červená |
Zemi | GND | black |
SDA (GPIO 2) | SDI/SDA | blue |
SCL (GPIO 3) | SCK/SCL | orange |
Podle potřeby si projděte následující diagram pinout:
Obrázek se svolením Raspberry Pi Foundation.
Tip
Pro zjednodušení připojení k hlavičce GPIO se doporučuje breakout board GPIO ve spojení s breadboardem.
Vytvoření aplikace
V upřednostňovaném vývojovém prostředí proveďte následující kroky:
Vytvořte novou konzolovou aplikaci .NET pomocí rozhraní příkazového řádku .NET nebo sady Visual Studio. Pojmenujte ho SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorial
Přidejte do projektu balíček Iot.Device.Bindings . Použijte rozhraní příkazového řádku .NET z adresáře projektu nebo sadu Visual Studio.
dotnet add package Iot.Device.Bindings --version 2.2.0-*
Obsah souboru Program.cs nahraďte tímto kódem:
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); }
V předchozím kódu:
i2cSettings
je nastavená na novou instanci .I2cConnectionSettings
Konstruktor nastavíbusId
parametr na hodnotu 1 adeviceAddress
parametr naBme280.DefaultI2cAddress
.Důležité
Někteří výrobci breakoutů BME280 používají sekundární hodnotu adresy. Pro tato zařízení použijte
Bme280.SecondaryI2cAddress
.Deklarace using vytvoří instanci
I2cDevice
tak, že zavoláI2cDevice.Create
a předái2cSettings
. ToI2cDevice
představuje autobus I2C. Deklaraceusing
zajišťuje odstranění objektu a správné uvolnění hardwarových prostředků.Jiná
using
deklarace vytvoří instanci ,Bme280
která představuje senzor. Předá seI2cDevice
v konstruktoru .Čas potřebný k provedení měření čipu pomocí aktuálního (výchozího) nastavení čipu se načte voláním
GetMeasurementDuration
metody .Smyčka
while
běží neomezeně dlouho. Každá iterace:Vymaže konzolu.
Nastaví režim napájení na
Bmx280PowerMode.Forced
. To vynutí čip provést jedno měření, uložit výsledky a pak uspat.Načte hodnoty teploty, tlaku, vlhkosti a nadmořské výšky.
Poznámka
Nadmořská výška se počítá vazbou zařízení. Toto přetížení používá k vygenerování odhadu
TryReadAltitude
průměrný tlak na hladinu moře.Zapíše aktuální podmínky prostředí do konzoly nástroje .
Režim spánku 1000 ms.
Sestavení aplikace Pokud používáte .NET CLI, spusťte
dotnet build
příkaz . K sestavení v sadě Visual Studio stiskněte klávesu Ctrl+Shift+B.Nasaďte aplikaci do SBC jako samostatnou aplikaci. Pokyny najdete v tématu Nasazení aplikací .NET do Raspberry Pi. Ujistěte se, že jste spustitelnému souboru dali oprávnění ke spuštění pomocí příkazu
chmod +x
.Spusťte aplikaci na Raspberry Pi přepnutím do adresáře nasazení a spuštěním spustitelného souboru.
./SensorTutorial
Sledujte výstup senzoru v konzole.
Ukončete program stisknutím kláves Ctrl+C.
Gratulujeme! Použili jste I2C ke čtení hodnot ze senzoru teploty / vlhkosti / barometrického tlaku!
Získání zdrojového kódu
Zdroj pro tento kurz je k dispozici na GitHubu.