다음을 통해 공유


센서에서 환경 조건 읽기

IoT 디바이스에 대한 가장 일반적인 시나리오 중 하나는 환경 조건을 감지하는 것입니다. 다양한 센서를 사용하여 온도, 습도, 바로미터 압력 등을 모니터링할 수 있습니다.

이 항목에서는 .NET을 사용하여 센서에서 환경 조건을 읽습니다.

필수 조건

  • ARM 기반(ARMv7 이상) SBC(단일 보드 컴퓨터)
  • BME280 습도/기압/온도 센서 모듈
  • 점퍼 케이블
  • 브레드보드(선택 사항)
  • Raspberry Pi GPIO 브레이크아웃 보드(선택 사항)
  • .NET SDK 8 이상

비고

이 자습서는 대상 디바이스가 Raspberry Pi라고 가정하여 작성되었습니다. 그러나 이 자습서는 Orange Pi, ODROID 등 .NET을 지원하는 Linux 기반 SBC에 사용할 수 있습니다.

중요합니다

많은 BME280 브레이크아웃 제조업체가 있습니다. 대부분의 디자인은 비슷하며 제조업체에서 기능을 변경하면 안 됩니다. 이 자습서에서는 변형을 설명하려고 시도합니다. BME280 브레이크아웃에 I2C(Inter-Integrated Circuit) 인터페이스가 포함되는지 확인하십시오.

BME280 모듈과 같은 구성 요소는 종종 납땜되지 않은 핀 헤더로 판매됩니다. 솔더링이 불편하면 미리 솔더링된 헤더 또는 다른 커넥터가 있는 BME280 브레이크아웃 보드를 찾습니다. 원하는 경우 솔더를 사용하는 방법을 알아보는 것이 좋습니다. 다음은 솔더링에 대한 좋은 초보자 가이드입니다.

SBC를 준비하십시오

SBC가 다음 서비스를 지원하도록 구성되어 있는지 확인합니다.

  • SSH
  • I2C

많은 디바이스의 경우 추가 구성이 필요하지 않습니다. Raspberry Pi에서는 raspi-config 명령을 사용하십시오. 자세한 raspi-config내용은 Raspberry Pi 설명서를 참조하세요.

하드웨어 준비

다음 다이어그램에 표시된 대로 하드웨어 구성 요소를 사용하여 회로를 빌드합니다.

Raspberry Pi에서 BME280 브레이크아웃 보드로의 연결을 나타내는 Fritzing 다이어그램

다음은 Raspberry Pi에서 BME280 브레이크아웃으로의 연결입니다. 핀 레이블은 다양한 BME280 보드 제품에 따라 다릅니다.

Raspberry Pi BME280 중단 색깔
3.3V VIN/3V3 빨강
GND 검정색
SDA(GPIO 2) SDI/SDA 파랑
SCL(GPIO 3) SCK/SCL 오렌지

필요에 따라 다음 핀아웃 다이어그램을 참조하세요.

Raspberry Pi GPIO 헤더의 핀아웃을 보여 주는 다이어그램 이미지 제공: Raspberry Pi Foundation.
이미지 제공: Raspberry Pi Foundation.

팁 (조언)

GPIO 헤더에 대한 연결을 간소화하려면 브레드보드와 함께 GPIO 브레이크아웃 보드를 사용하는 것이 좋습니다.

앱 만들기

기본 설정 개발 환경에서 다음 단계를 완료합니다.

  1. .NET CLI 또는 Visual Studio를 사용하여 새 .NET 콘솔 앱을 만듭니다. 이름을 SensorTutorial로 지정합니다.

    dotnet new console -o SensorTutorial
    cd SensorTutorial
    
  2. 프로젝트에 Iot.Device.Bindings 패키지를 추가합니다. 프로젝트 디렉터리 또는 Visual Studio에서 .NET CLI를 사용합니다.

    dotnet add package Iot.Device.Bindings --version 3.2.0-*
    
  3. Program.cs의 내용을 다음 코드로 바꿉니다.

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

    앞의 코드에서 다음을 수행합니다.

    • i2cSettingsI2cConnectionSettings의 새 인스턴스로 설정됩니다. 생성자는 매개 변수를 busId 1로 설정하고 매개 변수를 deviceAddress .로 Bme280.DefaultI2cAddress설정합니다.

      중요합니다

      일부 BME280 소규모 제조업체는 보조 주소 값을 사용합니다. 해당 디바이스의 경우 .를 사용합니다 Bme280.SecondaryI2cAddress.

    • using 선언I2cDevice를 호출하여 I2cDevice.Create를 전달함으로써 i2cSettings의 인스턴스를 생성합니다. 이 I2cDevice는 I2C 버스를 나타냅니다. 선언은 using 개체가 삭제되고 하드웨어 리소스가 제대로 해제되도록 합니다.

    • 또 다른 using 선언은 센서를 나타내는 인스턴스 Bme280 를 만듭니다. I2cDevice는 생성자에 전달됩니다.

    • 칩이 칩의 현재(기본값) 설정을 사용하여 측정을 수행하는 데 필요한 시간은 호출 GetMeasurementDuration을 통해 검색됩니다.

    • 루프는 while 무기한 실행됩니다. 각 반복:

      1. 콘솔을 지웁니다.

      2. 전원 모드를 .로 Bmx280PowerMode.Forced설정합니다. 이로 인해 칩이 하나의 측정을 수행하고 결과를 저장한 다음 절전 모드로 전환합니다.

      3. 온도, 압력, 습도 및 고도 값을 읽습니다.

        비고

        고도는 디바이스 바인딩에 의해 계산됩니다. 이 과부하의 TryReadAltitude는 평균 해수면 기압을 사용하여 추정치를 산출합니다.

      4. 현재 환경 조건을 콘솔에 씁니다.

      5. 1,000ms 동안 정지합니다.

  4. 앱을 빌드합니다. .NET CLI를 사용하는 경우 .NET CLI를 실행합니다 dotnet build. Visual Studio에서 빌드하려면 Ctrl+ ShiftB+ 누릅니다.

  5. 자체 포함 앱으로 SBC에 앱을 배포합니다. 자세한 내용은 Raspberry Pi에 .NET 앱 배포를 참조하세요. 를 사용하여 실행 파일 실행 권한을 부여해야 합니다 chmod +x.

  6. 배포 디렉터리로 전환하고 실행 파일을 실행하여 Raspberry Pi에서 앱을 실행합니다.

    ./SensorTutorial
    

    콘솔에서 센서 출력을 관찰합니다.

  7. Ctrl+C를 눌러 프로그램을 종료합니다.

축하합니다! I2C를 사용하여 온도/습도/바로미터 압력 센서에서 값을 읽었습니다.

소스 코드 가져오기

이 자습서의 원본은 GitHub에서 사용할 수 있습니다.

다음 단계