Condividi tramite


Leggere le condizioni ambientali da un sensore

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:

Diagramma di Fritzing che mostra la connessione da Raspberry Pi alla scheda di interruzione BME280

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:

Un diagramma che mostra il pinout del connettore GPIO del Raspberry Pi. Immagine per gentile concessione di Raspberry Pi Foundation.
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:

  1. Creare una nuova app console .NET utilizzando il CLI di .NET o Visual Studio. Denominarlo SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. 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-*
    
  3. 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 di I2cConnectionSettings. Il costruttore imposta il busId parametro su 1 e il deviceAddress parametro su Bme280.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 chiamando I2cDevice.Create e passando i2cSettings come parametro. Questo I2cDevice rappresenta l'autobus I2C. La using dichiarazione garantisce che l'oggetto venga eliminato e che le risorse hardware vengano rilasciate correttamente.

    • Un'altra using dichiarazione crea un'istanza di Bme280 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:

      1. Cancella il contenuto della console.

      2. Imposta la modalità di alimentazione su Bmx280PowerMode.Forced. In questo modo il chip deve eseguire una misura, archiviare i risultati e quindi dormire.

      3. 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.

      4. Scrive le condizioni ambientali correnti nella console.

      5. Attende 1000 millisecondi.

  4. 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.

  5. 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.

  6. Eseguire l'app in Raspberry Pi passando alla directory di distribuzione ed eseguendo il file eseguibile.

    ./SensorTutorial
    

    Osserva l'output del sensore nella console.

  7. 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.

Passaggi successivi