Werte eines BME280 Sensors auf einem Display anzeigen

In diesem kurzen Beitrag zeige ich dir, wie du die 3 Werte des Sensors BME280 auf einem 0,91 Zoll Display anzeigen kannst. Den Sensor BME280 habe ich bereits im Beitrag Arduino Lektion 44: BME280 Temperatur, Luftfeuchtigkeit und Luftdruck Sensor

BME280 - Temperatur, Luftfeuchtigkeit und Luftdruck Sensor
BME280 – Temperatur, Luftfeuchtigkeit und Luftdruck Sensor

benötigte Bauteile für dieses kleine Projekt

Du benötigst für dieses Projekt:

Besonderheiten bei Arduino Nano Varianten

Wenn du den Arduino Nano verwendest dann solltest du auf den verwendeten Chip (CPU) achten. Es gibt diesen Microcontroller mit einem ATMEL Mega 328P sowie einem ATMEL Mega 168 Chip.

Ein wesentlicher Unterschied dieser beiden Chips sind unter anderem der verfügbare Speicherplatz.  Der ATMEL MEGA 328P hat 32KB Speicher (wovon 2KB für den Bootloader reserviert sind) und der ATMEL MEGA 168 hat nur 16KB Speicher (wovon 2KB für den Bootloader reserviert sind).

Solltes du also versuchen den Quellcode auf einem ATMEL MEGA 168 hoch zuladen so erscheint die Fehlermeldung das der verfügbare Speicherplatz nicht ausreicht.

Der Sketch verwendet 20964 Bytes (146%) des Programmspeicherplatzes. Das Maximum sind 14336 Bytes.text section exceeds available space in board

Globale Variablen verwenden 693 Bytes (67%) des dynamischen Speichers, 331 Bytes für lokale Variablen verbleiben. Das Maximum sind 1024 Bytes.
Der Sketch ist zu groß; unter http://www.arduino.cc/en/Guide/Troubleshooting#size finden sich Hinweise, um die Größe zu verringern.
Fehler beim Kompilieren für das Board Arduino Nano.

Jedoch bei einem ATMEL MEGA 328P reicht dieser Speicher locker aus.

Der Sketch verwendet 20964 Bytes (68%) des Programmspeicherplatzes. Das Maximum sind 30720 Bytes.
Globale Variablen verwenden 693 Bytes (33%) des dynamischen Speichers, 1355 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.

Aufbau

Der Sensor BME280 sowie das 0,91 Zoll Display kommunizieren über SPI, durch die Unterschiedlichen Adressen können diese sich die Pins A4 & A5 „teilen“.

Sensor / Aktor Arduino Nano
BME280  
VIN   3,3V
GND   GND
SCL   analoger Pin A5
SDA   analoger Pin A4
0,91 Zoll Display  
GND   GND
VCC   3,3V
SCL   analoger Pin A5
SDA   analoger Pin A4
 
Sensor BME280 am Arduino Nano mit 0,91 Zoll Display
Sensor BME280 am Arduino Nano mit 0,91 Zoll Display

Quellcode

Für den nachfolgenden Quellcode benötigst du zusätzlich die Bibliothek http://static.cactus.io/downloads/library/bme280/cactus_io_BME280_I2C.zip. Wie du eine Bibliothek in die Arduino IDE installierst habe ich im gleichnamigen Beitrag Arduino IDE, Einbinden einer Bibliothek erklärt.

#include <Wire.h>
#include "cactus_io_BME280_I2C.h"

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#if (SSD1306_LCDHEIGHT != 32)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

BME280_I2C bme(0x76);  // I2C using address 0x76

void setup() {
  Serial.begin(9600);

  //Setup für den BME280 Sensor
  if (!bme.begin()) {
    Serial.println("Es konnte kein BME280 Sensor gefunden werden!");
    Serial.println("Bitte überprüfen Sie die Verkabelung!");
    while (1);
  }
  bme.setTempCal(-1);

  //Setup für das Display
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.display();
  delay(1000);
  display.clearDisplay();

}

void loop() {
  bme.readSensor();
  String tempC = "Temp.:" + String(bme.getTemperature_C()) + "C";
  String humidity = "Humidity:" + String(bme.getHumidity()) + "%";
  String pressure = "Press.:" + String(bme.getPressure_MB()) + " mPa";

  displayText(tempC, humidity, pressure);
}

void displayText(String row1, String row2, String row3) {
  delay(1000);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0, 0);
  display.println(row1);
  display.setCursor(0, 10);
  display.println(row2);
  display.setCursor(0, 20);
  display.println(row3);
  display.display();
  display.clearDisplay();
}

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.