Compartilhar via


Ler condições ambientais de um sensor

Um dos cenários mais comuns para dispositivos IoT é a detecção de condições ambientais. Uma variedade de sensores está disponível para monitorar a temperatura, a umidade, a 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 baseado em ARM (ARMv7 ou superior) (SBC)
  • Detalhamento dos tipos de sensor de umidade/pressão barométrica/temperatura BME280
  • Cabos de jumper
  • Breadboard (opcional)
  • Placa de contato impresso GPIO do Raspberry Pi (opcional)
  • SDK do .NET 8 ou posterior

Observação

Este tutorial é escrito supondo que o dispositivo de destino seja Raspberry Pi. No entanto, este tutorial pode ser usado para qualquer SBC baseado em Linux que dê suporte ao .NET, como Orange Pi, ODROID e muito mais.

Importante

Há muitos outros fabricantes de placas de contato impresso BME280. A maioria dos designs são semelhantes, e o fabricante não deve fazer nenhuma diferença na funcionalidade. Este tutorial tenta considerar as variações. Verifique se a placa de contato BME280 inclui uma interface I2C (interintegrada).

Componentes como breakouts BME280 geralmente são vendidos com cabeçalhos de marcação não soldados. Se você estiver desconfortável com a soldagem, procure uma placa de 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 para solda.

Preparar o SBC

Verifique se o SBC está configurado para dar suporte aos seguintes serviços:

  • SSH
  • I2C

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

Preparar o hardware

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

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

Veja a seguir as conexões do Raspberry Pi com o breakout BME280. Observe que os rótulos de fixação diferem em vários breakouts BME280.

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

Consulte o seguinte diagrama de pinagem conforme necessário:

Um diagrama mostrando o pinout do cabeçalho GPIO Raspberry Pi. Imagem cedida pela Raspberry Pi Foundation.
Imagem cortesia Raspberry Pi Foundation.

Dica

Recomenda-se uma placa de fuga GPIO com uma placa de ensaio para simplificar as conexões com o cabeçalho GPIO.

Criar o aplicativo

Conclua as seguintes etapas em seu ambiente de desenvolvimento preferencial:

  1. Crie um novo aplicativo de console do .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. Use o CLI do .NET do diretório do projeto ou o Visual Studio.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Substitua o conteúdo do 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 apresentado:

    • i2cSettings é 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 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 chamando I2cDevice.Create e transmitindo i2cSettings. Esse I2cDevice representa o barramento I2C. A using declaração garante que o objeto seja descartado e os recursos de hardware sejam liberados corretamente.

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

    • O tempo necessário para o chip fazer medidas 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 energia como Bmx280PowerMode.Forced. Isso força o chip a executar uma medida, armazenar os resultados e, em seguida, dormir.

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

        Observação

        A altitude é calculada pela vinculação do dispositivo. Essa sobrecarga de TryReadAltitude usa a pressão média do nível do mar para gerar uma estimativa.

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

      5. Entra em modo de suspensão após 1000 ms.

  4. Crie o aplicativo. Se estiver usando a CLI do .NET, execute dotnet build. Para compilar 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 conceder permissão de execução ao executável usando .

  6. Execute o aplicativo no Raspberry Pi acessando o diretório de implantação e executando o arquivo 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 origem deste tutorial está disponível no GitHub.

Próximas etapas