상세 컨텐츠

본문 제목

024. Arduino 아두이노 - bme280 / bmp280 센서모듈(Using bme280 / bmp 280 sensor module)

embedded/arduino

by ZelKun 2019. 8. 16. 14:14

본문

반응형

출처:  https://www.aliexpress.com/item/32840435761.html

얼마전에 얻은 bme280 을 사용해보기로 했다
근데 테스트를 하다보니… BME280가 아니고 BMP280 이였다 이게 문제였다
BME는 온습도/기압을 지원하지만 BMP280은 온도/기압 만을 지원한다
근데 호환 센서라 그런가 똑같이 생겨서 문제가 되었다
판매자 사진을 보면 BME 일경우 E옆에 검은색으로 마크를 해놨다…

BMP280

마크가 전혀 안되있다 뭔가 속은 느낌..

출처:  https://www.aliexpress.com/item/32654011852.html

3.3V 제품군으로 센서 구멍위치가 다르긴한데 워낙 작아서 알아보기도 힘들다

명확하게 구분하는 방법은 BME280 lib를 깔고 sensorID를 확인해보면 알 수 있다

0x58 은 BMP280, 0x60 는 BME280 이다
참고로 가격차이가 좀 많이 난다

I2C Scanner를 이용해서 통신포트(?)를 찾아야하는데 확인해보니 0x76 이였다
I2C Scanner 소스: https://playground.arduino.cc/Main/I2cScanner/

사용을 위해 Adafruit lib를 설치해야한다
- Adafruit Unified Sensors
- Adafruit BME280 Library
- Adafruit BMP280 Library

외국에도 센서 구분을 못해서… 
sensor on i2c with 0x76 address doesn't work, BME280 Sensor not working 
bme280 humidity not working, bme280 humidity 0 
관련 이슈가 있다 전부 BMP280 이라서 생긴문제다...

Library manage

Library manager

Adafruit_BME280_Library 설치 해주자(v.1.0.9)
이전 버전은 sensorID 확인이 안된다

Example bme280test

예제 > Adafruit_BME280_Library > bme280test 를 열어주자

SCL, SDA 를 사용해도 된다

Arduino BME/P280
SDA (A4) SDA
SCL (A5) SCL
3.3v VCC
GND GND

예제를 업로드 하고 모니터로 확인하자

 

예제 및 Serial monitor

SensorID 0xFF 가 나오면
bme.begin() => bme.begin(0x76) 으로 수정해주고, SCL, SDA 연결을 확인해주자

sensorID 0x56~0x58 이 BMP280 라고 나오는데 글씨도 작고 구분이 안돼서 놓치기 쉽다…

검색을 하다보니 Adafruit_BME290.cpp (Arduino\libraries\Adafruit_BME280_Library\Adafruit_BME290.cpp)
수정하라는 글을 찾았는데

origin modify
// check if sensor, i.e. the chip ID is correct
  _sensorID = read8(BME280_REGISTER_CHIPID);
  if (_sensorID != 0x60)
    return false;
 // check if sensor, i.e. the chip ID is correct
  _sensorID = read8(BME280_REGISTER_CHIPID);
  if (_sensorID != 0x60 && _sensorID == 0x58){}
  else if(_sensorID == 0x60 && _sensorID != 0x58){}
  else
    return false;

수정하지 말고 BMP280 Lib를 설치하기를 권한다
BME280 가아니고 BMP280 이니 말이다

수정을 했다면..

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

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme; // I2C

unsigned long delayTime;

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

    unsigned status;
    
    // default settings
    // (you can also pass in a Wire library object like &Wire2)
    status = bme.begin(0x76);
    if (!status) {
        Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
        while (1);
    }
    
    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");

    if(bme.sensorID() == 96){ //BME280 0x60 == 96
        Serial.print("Humidity = ");
        Serial.print(bme.readHumidity());
        Serial.println(" %");  
    }

    Serial.println();
}

BMP280 일경우는 습도(Humidity)를 무시하도록 구성해놨다

BMP280 테스트

Library manager

우선 BMP280 lib를 설치하고

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bmp; // I2C

void setup() {
  Serial.begin(9600);
  Serial.println(F("BMP280 test"));

  if (!bmp.begin(0x76)) {
    Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
    while (1);
  }
}

void loop() {
    Serial.print(F("Temperature = "));
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");

    Serial.print(F("Pressure = "));
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");

    Serial.print(F("Approx altitude = "));
    Serial.print(bmp.readAltitude(1013.25)); /* Adjusted to local forecast! */
    Serial.println(" m");

    Serial.println();
    delay(2000);
}

예제를 실행해주면 된다


잘 나오는게 확인된다

이번일로 인해 BME280을 새로 주문했다
아무래도 BMP280만으로는 습도가 없어서 아쉽기 때문이다

참고

반응형

관련글 더보기

댓글 영역