Condividi tramite


Leggere le condizioni ambientali da un sensore

Uno degli scenari più comuni per i dispositivi IoT è il rilevamento delle condizioni ambientali. Un'ampia gamma di sensori sono disponibili 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 a scheda singola (SBC) basato su ARM (ARMv7 o versione successiva)
  • Interruzione del sensore BME280 umidità/pressione barometrica/temperatura
  • Cavi ponticello
  • Pane (facoltativo)
  • Scheda di interruzione Raspberry Pi GPIO (facoltativa)
  • .NET SDK 7 o versione successiva

Nota

Questa esercitazione viene scritta presupponendo che il dispositivo di destinazione sia Raspberry Pi. Questa esercitazione può tuttavia essere usata per qualsiasi SBC basato su Linux che supporta .NET, ad esempio Orange Pi, ODROID e altro ancora.

Importante

Esistono molti produttori di breakout 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 BME280 vengono spesso venduti con intestazioni di pin non risolte. Se si è scomodi con il soldering, cercare una scheda di interruzione BME280 con un'intestazione pres soldered o un connettore diverso. Se vuoi, prendi in considerazione come imparare a vendere! Ecco una buona guida per principianti per la vendita.

Preparare SBC

Assicurarsi che 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 a BME280 scheda di interruzione

Di seguito sono riportate le connessioni da Raspberry Pi all'interruzione BME280. Si noti che le etichette pin differiscono in vari breakout BME280.

Raspberry Pi Interruzione BME280 Color
3,3 V VIN/3V3 rosso
Massa GND black
SDA (GPIO 2) SDI/SDA blue
SCL (GPIO 3) SCK/SCL orange

Fare riferimento al diagramma di pinout seguente in base alle esigenze:

Diagramma che mostra il pinout dell'intestazione Raspberry Pi GPIO. Immagine di Raspberry Pi Foundation.
Immagine di Raspberry Pi Foundation.

Suggerimento

È consigliabile semplificare le connessioni all'intestazione GPIO con una scheda di interruzione GPIO.

Creare l'app

Completare i passaggi seguenti nell'ambiente di sviluppo preferito:

  1. Creare una nuova app console .NET usando l'interfaccia della riga di comando .NET o Visual Studio. Denominarlo SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Aggiungere il pacchetto Iot.Device.Bindings al progetto. Usare l'interfaccia della riga di comando .NET dalla directory del progetto o da Visual Studio.

    dotnet add package Iot.Device.Bindings --version 2.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 è impostato su una nuova istanza di I2cConnectionSettings. Il costruttore imposta il busId parametro su 1 e il deviceAddress parametro su Bme280.DefaultI2cAddress.

      Importante

      Alcuni produttori di interruzioni BME280 usano il valore dell'indirizzo secondario. Per questi dispositivi, usare Bme280.SecondaryI2cAddress.

    • Una dichiarazione using crea un'istanza di I2cDevice chiamando I2cDevice.Create e passando i2cSettings. Questo I2cDevice rappresenta il bus I2C. La using dichiarazione garantisce che l'oggetto venga eliminato e le risorse hardware vengano rilasciate correttamente.

    • Un'altra using dichiarazione crea un'istanza di Bme280 per rappresentare il sensore. Il I2cDevice valore viene passato nel costruttore.

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

    • Un while ciclo viene eseguito in modo indefinito. Ogni iterazione:

      1. Cancella la console.

      2. Imposta la modalità di alimentazione su Bmx280PowerMode.Forced. Questo forza il chip a eseguire una misurazione, archiviare i risultati e quindi dormire.

      3. Legge i valori per temperatura, pressione, umidità e altitudine.

        Nota

        L'altitudine viene calcolata dall'associazione del dispositivo. Questo overload di TryReadAltitude usa la pressione media del livello del mare per generare una stima.

      4. Scrive le condizioni ambientali correnti nella console.

      5. Dorme 1000 ms.

  4. Compilare l'app. Se si usa l'interfaccia della riga di comando .NET, eseguire dotnet build. Per compilare in Visual Studio, premere CTRL+MAIUSC+B.

  5. Distribuire l'app in 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
    

    Osservare 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 temperatura/umidità/barometrica!

Ottenere il codice sorgente

L'origine per questa esercitazione è disponibile in GitHub.

Passaggi successivi