Weerstation met BME280 sensor en Oled Screen

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

pzem module op Wemos D1 ESP easy

pzem module voorzien van R 1K tussen rx en 5v RX van pzem op D8 TX van pzem op D7 Wemos Config esp easy RX: GPIO-13 (D7) TX: GPIO-15 (D8) ht...