BME 280 und 16x2 Display über I2C

Hallo zusammen,

gemäß Schaltbild im Anhang möchte ich ein 16x2 Display und einen BME280-Sensor über den I2C-Bus betreiben. Da der Sensor nur mit 3,3V arbeitet, habe ich zusätzlich einen Level-Shifter verbaut und gemäß Anleitung angeschlossen (siehe Foto im Anhang).

Verwendet wird dieser BME 280: Link BME 280 und dieser Level-Shifter: Link Level-Shifter

Hier mein Code:

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

LiquidCrystal_I2C lcd(0x3F,16,2);
BME280_I2C bme;              // I2C using default 0x77 


void setup() {
Wire.begin();
bme.begin();
lcd.init(); 
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Wetterstation");
delay(3000);
lcd.clear();
if (!bme.begin()) {
lcd.print("No BME280!");
while (1); 
}
}


void loop() {
    bme.readSensor();
    lcd.print("H:");lcd.print(bme.getPressure_MB());    // Pressure in millibars
    delay(2000);
}

Bei der Abfrage mit dem I2C Scanner werden beide Geräte korrekt erkannt. Betreibe ich nur den Sensor mit Level-Shifter (über den SerialMonitor), läuft dieser einwandfrei. Verwende ich jedoch gleichzeitig Sensor und Display funktioniert letzteres, aber der Sensor wird nicht erkannt und somit bleibe ich immer mit der Meldung "No BME280" im Display hängen.

Hat jemand eine Lösung?

[Bericht] I2C Pullup

Was heißt das jetzt genau für mich? Muss ich mir Sensoren ohne Pullup-Widerstände kaufen? Oder ist das Projekt in der von mir angedachten Form noch zu retten?

gotti91:
Was heißt das jetzt genau für mich? Muss ich mir Sensoren ohne Pullup-Widerstände kaufen? Oder ist das Projekt in der von mir angedachten Form noch zu retten?

Du musst darauf achten, das der I2C-Bus mit Pullup-Widerständen abgeschlossen ist.

Beschreibung

Habe auf der 3,3V Seite (BME 280) mal zwei 2K-Ohm Widerstände verwendet, damit läuft der Sensor alleine(!) nach wie vor gut.

Schalte ich auf der 5V Seite das Display dazu (mit zwei 10K-Ohm-Widerständen) besteht wieder genau das gleiche Problem. Das Display läuft einwandfrei, zeigt "No BME 280" an und im I2C-Scanner finde ich nur das Display. Wenn ich das richtig verstanden habe, braucht jedes Logik-Level doch seine eigenen Pull-Ups?

Gibt es noch irgendwas, das ich nicht beachtet haben könnte?

Ich weiss es passt hilft dir jetzt nicht weiter, aber:

Der BME280 von ebay

oder

Der BME280 von Watterott

Sind an 5V zu betreiben. Der ebay Sensor ist super klein. Der von Watterott zwar groß, aber dafür meiner meinung nach genauer. Preislich ist er auch nicht anders wie deiner, sogar günstiger, weil man ja keinen Levelshifter braucht.

Nur so als tipp, falls der Thread zu keinem ergebniss führt.

Die Pullups auf der 3,3 Volt Seite brauchst du nicht.
Hast du den Levelshifter evtl. falsch herum angeschlossen ?

In einem solchen Stadium halte ich Ferndiagnosen für nicht leicht.

Ich würde mir mit einem Oszi die Signale anschauen.
Und dann, wenn die gut aussehen, mit einem LA auswerten.

So findet man dann doch schon auch gemeine Bugs.

Ein bisschen komplizierter, gehts auch mit einem Multimeter und Testprogramm.
Aber leider fehlt einem dann die dynamische Komponente (Flankenform)

Die Pull-Ups auf der 3,3V-Seite habe ich entfernt, immer noch das gleiche Problem. Den Levelshifter habe ich nochmal geprüft, war die ganze Zeit richtig herum ... Habe die Kanäle 1 und 2 für SDA bzw. SDL benutzt ... Hat es vielleicht etwas mit dem Level-Shifter per se zu tun, den ich gekauft habe (Link siehe oben).

Ein Oszi habe ich leider grade nicht zur Hand ..

Fehlt vielleicht noch irgendwas im Code? Eine Bibliothek vergessen oder sowas?

Ich würde es mal mit dieser Library testen:

Da sieht auch die Sensor-Abfrage ganz anders aus.

Die library ist ganz gut, die verwende ich auch. Nur beim China BME muss die I2C Adresse in der Adafruit_BME280.h auf 0x76 anstelle 0x77 gestellt werden.

Das Problem hat sich erledigt. Es lag tatsächlich an der Bibliothek: Mit der Adafruit library funktioniert das System aus Sensor und Display tadellos.

Interessanterweise ist dann weder level-Shifter (!!!) noch Pullups notwendig, der Sensor kann sogar (wie das Display) mit 5V Versorgungs- und Logikspannung betrieben werden, ohne dass dieses Mal eine Fehlermeldung auftritt. Komisch nur, dass der Hersteller eine Logikspannung von 3,3V angibt ... Oder kann der Sensor bei der Verwendung mit 5V dauerhaft beschädigt werden?

Vielen Dank für diesen "heißen Tipp"!!!

Hallo,
Dein Verkäufer, wie auch Bosch geben für den Sensor max. 3,6v an.
Einen Betrieb mit 5v am Sensor halte ich für zweifelhaft.
Messe doch einmal die Versorgungsspannung des Sensor- direkt am Sensor.
Gruß und Spaß
Andreas

gotti91:
Interessanterweise ist dann weder level-Shifter (!!!) noch Pullups notwendig, der Sensor kann sogar (wie das Display) mit 5V Versorgungs- und Logikspannung betrieben werden, ohne dass dieses Mal eine Fehlermeldung auftritt. Komisch nur, dass der Hersteller eine Logikspannung von 3,3V angibt ... Oder kann der Sensor bei der Verwendung mit 5V dauerhaft beschädigt werden?

Du solltest einfach mal den Angaben des Herstellers vertrauen.
Kurzzeitig kann es mit 5 Volt funktionieren.

Auch die Pullups sind wichtig, auch hier kann es kurzzeitig ohne funktionieren.
Je nach Levelshifter können die Pullups evtl. sogar entfallen.
Da solltest du dir die Schaltung des Levelshifter aber genau ansehen.

Also bitte in Zukunft die Datenblätter und Beschreibungen genauer lesen.
Die werden nicht umsonst hergestellt.