https://smartstore.naver.com/misoparts/products/5734060599
아두이노 BMP280 고도 기압 센서 : 알파마이크로
[알파마이크로] 빠른배송 전자부품전문몰. 아두이노, 라즈베리파이, 모듈, 키트 등 전자부품 최저가 판매
smartstore.naver.com
adafruit_BMP280 라이브러리를 설치하고 나서, example의 bmp280test 스케치를 실행해도 오류가 남. 주소를 못 찾는데, 6개 중 4개 선(VCC, GND, SDA, SCL)만 I2C 방식으로 연결하고, 주소를 0x76으로 설정하고 실행하면 됨. 그리고 현재 내가 사는 곳의 기압을 설정해야 하는데, 구글에서 '부천시 기압'을 검색하면 알려줌. (약간 낮은 지대의 빌라 4층에 센서가 위치해 있음)
#include <Wire.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C
void setup() {
Serial.begin(9600);
while (!Serial) delay(100);
Serial.println("BMP280 test");
unsigned status = bmp.begin(0x76, BMP280_CHIPID);
if (!status) {
Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!");
while (1) delay(10);
}
// Default settings from datasheet
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, // operating mode
Adafruit_BMP280::SAMPLING_X2, // temp. oversampling
Adafruit_BMP280::SAMPLING_X16, // pressure oversampling
Adafruit_BMP280::FILTER_X16, // filtering
Adafruit_BMP280::STANDBY_MS_500); // standby time
}
void loop() {
Serial.print("Temperature : ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure : ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
Serial.print("Approx altitude : ");
Serial.print(bmp.readAltitude(1013.9)); // for Bucheon city (2025.06.12) : 1013.9 (mb)
Serial.println(" m");
Serial.println();
delay(2000);
}
2. 고도를 0.96인치 OLED에 출력하기
보드: Wemos d1 mini clone
라이브러리: Adafruit SSD1306 : 128x64 I2C
주소: 0x3C
#include <Wire.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setup() {
Serial.begin(9600);
while (!Serial) delay(100);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
Serial.println("BMP280 test");
unsigned status = bmp.begin(0x76); //, BMP280_CHIPID);
if (!status) {
Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!");
while (1) delay(10);
}
// Default settings from datasheet
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, // operating mode
Adafruit_BMP280::SAMPLING_X2, // temp. oversampling
Adafruit_BMP280::SAMPLING_X16, // pressure oversampling
Adafruit_BMP280::FILTER_X16, // filtering
Adafruit_BMP280::STANDBY_MS_500); // standby time
}
void loop() {
int temp = bmp.readTemperature();
Serial.print("Temperature : ");
Serial.print(temp);
Serial.println(" *C");
int pressure = bmp.readPressure();
Serial.print("Pressure : ");
Serial.print(pressure);
Serial.println(" Pa");
int altitude = bmp.readAltitude(1013.9); // for Bucheon city (2025.06.12) : 1013.9 (mb)
Serial.print("Approx altitude : ");
Serial.print(altitude);
Serial.println(" m");
Serial.println();
display.clearDisplay();
display.setTextSize(2); // Normal 1:1 pixel scale
display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0); // Start at top-left corner
display.print(temp);
display.println(" *C");
display.print(altitude);
display.println(" m");
display.display();
delay(1000);
}
빌라 4층인데 8M로 나온다. 6층 옥상으로 올라가니 16M로 나오고, 지상으로 내려가니 1M로 나온다. 빌라 계단을 올라보니 대체로 믿을 만하다. 뒷산으로 올라가보니 값이 잘 나온다. 400원짜리 칩인데 제법 쓸만한 녀석이다. 앞으로 등산하면서 가끔 사용해보면 재미있겠다. 습도까지 지원하는 BME-280류를 사용해보고 싶고, 나침반 센서를 부착해서 동서남북(진북)도 가려내고 싶다.
https://smartstore.naver.com/misoparts/products/9945203957
온도 습도 및 공기압 센서 AHT20 + BMP280 고정밀 디지털 온도 습도 공기압 모듈 : 알파마이크로
[알파마이크로] 빠른배송 전자부품전문몰. 아두이노, 라즈베리파이, 모듈, 키트 등 전자부품 최저가 판매
smartstore.naver.com
3. DHT-11 센서를 붙여서 온도,습도를 추가로 뽑아오기
위의 코드에 DHT-11을 붙여서, 온도와 습도를 추가로 뽑아온다.
#include <Wire.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // I2C
#include "DHT.h"
#define DHTPIN D7
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHT11);
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 32, &Wire, -1);
void setup() {
Serial.begin(9600);
while (!Serial) delay(100);
Serial.println("BMP280 test");
unsigned status = bmp.begin(0x76); //, BMP280_CHIPID);
if (!status) {
Serial.println("Could not find a valid BMP280 sensor, check wiring or try a different address!");
while (1) delay(10);
}
// Default settings from datasheet
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, // operating mode
Adafruit_BMP280::SAMPLING_X2, // temp. oversampling
Adafruit_BMP280::SAMPLING_X16, // pressure oversampling
Adafruit_BMP280::FILTER_X16, // filtering
Adafruit_BMP280::STANDBY_MS_500); // standby time
dht.begin();
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.setTextSize(2);
display.setTextColor(SSD1306_WHITE);
}
void loop() {
int temp = bmp.readTemperature();
Serial.print("Temperature : ");
Serial.print(temp);
Serial.println(" *C");
int pressure = bmp.readPressure();
Serial.print("Pressure : ");
Serial.print(pressure);
Serial.println(" Pa");
int altitude = bmp.readAltitude(999.3); // for Bucheon city (2025.06.12) : 1013.9 (mb)
Serial.print("Approx altitude : ");
Serial.print(altitude);
Serial.println(" m");
Serial.println();
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("DHT11: ");
Serial.print(h);
Serial.print("% Temp: ");
Serial.print(t);
Serial.println("°C");
display.clearDisplay();
//display.setTextSize(2); // Normal 1:1 pixel scale
//display.setTextColor(SSD1306_WHITE);
display.setCursor(0,0); // Start at top-left corner
display.print(temp);
display.print(char(247));
display.print("C ");
display.print(altitude);
display.println(" m");
display.print(int(t));
display.print(char(247));
display.print("C ");
display.print(int(h));
display.println("%");
display.display();
delay(1000);
}
OLED의 첫번째 줄이 BMP-280의 값이고, 밑엣줄이 DHT11 센서값이다. DHT11 센서의 온도가 BMP-280보다 0.5도 정도 높고, 전원을 켜면 DHT11은 2초 정도 지나서야 값을 읽어온다. BMP-280은 곧바로 값을 읽어온다. BME-280 계열을 구입하여, 습도까지 함께 출력하도록 하면, 굳이 DHT-11이 필요없어서 효율적이겠다. 빵판 밑의 흰것은 USB 배터리인데, 이렇게 전원을 넣어서 들고다니면, 고도 및 온도, 습도 측정을 야외에서도 편하게 할 수 있다. 뒤쪽에 나침반 센서를 붙여놓았는데, 아직 코드를 작성해서 넣지는 않았다.