beelogger

Temperatur-/ Luftfeuchte-/ Luftdrucksensor (BME280)

Der BME280 ist ein Temperatur- Luftfeuchte- und Luftdrucksensor. Neben der Messung der Luftfeuchte mit ±3% Genauigkeit und der einer Temperaturmessung von ±1.0°C Genauigkeit stellt er auch einen Messwert für den Luftdruck mit ±1 hPa absoluter Genauigkeit zur Verfügung. Damit kann die Höhe auf ±1 Meter bestimmt werden.

Die Betriebsspannung für den BME280 ist 3,3V. Die von uns verwendete Ausführung GYBMEP verfügt über Pegelwandlung und Spannungsregler und ist für 3,3V und 5V verwendbar. Er ist auch alternativ zum DHT einsetzbar, wird über den I2C Bus angesteuert und belegt damit keine weiteren Ein-/Ausgänge des ATmega. Der BME 280 ist auf zwei verschiedene I2C Adressen (0x76, 0x77) einstellbar. Die Adresse wird auf der Platine über eine Lötbrücke konfiguriert. Damit können zwei BME280 in einem System angeschlossen werden.
Nach der Umstellung mit einem Ohmmeter kontrollieren, dass zwsichem dem VCC/VIN- und GND- Anschluss keine Kurzschluss besteht.

Der Messwert Luftdruck wird in den beelogger-Sketchen unterstützt. Dort ist auch eine Höhenkorrektur des Messwerts parametrierbar.

Bezug

Der Sensor BME280 Ausführung GYBMEP kompatibel mit allen beelogger Varianten!
Bild Bezugsquelle Preis ca. Suchbegriffe* Bemerkungen
eBay 5,00€ BME280  GYBMEP Für den beelogger bitte keine anderen Versionen des BME280 benutzen

*Einkaufstipps

Beschaltung

Ein Betrieb des BME280 Ausführung GYBMEP ist mit allen beeogger-Varianten möglich.

  BME280
3,3V oder 5V VCC
GND GND
A4 / SDA SDA
A5 / SCL SCL

Libraries

<Wire.h> – in der Arduino-Software bereits enthalten
<Adafruit_Sensor.h> https://github.com/adafruit/Adafruit_Sensor
<Adafruit_BME280.h>
https://github.com/adafruit/Adafruit_BME280_Library
Die Versionen für den beelogger sind im Library-Paket enthalten.

Progammcode:

Für den BME280 steht ein Testprogrammcode zur Verfügung. Der BME280 wird im Sketch zyklisch abgefragt und die drei Messwerte über den seriellen Monitor ausgegeben. Der Testprogrammcode zeigt auch, wie Codeanteile zur Ergänzung in die diversen beelogger-Sketche integriert werden kann. Neuere Sketche enthalten die notwendigen Programmanteile bereits.

Hinweis:

Der BME280 kann mit der I2C-Adresse 0x76 oder 0x77 vorkonfiguriert sein.
Die Umstellung der Adresse erfolgt je nach Modul über unterschiedliche Merthoden.
Das hier beschriebene BME280-Modul hat auf einer Seite zwei goldfarbene Lötpads. Zwei sind davon im Layout verbunden.
Zurm Umstellen der I2C-Adresse die Verbindung zwischen den beiden Pads auftrennen und das Mittlere zum anderen Pad mit einer Lötbrücke verbinden.

Wenn nur ein BME280 im System konfiguriert ist, diese Adresse des Sensors in der beelogger_config.h als ‘BME280_1_adresse’ eintragen.

Hier die beiden Möglichkeiten:
#define BME280_1_adresse (0x77)
#define BME280_2_adresse (0x76)

oder:
#define BME280_1_adresse (0x76)
#define BME280_2_adresse (0x77)

 

/*
(C) 2018 R.Schick / Thorsten Gurzan - beelogger.de

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.
*/

// beelogger.de - Arduino Datenlogger für Imker
// Erläuterungen dieses Programmcodes unter https://beelogger.de

#include "Wire.h"

#define Anzahl_Sensoren_BME280 1 // Mögliche Werte: '0','1','2'
#define Korrektur_Luftdruck 0.0 // Korrekturwert um Abweichungen zu offiziellen Wetterstationen auszugleichen 


//----------------------------------------------------------------
// Konfiguration BME280 - Temperatur und Luftfeuchte
//----------------------------------------------------------------
#include "Adafruit_Sensor.h"
#include "Adafruit_BME280.h"

#define BME280_1_adresse (0x76)
#define BME280_2_adresse (0x77)

#define SDA A4 // I2C Daten
#define SCL A5 // I2C Clock

#define SEALEVELPRESSURE_HPA (1013.25f)
//----------------------------------------------------------------


const float No_Val = 999.99;
float Temp[2] = {No_Val, No_Val};
float Feuchte[2] = {No_Val, No_Val};
float L_Druck[2] = {No_Val, No_Val};

// Für beelogger-SMD: Aktivierung der Stromversorgung für Sensoren, Module und DS3231
#define Power_Pin 4


void setup() {
 Serial.begin(9600);
 Serial.println("BME280 Test 13.04.2021");
 Serial.println();
 digitalWrite(Power_Pin, HIGH);
 pinMode(Power_Pin, OUTPUT);
 delay(1000);
}

void loop() {

Serial.println(F("BME280- hole Werte: "));
delay(500);
Sensor_BME280();
for (byte i = 0 ; i < Anzahl_Sensoren_BME280; i++) {
 Serial.print(F("BME280 Nr.: "));
 Serial.println(i + 1);
 if (Temp[i] == No_Val) {
  Serial.println(F("BME280- Fehler "));
 }
 else {
  Serial.print(F("Temperatur: "));
  Serial.println(Temp[i]);
  Serial.print(F("Luftfeuchte: "));
  Serial.println(Feuchte[i]);
  Serial.print(F("Luftdruck: "));
  L_Druck[i] = L_Druck[i] / 100.0;
  L_Druck[i] = L_Druck[i] + Korrektur_Luftdruck;
  Serial.println(L_Druck[i]);
 }
 Serial.flush();
}
delay(2000);
}

//----------------------------------------------------------------
// Funktion BME280 - Temperatur und Luftfeuchte
//----------------------------------------------------------------
void Sensor_BME280() {
if (Anzahl_Sensoren_BME280 > 0) {
 float Temperatur_BME;
 float Luftfeuchte_BME;
 float Luftdruck_BME;
 boolean check; 

 Adafruit_BME280 my_bme;

 for (byte i = 0 ; i < Anzahl_Sensoren_BME280; i++) {
  if ( i == 0) {
   check = my_bme.begin((uint8_t)BME280_1_adresse); // I2C Adresse
  }
  else {
   check = my_bme.begin((uint8_t)BME280_2_adresse); // I2C Adresse
  }
  delay (100); // time to get system ready
  if (check) { // if bme ok
   Temperatur_BME = my_bme.readTemperature();
   Luftfeuchte_BME = my_bme.readHumidity();
   Luftdruck_BME = my_bme.readPressure();
  } 
  else {
   Temperatur_BME = No_Val;
   Luftfeuchte_BME = No_Val;
   Luftdruck_BME = No_Val;
  }
  if (i == 0) { // erster BME
   Temp[0] = Temperatur_BME; // Hier kann die Zuordnung der Sensoren geändert werden
   Feuchte[0] = Luftfeuchte_BME; // Hier kann die Zuordnung der Sensoren geändert werden
   L_Druck[0] = Luftdruck_BME;
  }
  if (i == 1) { // zweiter BME
   Temp[1] = Temperatur_BME; // Hier kann die Zuordnung der Sensoren geändert werden 
   Feuchte[1] = Luftfeuchte_BME; // Hier kann die Zuordnung der Sensoren geändert werden
   L_Druck[1] = Luftdruck_BME;
  }
 }
}
}
//----------------------------------------------------------------

Ausgabe des seriellen Monitors (9600 baud):

BME280 Test

BME280- hole Werte: 
BME280 Nr.: 1
Temperatur: 18.20
Luftfeuchte: 72.30
Luftdruck: 1021.00
BME280 Nr.: 2
Temperatur: 20.30
Luftfeuchte: 71.50
Luftdruck: 1022.00

 

Programmcode herunterladen:

beelogger_BME_Test 01.08.2020