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, vais usar o .NET para ler as condições ambientais a partir de um sensor.

Pré-requisitos

  • Computador de placa única (SBC) baseado em ARM (ARMv7 ou superior)
  • Fragmentação do sensor de humidade/pressão/temperatura do BME280
  • Fios de ligação
  • Placa de ensaio (opcional)
  • Placa de expansão GPIO para Raspberry Pi (opcional)
  • .NET SDK 10 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 outros.

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. Garanta que o breakout 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 na soldagem.

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, usa o raspi-config comando. Para mais informações sobre 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 de Fritzing que mostra a ligação do Raspberry Pi à placa de separação 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.

Pi de framboesa 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 que mostra o pinout do cabeçalho GPIO do Raspberry Pi. Imagem cortesia da Raspberry Pi Foundation.
Imagem cortesia da 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 uma nova aplicação de consola .NET usando .NET CLI ou Visual Studio. Chama-lhe 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:

    • i2cSettings é definido para 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 de uso cria uma instância de I2cDevice ao chamar I2cDevice.Create e passando i2cSettings. Isto I2cDevice representa o barramento I2C. A using declaração garante que o objeto é eliminado e que os recursos de hardware são devidamente libertados.

    • 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 definições atuais (padrão) do chip é obtido ao chamar GetMeasurementDuration.

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

      1. Limpa o console.

      2. Define o modo de energia para 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 utiliza a pressão média ao nível 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 a usar a CLI .NET, execute dotnet build. Para construir em Visual Studio, pressione Ctrl+Shift+B.

  5. Implante o aplicativo no SBC como um aplicativo independente. Para instruções, consulte Deploy .NET apps para Raspberry Pi. Certifique-se de dar permissão de execução ao 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. Termina o programa pressionando Ctrl+C.

Parabéns! Já usaste I2C para ler valores de um sensor de temperatura/humidade/pressão barométrica!

Obter o código-fonte

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

Próximos passos