Partilhar via


Ler as condições ambientais a partir de um sensor

Um dos cenários mais comuns para dispositivos IoT é a deteção de condições ambientais. Uma variedade de sensores está disponível para monitorar temperatura, umidade, pressão barométrica e muito mais.

Neste tópico, você usará o .NET para ler as condições ambientais de um sensor.

Pré-requisitos

  • Computador de placa única (SBC) baseado em ARM (ARMv7 ou superior)
  • Fuga do sensor de humidade/pressão barométrica/temperatura BME280
  • Fios de ligação
  • Breadboard (opcional)
  • Placa de expansão GPIO para Raspberry Pi (opcional)
  • .NET SDK 8 ou posterior

Observação

Este tutorial foi escrito assumindo que o dispositivo alvo é o Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux que suporte .NET, como Orange Pi, ODROID e muito mais.

Importante

Existem muitos fabricantes de BME280 breakouts. A maioria dos designs são semelhantes, e o fabricante não deve fazer qualquer diferença para a funcionalidade. Este tutorial tenta explicar as variações. Certifique-se de que a sua placa BME280 inclui uma interface de Circuito Interintegrado (I2C).

Componentes como os breakouts BME280 são frequentemente vendidos com cabeçalhos de pinos não soldados. Se não se sentir confortável com a soldadura, procure uma placa breakout BME280 com um cabeçalho pré-soldado ou um conector diferente. Se quiser, considere aprender a soldar! Aqui está um bom guia para iniciantes em soldadura.

Preparar o SBC

Certifique-se de que o SBC está configurado para suportar os seguintes serviços:

  • SSH
  • I2C

Para muitos dispositivos, nenhuma configuração adicional é necessária. Para o Raspberry Pi, use o raspi-config comando. Para obter mais informações sobre o raspi-config, consulte a documentação do Raspberry Pi.

Preparar o hardware

Use os componentes de hardware para construir o circuito conforme descrito no diagrama a seguir:

Um diagrama Fritzing mostrando a conexão do Raspberry Pi com a placa de breakout BME280

As seguintes são as ligações entre o Raspberry Pi e o breakout BME280. Note que os rótulos dos pinos diferem em diferentes placas de conexão BME280.

Raspberry Pi BME280 Fuga Cor
3,3 V VIN/3V3 vermelho
Terreno GND preto
SDA (GPIO 2) SDI/SDA azul
SCL (GPIO 3) SCK/SCL laranja

Consulte o diagrama de pinagem abaixo, conforme necessário.

Um diagrama mostrando a pinagem do cabeçalho GPIO do Raspberry Pi. Imagem cedida pela Raspberry Pi Foundation.
Imagem cedida pela Raspberry Pi Foundation.

Sugestão

Recomenda-se uma placa de breakout GPIO em conjunto com uma placa de ensaio para agilizar as conexões ao cabeçalho GPIO.

Criar a aplicação

Conclua as seguintes etapas em seu ambiente de desenvolvimento preferido:

  1. Crie um novo aplicativo de console .NET usando a CLI do .NET ou o Visual Studio. Nomeie-o SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Adicione o pacote Iot.Device.Bindings ao projeto. Utilize o CLI do .NET no diretório do projeto ou o Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Substitua o conteúdo do ficheiro Program.cs pelo seguinte código:

    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);
    }
    

    No código anterior:

    • i2cSettings está definido como uma nova instância de I2cConnectionSettings. O construtor define o busId parâmetro como 1 e o deviceAddress parâmetro como Bme280.DefaultI2cAddress.

      Importante

      Alguns fabricantes de módulos breakout BME280 usam o valor de endereço secundário. Para esses dispositivos, use Bme280.SecondaryI2cAddress.

    • Uma declaração 'using' cria uma instância de I2cDevice através da chamada de I2cDevice.Create e da passagem de i2cSettings. Este I2cDevice representa o barramento I2C. A using declaração garante que o objeto seja descartado e que os recursos de hardware sejam liberados corretamente.

    • Outra using declaração cria uma instância de Bme280 para representar o sensor. O I2cDevice é passado no construtor.

    • O tempo necessário para o chip fazer medições com as configurações atuais (padrão) do chip é recuperado chamando GetMeasurementDuration.

    • Um while loop é executado indefinidamente. Cada iteração:

      1. Limpa o console.

      2. Define o modo de alimentação como Bmx280PowerMode.Forced. Isso força o chip a realizar uma medição, armazenar os resultados e, em seguida, dormir.

      3. Lê os valores de temperatura, pressão, umidade e altitude.

        Observação

        A altitude é calculada pela conexão do dispositivo. Esta sobrecarga de TryReadAltitude usa a pressão do nível médio do mar para gerar uma estimativa.

      4. Grava as condições ambientais atuais no console.

      5. Dorme 1000 ms.

  4. Crie o aplicativo. Se estiver usando a CLI do .NET, execute dotnet build. Para criar no Visual Studio, pressione Ctrl+Shift+B.

  5. Implante o aplicativo no SBC como um aplicativo independente. Para obter instruções, consulte Implantar aplicativos .NET no Raspberry Pi. Certifique-se de dar permissão de execução ao ficheiro executável usando chmod +x.

  6. Execute a aplicação no Raspberry Pi mudando para o diretório de implantação e executando o executável.

    ./SensorTutorial
    

    Observe a saída do sensor no console.

  7. Encerre o programa pressionando Ctrl+C.

Parabéns! Você usou I2C para ler valores de um sensor de temperatura/umidade/pressão barométrica!

Obter o código-fonte

A fonte deste tutorial está disponível no GitHub.

Próximos passos