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á .NET para ler as condições ambientais de um sensor.

Pré-requisitos

  • Computador de placa única baseado em ARM (ARMv7 ou superior) (SBC)
  • Divisão do sensor de umidade/pressão barométrica/temperatura do BME280
  • Cabos de jumper
  • Breadboard (opcional)
  • Placa de contato impresso GPIO do Raspberry Pi (opcional)
  • .NET SDK 10 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 a .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. Certifique-se de que sua placa breakout BME280 inclua uma interface de circuito inter-integrado (I2C).

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 de Fritzing mostrando a conexão do Raspberry Pi com a placa 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 do Raspberry Pi. Imagem cortesia da 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 .NET usando a CLI .NET ou Visual Studio. Nomeie-o sensorTutorial.

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

    dotnet package add Iot.Device.Bindings --version 4.1.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 de uso cria uma instância de I2cDevice chamando I2cDevice.Create e passando em i2cSettings. Isso I2cDevice representa o ônibus 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. No I2cDevice é passado para o 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. Esta sobrecarga de TryReadAltitude usa pressão ao nível médio 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 .NET, execute dotnet build. Para criar em Visual Studio, pressione Ctrl+Shift+B.

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

  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 dados de um sensor de temperatura, umidade e pressão barométrica!

Obter o código-fonte

A origem deste tutorial está disponível em GitHub.

Próximas etapas