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 comando . Per altre informazioni su , 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 applicazione console .NET utilizzando il .NET CLI 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:

    • viene assegnato a una nuova istanza di . Il costruttore imposta il parametro su 1 e il parametro su .

      Importante

      Alcuni produttori di schede di espansione BME280 usano il valore dell'indirizzo secondario. Per questi dispositivi, usare .

    • Una dichiarazione di utilizzo crea un'istanza di chiamando e passando come parametro. Questo rappresenta l'autobus I2C. La dichiarazione garantisce che l'oggetto venga eliminato e che le risorse hardware vengano rilasciate correttamente.

    • Un'altra dichiarazione crea un'istanza di per rappresentare il sensore. viene passato nel costruttore.

    • Il tempo necessario per eseguire le misurazioni del chip con le impostazioni correnti del chip (impostazione predefinita) viene recuperato chiamando .

    • Un ciclo viene eseguito per un periodo illimitato. Ogni iterazione:

      1. Cancella il contenuto della console.

      2. Imposta la modalità di alimentazione su . 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 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 eseguire la compilazione in Visual Studio, premere Ctrl+Shift+B.

  5. Distribuire l'app nel SBC come app autonoma. Per istruzioni, vedere Deploy .NET apps to Raspberry Pi. Assicurarsi di concedere all'eseguibile l'autorizzazione di esecuzione usando .

  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 di questo tutorial è disponibile su GitHub.

Passaggi successivi

Scopri come visualizzare il testo su un LCD