개발자/Arduino

BME280 I2C 온도 습도 기압 센서 모듈 사용법

지구빵집 2021. 3. 30. 10:24
반응형

 

 

BME280 I2C 온습도 대기압 센서

I2C BME280 Environmental Sensor (Temperature, Humidity, Barometer)

 

BME280 센서 모듈은 온도, 습도, 기압을 측정할 수 있는 고정밀 센서모듈입니다. 주의할 점은 원래 제품은 Gravity 씨리즈의 센서인데 여기서는 기능이 같고 i2c 인터페이스만 지원되는 비교적 가격이 저렴한 센서에 대해 알아봅니다. 혹시 아래에 두 가지 제품의 설명이나 연결이 섞여 있어도 동일한 i2c 인터페이스에 의해 동작하는 방법만 알아두면 본 포스팅의 역할은 다 한 것입니다.  

 

참고로 Gravity 센서 시리즈에 대해 알아 보면 "Gravity 인터페이스의 BME280 기반 기압, 온도, 습도 측정 센서입니다. SPI 및 I2C 인터페이스가 지원되며, 고정밀 및 다양한 기능이 부여된 소형 센서입니다. Gravity 시리즈는 모든 제품에 대한 사용방법(Wiki)을 제공하며, 표준화된 커넥터를 통해 손쉬운 방법으로 연결할 수 있는 제품입니다. 아두이노, 라즈베리파이 등 다양한 플랫폼과 사용할 수 있으며, Gravity 확장쉴드를 사용하면 아두이노와 Gravity 시리즈를 더 손쉽게 연결/사용할 수 있습니다. 동일 센서/모듈들에 비해 비교적 저렴하며, 연결 케이블(Female to Female)이 포함되어 있습니다." 

 

외형 이미지

 

싸구려 BME280 인가? ㅎㅎ

위 제품은 디바이스마트에서 판매하는 센서로 솔더링(납땜)으로 i2c 주소를 선택하는 설명의 사진인데 답글에 보면 "제품 설명에 납땜으로 점핑시켜서 I2C 주소를 확정해야 사용할 수 있다고 써있는데 잘못된 설명이구요. 점핑없이 0x76으로 사용하실 수 있습니다."라고 나와 있으니 참고하세요. 

 

아래 이미지는 Gravity 시리즈의 정품으로 보이며 마찬가지로 SPI 포트를 지원되며 가격차이가 주된 차이입니다. ^^ 참고하십시요.

 

BME280 I2C 온습도 대기압 센서 (Gravity: I2C BME280 Environmental Sensor (Temperature, Humidity, Barometer))

 

BME280 I2C 온습도 대기압 센서 (Gravity: I2C BME280 Environmental Sensor (Temperature, Humidity, Barometer))

 

보드 상세 이미지

 

https://wiki.dfrobot.com/Gravity__I2C_BME280_Environmental_Sensor__Temperature,_Humidity,_Barometer__SKU__SEN0236

핀 다이어그램

 

Num Label Description
1 + 3.3~5V
2 - GND
3 C SCL
4 D SDA

 

특징 

  • 3.3V / 5V 마이크로 컨트롤러와 호환
  • 환경 모니터링 : 온도, 습도 및 기압계
  • Gravity I2C 인터페이스 및 예비 XH2.54 SPI 인터페이스
  • 설치하게 편리한 소형 

응용분야 

  • 상황 인식 (예 : 피부 감지, 방 변화 감지)
  • 홈 자동화 제어 (제어 난방, 환기, 에어컨 (HVAC))
  • 사물 인터넷
  • GPS 향상 (예 : 최초 수정 시간 개선, 추측 항법, 경사 감지)
  • 실내 내비게이션 (층 변경 감지, 엘리베이터 감지)
  • 야외 내비게이션, 레저 및 스포츠 애플리케이션
  • 일기 예보
  • 수직 속도 표시 (상승 / 싱크 속도) 

전기와 기구 사양 

  • 작동 전압 : 3.3V ~ 5.0V
  • 작동 전류 : 2mA
  • 작동 온도 : -40 ℃ ~ + 85 ℃
  • 온도 측정 범위 : -40 ℃ ~ + 85 ℃, 분해능 0.1 ℃, 편차 ± 0.5 ℃
  • 습도 측정 범위 : 0 ~ 100 % RH, 분해능 0.1 % RH, 편차 ± 2 % RH
  • 압력 측정 범위 : 300 ~ 1100hPa 습도
  • 샘플링 시간 : 1 초
  • 치수 : 22 * ​​25mm / 0.87 * 0.98 인치
  • 무게 : 12g 

사용법은 아두이노 IDE에서 직접 프로그래밍하여 테스트 하는데 우선 러이브러리를 설치하여야 합니다. 

 

아래는 사이트 참고 하시고 적용하지 마세요. 그 아래 설명부터 적용하십시요.

 

Arduino IDE (Version requirement: V1.8) 다운받는 곳은 Click to Download Arduino IDE from Arduino®

라이브러리 다운받는 곳 BME280 Environmental Sensor Arduino Library (Github)

라이브러리 설치하는 방법 How to install Libraries in Arduino IDE 

 

적용: Nano 33 IoT와 BME280 I2C 연결도는 아래 그림을 참고합니다. 우리는 가장 쉬운 방법으로 테스트 합니다. 복잡한 것은 체질에 맞지 않습니다. ^^

 

Nnao 33 IoT 와 BME280과 Arduino I2C Connection Diagram

 

그럼 이제 adafruit 의 라이브러리를 아래 그림을 참고하여 설치합니다.

 

Adafruit BME280 센서 라이브러리

여기까지 했으면 거의 다 한 겁니다. 예제에서 찾아보면 아래와 같은 샘플코드가 있으니 파일 - 열기 해서 불러옵니다. 아래는 불러온 코드를 보여줍니다.

 

/***************************************************************************
  This is a library for the BME280 humidity, temperature & pressure sensor

  Designed specifically to work with the Adafruit BME280 Breakout
  ----> http://www.adafruit.com/products/2650

  These sensors use I2C or SPI to communicate, 2 or 4 pins are required
  to interface. The device's I2C address is either 0x76 or 0x77.

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Limor Fried & Kevin Townsend for Adafruit Industries.
  BSD license, all text above must be included in any redistribution
  See the LICENSE file for details.
 ***************************************************************************/

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

unsigned long delayTime;

void setup() {
    Serial.begin(9600);
    while(!Serial);    // time to get serial running
    Serial.println(F("BME280 test"));

    unsigned status;
    
    // default settings
    status = bme.begin();  
    // You can also pass in a Wire library object like &Wire2
    // status = bme.begin(0x76, &Wire2)
    status = bme.begin(0x76, &Wire);
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
        Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
        Serial.print("        ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
        Serial.print("   ID of 0x56-0x58 represents a BMP 280,\n");
        Serial.print("        ID of 0x60 represents a BME 280.\n");
        Serial.print("        ID of 0x61 represents a BME 680.\n");
        while (1) delay(10);
    }
    
    Serial.println("-- Default Test --");
    delayTime = 1000;

    Serial.println();
}


void loop() { 
    printValues();
    delay(delayTime);
}


void printValues() {
    Serial.print("Temperature = ");
    Serial.print(bme.readTemperature());
    Serial.println(" *C");

    Serial.print("Pressure = ");

    Serial.print(bme.readPressure() / 100.0F);
    Serial.println(" hPa");

    Serial.print("Approx. Altitude = ");
    Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
    Serial.println(" m");

    Serial.print("Humidity = ");
    Serial.print(bme.readHumidity());
    Serial.println(" %");

    Serial.println();
}

 

여기서 눈여겨 볼 것과 원래 소스에서 수정할 분분입니다. 아래는 눈여겨 볼 것입니다. 우리는 I2C 인터페이스를 사용하여 데이터를 볼 것입니다. 그러니 주석 포함하여 30 줄은 아래와 같이 나와야 합니다.

 

Adafruit_BME280 bme; // I2C
//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

 

그리고 수정할 곳은 바로 44~48 라인을 아래와 같이 수정합니다. 명심하세요. 그러니까 예전 부분을 주석처리하고 새로운 줄을 집어 넣은 겁니다. BME280 의 i2c 주소는 위에 빨간 글씨로 표현한 0x76 입니다. 

 

    // default settings
    //status = bme.begin();  
    // You can also pass in a Wire library object like &Wire2
    // status = bme.begin(0x76, &Wire2)
    status = bme.begin(0x76, &Wire);

 

자, 여기까지 하고 업로딩 하면 아래와 같이 아름다운 결과를 얻습니다. 아래는 씨리얼 모니터로 출력하는 결과 입니다.

 

BME280 출력

아래는 무시하셔도 됩니다. 고생하셨습니다. ^^

 

참고로 정품을 사용할 경우 SPI 인터페이스 연결도면입니다. 

 

Arduino SPI Connection Diagram

 

더 많은 문서는 아래를 참고하세요.

Github-DFRobot BME280

BME280 series humidity sensor design guide 

이미지 소스들 Gravity I2C BME280 Environmental Sensor Temperature, Humidity, Barometer SKU SEN0236 

 

여기 반드시 참고할 것!!! waveshare BME280 Environmental Sensor 

 

Datasheet: 

 

bme280-datasheet.pdf
1.17MB

 

참고문서

dfrobot wiki 기술 문서

 

 

 

 

반응형