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
benötigte Bauteile für dieses kleine Projekt
Du benötigst für dieses Projekt:
- 1x Microcontroller, zbsp. Arduino Nano 328P*,
- 1x OLED Display 0,91 Zoll*,
- 1x BME280 Sensor*,
- 1x Breadboard, 400 Pin*,
- 8x Breadboardkabel, 20 cm, männlich – männlich*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Besonderheiten bei Arduino Nano Varianten
Wenn du den Arduino Nano verwendest, dann solltest du auf den verwendeten Chip (CPU) achten. Es gibt diesen Mikrocontroller 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 32 KB Speicher (wovon 2 KB für den Bootloader reserviert sind) und der ATMEL MEGA 168 hat nur 16 KB Speicher (wovon 2 KB für den Bootloader reserviert sind).
Solltest du also versuchen den Quellcode auf einem ATMEL MEGA 168 hoch zuladen so erscheint die Fehlermeldung, dass 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 |
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(); }
Hallo Stephan,
wie kann ich die I²C Adresse ändern?
Ich möchte Pin D1 und D2 vom ESP8266 verwenden.