Partilhar via


Ler as condições ambientais de um sensor

Um dos cenários mais comuns para dispositivos IoT é a deteção de condições ambientais. Estão disponíveis vários sensores para monitorizar a temperatura, a humidade, a pressão barométrica e muito mais.

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

Pré-requisitos

  • Computador de quadro único (SBC) baseado em ARM (ARMv7 ou superior)
  • BME280 humidade/pressão barométrica/sensor de temperatura simultânea
  • Fios jumper
  • Breadboard (opcional)
  • Placa simultânea raspberry Pi GPIO (opcional)
  • SDK .NET 7 ou posterior

Nota

Este tutorial é escrito partindo do princípio de que o dispositivo de destino é Raspberry Pi. No entanto, este tutorial pode ser utilizado para qualquer SBC baseado em Linux que suporte .NET, como Orange Pi, ODROID e muito mais.

Importante

Existem muitos fabricantes de fugas de BME280. A maioria dos designs são semelhantes e o fabricante não deve fazer qualquer diferença para a funcionalidade. Este tutorial tenta contabilizar as variações. Certifique-se de que a análise do BME280 inclui uma interface do Circuito do Inter-Integrated (I2C).

Os componentes, como os simultâneas BME280, são frequentemente vendidos com cabeçalhos de pinos não afixados. Se não se sentir à vontade com a soldadeira, procure uma placa simultânea BME280 com um cabeçalho pré-vendido ou um conector diferente. Se quiser, considere aprender a soldar! Aqui está um bom guia para principiantes para a soldadeira.

Preparar o SBC

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

  • SSH
  • I2C

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

Preparar o hardware

Utilize os componentes de hardware para criar o circuito, conforme descrito no diagrama seguinte:

Um diagrama fritzing a mostrar a ligação do Raspberry Pi à placa simultânea BME280

Seguem-se as ligações do Raspberry Pi à fuga do BME280. Tenha em atenção que as etiquetas de afixar diferem em várias análises BME280.

Raspberry Pi Análise do BME280 Cor
3.3V VIN/3V3 red
Terreno GND black
SDA (GPIO 2) SDI/SDA blue
SCL (GPIO 3) SCK/SCL orange

Veja o seguinte diagrama de pinout, conforme necessário:

Um diagrama a mostrar o pinout do cabeçalho GPIO Raspberry Pi. Imagem cortesia Raspberry Pi Foundation.
Imagem cortesia Raspberry Pi Foundation.

Dica

Recomenda-se uma placa simultânea GPIO em conjunto com uma placa de pão para simplificar as ligações ao cabeçalho GPIO.

Criar a aplicação

Conclua os seguintes passos no seu ambiente de desenvolvimento preferencial:

  1. Crie uma nova Aplicação de Consola .NET com a CLI do .NET ou o Visual Studio. Dê-lhe o nome SensorTutorial.

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

    dotnet add package Iot.Device.Bindings --version 2.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 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 análise do BME280 utilizam o valor de endereço secundário. Para esses dispositivos, utilize Bme280.SecondaryI2cAddress.

    • Uma declaração de utilização cria uma instância de I2cDevice ao chamar I2cDevice.Create e transmitir i2cSettings. Isto I2cDevice representa o autocarro I2C. A using declaração garante que o objeto é eliminado e que os recursos de hardware são libertados 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 que o chip efetue medições com as definições atuais (predefinições) do chip é obtido ao chamar GetMeasurementDuration.

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

      1. Limpa a consola.

      2. Define o modo de energia como Bmx280PowerMode.Forced. Isto força o chip a efetuar uma medição, armazenar os resultados e, em seguida, suspender.

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

        Nota

        A altitude é calculada pelo enlace do dispositivo. Esta sobrecarga de TryReadAltitude utiliza a pressão média do nível do mar para gerar uma estimativa.

      4. Escreve as condições ambientais atuais na consola do .

      5. Dorme 1000 ms.

  4. Crie a aplicação. Se estiver a utilizar a CLI de .NET, execute dotnet build. Para criar no Visual Studio, prima Ctrl+Shift+B.

  5. Implemente a aplicação no SBC como uma aplicação autónoma. Para obter instruções, veja Implementar aplicações .NET no Raspberry Pi. Confirme que concede permissão de execução executável com chmod +x.

  6. Execute a aplicação no Raspberry Pi ao mudar para o diretório de implementação e executar o executável.

    ./SensorTutorial
    

    Observe a saída do sensor na consola do .

  7. Termine o programa premindo Ctrl+C.

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

Obter o código-fonte

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

Passos seguintes