본문 바로가기

개발자/Arduino

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

반응형

 

 

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 기술 문서

 

 

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩