Weerstation met BME280 sensor en Oled Screen
Bedoeling van dit project :
Hoe lezen we de BME sensor uit en hoe zetten we deze gegevens op een Oled scherm ! Alles werkt via de I2C bus
Wat we nodig hebben
I2C Oled scherm
Bosch BME I2C Temp/Vocht/Press
Arduino Nano
Voor zo'n 10€ zijn we gesteld !
Link met handige uitleg over het gebruik van de Oles display
De code
--------------------------------------------------------------------------------------------------------------------
/*
* Arduino with SSD1306 OLED display (128x64 Pixel) and BME280 sensor.
* BME280 is barometric pressure, temperature and humidity sensor.
*/
#include <Wire.h> // include Arduino wire library (required for I2C devices)
#include <Adafruit_GFX.h> // include Adafruit graphics library
#include <Adafruit_SSD1306.h> // include Adafruit SSD1306 OLED display driver
#include <Adafruit_BME280.h> // include Adafruit BME280 sensor library
#define OLED_RESET 4 // define display reset pin
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define SEALEVELPRESSURE_HPA (1013.25)
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
// define device I2C address: 0x76 or 0x77 (0x77 is library default address)
#define BME280_I2C_ADDRESS 0x76
Adafruit_BME280 bme280; // initialize Adafruit BME280 library
void setup(void)
{
delay(1000); // wait a second
// initialize the SSD1306 OLED display with I2C address = 0x3D
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
// clear the display buffer.
display.clearDisplay();
display.setTextSize(1); // text size = 1
display.setTextColor(WHITE, BLACK); // set text color to white and black background
display.setTextSize(1);
display.invertDisplay(true);
display.setTextColor(WHITE);
display.setCursor(20, 4);
display.println("Arduino Projects");
display.drawRoundRect(0, 0, 128, 16, 4, WHITE); //drawRect(x, y, width, height, color)
display.setCursor(20, 20);
display.setTextSize(2);
display.setCursor(20, 20);
display.println("By");
display.setTextSize(3);
display.setCursor(10, 40);
display.println("Spike");
// initialize the BME280 sensor
if( bme280.begin(BME280_I2C_ADDRESS) == 0 )
{ // connection error or device address wrong!
display.setCursor(34, 23);
display.print("Connection");
display.setCursor(49, 33);
display.print("Error");
display.display(); // update the display
while(1); // stay here
}
display.display(); // update the display
delay(2000);
display.invertDisplay(false);
}
char _buffer[12];
void loop()
{
display.clearDisplay();
display.setTextColor(WHITE, BLACK);
display.setTextSize(1);
// read temperature, humidity and pressure from the BME280 sensor
float temp = bme280.readTemperature(); // get temperature in degree Celsius
float humi = bme280.readHumidity(); // get humidity in rH%
float pres = bme280.readPressure(); // get pressure in Pa
float alt = bme280.readAltitude((SEALEVELPRESSURE_HPA));
display.setCursor(30, 3);
// Display static text
display.println("Weer Station");
// display.drawRect(10, 10, 50, 30, WHITE); //drawRect(x, y, width, height, color)
display.drawRoundRect(0, 0, 120, 16, 4, WHITE);
// print all data on the display
display.setCursor(0, 20);
display.print("TEMP:");
display.setCursor(50, 20);
display.print(temp);
// print degree symbols ( ° )
display.drawRect(85, 20, 3, 3, WHITE);
display.setCursor(0, 30);
display.print("HUMI:");
display.setCursor(50, 30);
display.print(humi);
display.print(" %");
display.setCursor(0, 40);
display.print("Luchtd:");
display.setCursor(50, 40);
display.print((pres/100));
display.print(" hPa");
display.setCursor(0, 50);
display.print("Alt");
display.setCursor(50, 50);
display.print((alt));
display.print(" m");
// update the display
display.display();
delay(3000); // wait a second
//Temp weergave
display.clearDisplay();
display.setCursor(20, 4);
// Display static text
display.println("Temperatuur");
display.drawRoundRect(0, 0, 120, 16, 4, WHITE);
display.setTextSize(2); // text size = 1
display.setCursor(0, 20);
display.print("TEMP:");
display.setCursor(20, 45);
display.print(temp);
display.drawRect(90, 45, 5, 5, WHITE);//graden symbool
display.display();
delay(3000); // wait a second
//Humi weergave
display.clearDisplay();
display.setCursor(20, 4);
display.setTextSize(1);
display.println("Rel Vochtigheid");
display.drawRoundRect(0, 0, 120, 16, 4, WHITE);
display.setTextSize(2); // text size = 1
display.setCursor(0, 20);
display.print("Rel Vocht:");
display.setCursor(20, 45);
display.print(humi);
display.print(" %");
display.display();
delay(3000); // wait a second
//Luchtdruk weergave
display.clearDisplay();
display.setCursor(20, 4);
display.setTextSize(1);
display.println("Luchtdruk");
display.drawRoundRect(0, 0, 120, 16, 4, WHITE);
display.setTextSize(2);
display.setCursor(0, 20);
display.print("Luchtdruk:");
display.setCursor(0, 45);
display.print(pres/100);
display.print("hPa");
display.display();
delay(3000); // wait a second
// Big screen temp
// display.setTextColor(BLACK,WHITE);
//display.fillRoundRect(0, 0, 128, 96, 2, WHITE);
display.invertDisplay(true);
display.clearDisplay();
display.display();
display.setCursor(30, 4);
display.setTextSize(1);
display.println("Temperatuur");
display.setTextSize(3);
display.setCursor(10, 30);
display.println(temp);
// print degree symbols ( ° )
display.drawRect(105, 30, 5, 5, WHITE);
display.display();
delay (2000);
// Big screen vocht
display.clearDisplay();
display.setCursor(30, 4);
display.setTextSize(1);
display.println("Vochtigheid %");
display.setTextSize(3);
display.setCursor(10, 30);
display.println(humi);
display.display();
delay(2000);
// Big screen luchtdruk
display.clearDisplay();
display.setCursor(20, 4);
display.setTextSize(1);
display.println("Luchtdruk in hPa");
display.setTextSize(3);
display.setCursor(0, 30);
display.println(pres/100);
display.display();
delay(2000);
display.invertDisplay(false);
}
// end of code.
Geen opmerkingen:
Een reactie posten