다음을 통해 공유


센서에서 환경 조건 읽기

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

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

필수 구성 요소

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

참고

이 자습서는 대상 디바이스가 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 red
접지 GND black
SDA(GPIO 2) SDI/SDA blue
SCL(GPIO 3) SCK/SCL orange

필요한 경우 다음 핀 배치도 다이어그램을 참조하세요.

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 2.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.Create를 호출하고 i2cSettings를 전달하여 I2cDevice 인스턴스를 만듭니다. I I2cDevice2C 버스를 나타냅니다. using 선언은 개체가 삭제되고 하드웨어 리소스가 제대로 해제되었는지 확인합니다.

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

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

    • while 루프는 무기한으로 실행됩니다. 반복될 때마다:

      1. 콘솔을 지웁니다.

      2. 전원 모드를 Bmx280PowerMode.Forced로 설정합니다. 그러면 칩이 측정을 한 번 수행하고 결과를 저장한 다음, 일시 중단됩니다.

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

        참고

        고도는 디바이스 바인딩을 통해 계산합니다. TryReadAltitude의 이 오버로드는 평균 해면 기압을 사용하여 추정치를 생성합니다.

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

      5. 1,000밀리초 동안 일시 중단합니다.

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

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

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

    ./SensorTutorial
    

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

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

축하합니다! I2C를 사용하여 온도/습도/기압 센서에서 값을 읽었습니다!

소스 코드 가져오기

이 자습서의 소스는 GitHub에서 제공됩니다.

다음 단계