/*
Connecting the BME280 Sensor:
Sensor -> Board
-----------------------------
Vin (Voltage In) -> 3.3V
Gnd (Ground) -> Gnd
SDA (Serial Data) -> A4 on Uno/Pro-Mini, 20 on Mega2560/Due, 2 Leonardo/Pro-Micro
SCK (Serial Clock) -> A5 on Uno/Pro-Mini, 21 on Mega2560/Due, 3 Leonardo/Pro-Micro
==== Includes ==== */
#include <BME280.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Wire.h> // Needed for legacy versions of Arduino.
/* ==== Defines ==== */
#define SERIAL_BAUD 115200
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
/* ==== Global Variables ==== */
BME280 bme; // Default : forced mode, standby time = 1000 ms
// Oversampling = pressure ×1, temperature ×1, humidity ×1, filter off,
bool metric = true;
Adafruit_SSD1306 ssd;
float temp(NAN), hum(NAN), pres(NAN),altitude(NAN);
uint8_t pressureUnit(B001); // unit: B000 = Pa, B001 = hPa, B010 = Hg, B011 = atm, B100 = bar, B101 = torr, B110 = N/m^2, B111 = psi
/* ==== Setup ==== */
void setup() {
Serial.begin(SERIAL_BAUD);
ssd.begin(0x3C); // initialize with the I2C addr 0x3C (for the 128x32)
while(!Serial) {} // Wait
while(!bme.begin()){
Serial.println("Could not find BME280 sensor!");
delay(1000);
}
}
/* ==== Loop ==== */
void loop() {
bme.ReadData(pres, temp, hum, metric, pressureUnit);
ssd.clearDisplay();
ssd.setTextSize(1);
ssd.setTextColor(WHITE);
ssd.setCursor(0,0);
ssd.print("Tem ");
ssd.print(temp);
ssd.println(" "+ String(metric ? 'C' :'F'));
ssd.print("Hum ");
ssd.print(hum);
ssd.println("%");
ssd.print("Pre ");
ssd.print(pres);
ssd.println(" hPa");
ssd.print("Alt ");
altitude = bme.CalculateAltitude(metric);
ssd.print(altitude);
ssd.println(" m");
ssd.display();
delay(600);
}