Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Uno degli scenari più comuni per i dispositivi IoT è il rilevamento delle condizioni ambientali. Sono disponibili diversi sensori per monitorare temperatura, umidità, pressione barometrica e altro ancora.
In questo argomento si userà .NET per leggere le condizioni ambientali da un sensore.
Prerequisiti
- Computer basato su ARM (ARMv7 o versione successiva) a scheda singola (SBC)
- BME280 breakout del sensore di umidità/pressione barometrica/temperatura
- Cavetti di collegamento
- Basetta sperimentale (facoltativa)
- Scheda di interfaccia Raspberry Pi GPIO (facoltativa)
- .NET SDK 8 o versione successiva
Annotazioni
Questa esercitazione viene scritta presupponendo che il dispositivo di destinazione sia Raspberry Pi. Tuttavia, questa esercitazione può essere usata per qualsiasi SBC basato su Linux che supporta .NET, ad esempio Orange Pi, ODROID e altro ancora.
Importante
Esistono molti produttori di moduli BME280. La maggior parte dei progetti è simile e il produttore non deve fare alcuna differenza in termini di funzionalità. Questa esercitazione tenta di tenere conto delle variazioni. Assicurarsi che il breakout BME280 includa un'interfaccia I2C (Inter-Integrated Circuit).
I componenti come le breakout BME280 vengono spesso venduti con intestazioni di pin non saldate. Se non ti senti a tuo agio con la saldatura, cerca una scheda breakout BME280 con un'intestazione pre-saldata o un connettore diverso. Se vuoi, considera di imparare a saldare! Ecco una buona guida per principianti per la saldatura.
Preparare il SBC
Verificare che il SBC sia configurato per supportare i servizi seguenti:
- SSH
- I2C
Per molti dispositivi non è necessaria alcuna configurazione aggiuntiva. Per Raspberry Pi, usare il raspi-config
comando . Per altre informazioni su raspi-config
, vedere la documentazione di Raspberry Pi.
Preparare l'hardware
Usare i componenti hardware per compilare il circuito come illustrato nel diagramma seguente:
Di seguito sono riportate le connessioni dal Raspberry Pi al modulo BME280. Si noti che le etichette dei pin variano a seconda dei diversi breakout BME280.
Raspberry Pi | Interruzione BME280 | Colore |
---|---|---|
3,3 V | VIN/3V3 | rosso |
Terra | GND | nero |
SDA (GPIO 2) | SDI/SDA | blu |
SCL (GPIO 3) | SCK/SCL | arancione |
Fare riferimento al diagramma di pinout seguente in base alle esigenze:
Immagine per gentile concessione Raspberry Pi Foundation.
Suggerimento
Per semplificare le connessioni all'intestazione GPIO, è consigliabile usare una scheda breakout GPIO insieme a una breadboard.
Creare l'app
Completare i passaggi seguenti nell'ambiente di sviluppo preferito:
Creare una nuova app console .NET utilizzando il CLI di .NET o Visual Studio. Denominarlo SensorTutorial.
dotnet new console -o SensorTutorial cd SensorTutorial
Aggiungere il pacchetto Iot.Device.Bindings al progetto. Usare .NET CLI dalla directory del progetto o Visual Studio.
dotnet add package Iot.Device.Bindings --version 3.2.0-*
Sostituire il contenuto di Program.cs con il codice seguente:
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); }
Nel codice precedente:
i2cSettings
viene assegnato a una nuova istanza diI2cConnectionSettings
. Il costruttore imposta ilbusId
parametro su 1 e ildeviceAddress
parametro suBme280.DefaultI2cAddress
.Importante
Alcuni produttori di schede di espansione BME280 usano il valore dell'indirizzo secondario. Per questi dispositivi, usare
Bme280.SecondaryI2cAddress
.Una dichiarazione di utilizzo crea un'istanza di
I2cDevice
chiamandoI2cDevice.Create
e passandoi2cSettings
come parametro. QuestoI2cDevice
rappresenta l'autobus I2C. Lausing
dichiarazione garantisce che l'oggetto venga eliminato e che le risorse hardware vengano rilasciate correttamente.Un'altra
using
dichiarazione crea un'istanza diBme280
per rappresentare il sensore.I2cDevice
viene passato nel costruttore.Il tempo necessario per eseguire le misurazioni del chip con le impostazioni correnti del chip (impostazione predefinita) viene recuperato chiamando
GetMeasurementDuration
.Un
while
ciclo viene eseguito per un periodo illimitato. Ogni iterazione:Cancella il contenuto della console.
Imposta la modalità di alimentazione su
Bmx280PowerMode.Forced
. In questo modo il chip deve eseguire una misura, archiviare i risultati e quindi dormire.Legge i valori per temperatura, pressione, umidità e altitudine.
Annotazioni
L'altitudine viene calcolata dall'associazione al dispositivo. Questo utilizzo di
TryReadAltitude
usa la pressione media del livello del mare per generare una stima.Scrive le condizioni ambientali correnti nella console.
Attende 1000 millisecondi.
Compilazione dell'app. Se si usa l'interfaccia della riga di comando di .NET, eseguire
dotnet build
. Per compilare in Visual Studio, premere CTRL+SHIFT+B.Distribuire l'app nel SBC come app autonoma. Per istruzioni, vedere Distribuire app .NET in Raspberry Pi. Assicurarsi di concedere all'eseguibile l'autorizzazione di esecuzione usando
chmod +x
.Eseguire l'app in Raspberry Pi passando alla directory di distribuzione ed eseguendo il file eseguibile.
./SensorTutorial
Osserva l'output del sensore nella console.
Terminare il programma premendo CTRL+C.
Congratulazioni! Hai usato I2C per leggere i valori da un sensore di pressione barometrica/temperatura/umidità!
Ottenere il codice sorgente
La sorgente per questa esercitazione è disponibile su GitHub.