Compartir a través de


Leer las condiciones del entorno de un sensor

Uno de los escenarios más comunes para dispositivos IoT es la detección de condiciones ambientales. Hay una variedad de sensores disponibles para supervisar la temperatura, la humedad, la presión barométrica, etc.

En este tema, usará .NET para leer las condiciones ambientales de un sensor.

Prerrequisitos

  • Equipo con placa única (ARMv7 o superior) basado en ARM (SBC)
  • Humedad BME280 /presión barométrica/interrupción del sensor de temperatura
  • Cables de puente
  • Placa de pruebas (opcional)
  • Placa de expansión GPIO para Raspberry Pi (opcional)
  • .NET SDK 10 o posterior

Nota:

Este tutorial se escribe suponiendo que el dispositivo de destino sea Raspberry Pi. Sin embargo, este tutorial se puede usar para cualquier SBC basado en Linux que admita .NET, como Orange Pi, ODROID, etc.

Importante

Hay muchos fabricantes de placas adaptadoras BME280. La mayoría de los diseños son similares y el fabricante no debería suponer ninguna diferencia con respecto a la funcionalidad. En este tutorial se intenta tener en cuenta las variaciones. Asegúrese de que su módulo BME280 incluye una interfaz de Circuito Interintegrado (I2C).

Por lo general, los componentes como los sensores BME280 se venden con cabezales de bornes sin soldar. Si no te sientes cómodo soldando, busca una placa de expansión BME280 con un encabezado presoldado o un conector diferente. Si lo desea, considere la posibilidad de aprender a soldar! Esta es una buena guía para principiantes para soldar.

Preparación del equipo SBC

Asegúrese de que el CLS está configurado para admitir los siguientes servicios:

  • SSH
  • I2C

Para muchos dispositivos, no se requiere ninguna configuración adicional. Para Raspberry Pi, use el raspi-config comando . Para obtener más información sobre raspi-config, consulte la documentación de Raspberry Pi.

Preparación del hardware

Use los componentes de hardware para compilar el circuito como se muestra en el diagrama siguiente:

Diagrama de Fritzing que muestra la conexión de Raspberry Pi a la placa de expansión BME280

A continuación se indican las conexiones desde Raspberry Pi a la placa adaptadora BME280. Tenga en cuenta que las etiquetas de anclaje difieren en las placas adaptadoras BME280.

Raspberry Pi Placa adaptadora BME280 Color
3,3 V VIN/3V3 rojo
Tierra GND negro
SDA (GPIO 2) SDI/SDA azul
SCL (GPIO 3) SCK/SCL naranja

Consulte el siguiente diagrama de anclaje según sea necesario:

Diagrama que muestra la distribución de pines del conector GPIO de Raspberry Pi. Imagen con autorización de Raspberry Pi Foundation.
Imagen cortesía de Raspberry Pi Foundation.

Sugerencia

Se recomienda una placa de pruebas de GPIO junto con una placa para optimizar las conexiones con el encabezado de GPIO.

Creación de la aplicación

Complete los pasos siguientes en el entorno de desarrollo preferido:

  1. Cree una nueva aplicación de consola de .NET mediante la CLI de .NET o Visual Studio. Asígneles el nombre SensorTutorial.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. Agregue el paquete Iot.Device.Bindings al proyecto. Use .NET CLI desde el directorio del proyecto o Visual Studio.

    dotnet package add Iot.Device.Bindings --version 4.1.0
    
  3. Reemplace el contenido de Program.cs por el código siguiente:

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

    En el código anterior:

    • i2cSettings se asigna a una nueva instancia de I2cConnectionSettings. El constructor establece el busId parámetro en 1 y el deviceAddress parámetro en Bme280.DefaultI2cAddress.

      Importante

      Algunos fabricantes de placas BME280 usan el valor de dirección secundaria. Para esos dispositivos, use Bme280.SecondaryI2cAddress.

    • Una declaración using crea una instancia de I2cDevice llamando a I2cDevice.Create y pasando i2cSettings. Esto I2cDevice representa el bus I2C. La using declaración garantiza que el objeto se elimina y los recursos de hardware se liberan correctamente.

    • Otra using declaración crea una instancia de Bme280 para representar el sensor. I2cDevice es pasado al constructor.

    • El tiempo necesario para que el chip tome medidas con la configuración actual (predeterminada) del chip se recupera llamando a GetMeasurementDuration.

    • Un while bucle se ejecuta indefinidamente. Cada iteración:

      1. Se borra la consola.

      2. Establece el modo de energía en Bmx280PowerMode.Forced. Esto obliga al chip a realizar una medición, almacenar los resultados y, a continuación, dormir.

      3. Lee los valores de temperatura, presión, humedad y altitud.

        Nota:

        La altitud se calcula mediante el enlace del dispositivo. Esta sobrecarga de TryReadAltitude usa la presión media de nivel de mar para generar una estimación.

      4. Escribe las condiciones del entorno actuales en la consola.

      5. Se suspende durante 1000 ms.

  4. Compile la aplicación. Si usa la CLI de .NET, ejecute dotnet build. Para compilar en Visual Studio, presione Ctrl+Shift+B.

  5. Despliegue la aplicación en el SBC como una aplicación autónoma. Para obtener instrucciones, consulte Deploy .NET apps to Raspberry Pi. Asegúrese de conceder al ejecutable permiso de ejecución mediante chmod +x.

  6. Ejecute la aplicación en Raspberry Pi cambiando al directorio de implementación y ejecutando el ejecutable.

    ./SensorTutorial
    

    Observe la salida del sensor en la consola.

  7. Para finalizar el programa, presione Ctrl+C.

¡Felicidades! Ha usado I2C para leer los valores de un sensor de temperatura, humedad y presión barométrica.

Obtención del código fuente

El origen de este tutorial es disponible en GitHub.

Pasos siguientes