Zusätzliches I2C Device anschließen, SDA / SCL

Hallo, ich habe ein Heltec ESP32 Projekt am Start, bei dem ich aktuell festhänge.
An dem verwendeten Heltec ESP32 (V3) soll ein weiteres I2C Display angehangen werden. Klingt erst einmal simpel, stellt MICH jedoch vor Probleme. Meine Intention war, für das I2C Display die entsprechenden SDA und SCL GPIOs auf dem Board zu nutzen, die auch das onBoard Display mit Daten versorgen. Nun sind diese jedoch nicht rausgeführt. (Schematisches Diagramm) Vermutlich muss man über Wire SDA und SCL auf vorhandene GPIOS umlenken.

Mein Lösungsansatz wäre Verwendung Wire.h und definieren der "neuen GPIOs)
#define I2C_SDA 42
#define I2C_SCL 45

Passt das bzw. was muss ich weiterhin beachten?

schau dir diesen Thread an

I think I have solved this issue:

I tried a sensor on the default I2C pins, 22 (SCL) & 21 (SDA), and it worked. However, after initializing the OLED display, communication with the sensor on pins 22 & 21 stopped working.

I discovered here that when the OLED is initialized, it tells the Arduino Wire library to start using pins 15 (SCL) and 4 (SDA) for I2C communications.

If I use pins 15, 4 for both the OLED I2C and the sensor I2C, everything works--as long as I initialize the sensor after the OLED display (or, alternatively, initialize the Wire library to use 15, 4 right from the get-go).

So basically, using the OLED library has the side-effect of re-assigning the global I2C pins for the esp32 for any Arduino libraries. The simplest solution is to just go with the flow and use the same pins as the OLED for all I2C communications (assuming your I2C sensor device addresses don't collide with the OLED's).

Danke, JML.

Das war bei der Heltec Wifi Kit (Version 2) auch recht einfach zu realisieren, da die OLED Anschlüsse SDA, SCL und RST herstellerseitig als GPIOs rausgezogen wurden. Dem ist bei der neuen Version 3 nun nicht mehr so, so dass hier die Anschlüsse "umgelenkt" werden müssen.

Könnten Sie die 2 I2C-Busse separat verwenden? Behalten Sie einen für den eingebauten OLED und verwenden Sie den anderen für Ihre Bedürfnisse

Der ESP32 hat eigentlich 2 I2C Bus. Du könntest also den nicht herausgeführten auf einem Bus und auf zwei anderen Pins, einen anderen I2C Bus verwenden.

Du musst halt eine Display Library verwenden, die nicht hardcoded auf den ersten I2C Bus geht sondern der du ein anderes "TwoWire" Interface übergeben kannst.

sehr guter Punkt. Ich denke auch, dass man hier mit Wire bzw. TwoWire arbeiten sollte. Also irgendwie so:

  #include <Arduino.h>
  #include <Wire.h>
  #include <U8g2lib.h> 

// onboard OLED Display vom Heltec selbst (Display 1)
#define DISPLAY_1_I2C_ADDRESS 0x3C    

// großes OLED Display (Display 2)
#define DISPLAY_2_I2C_ADDRESS 0x3C  

// je I2C-Kanal ein Interface definieren
TwoWire I2C_1 = TwoWire(0);
TwoWire I2C_2 = TwoWire(1);

So, und jetzt ist die Frage, wie ich das mit der U8G2 Library zusammen bekomme.

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, reset, / SCL / SDA)

Alternativ per Initialisierung Wire.begin(), Wire1.begin()...

dann machst du zweite
U8G2_SSD1327_SEEED_96X96_1_SW_I2C u8g2_1(U8G2_R0, /* clock=/ SCL, / data=/ SDA, / reset=*/ U8X8_PIN_NONE);

und im setup

u8g2.begin();
u8g2_1.begin();

in loop

//Display 1
u8g2.setCursor(0, 20);
u8g2.print(F("Hello World!"));

//Display 2
u8g2_1.setCursor(0, 20);
u8g2_1.print(F("Hello World!"));

Wen die Lib das zulässt :slight_smile:

Falls Du am Display die I2C Adresse ändern kannst, kannst Du das zweite Display auch am bereits benutzten Bus anschließen. Der Bus kann mehrere Geräte ansteuern, diese müssen nur verschiedene Adressen haben. Eventuell sind die Pullupwiderstände anzugleichen

Grüße Uwe

Kann er eben nicht da die fürs verbaute OLED intern genutzten Pins nicht rausgeführt sind. Schreibt er.

Kannte das Ding nicht und darum hab ich das Problem nicht verstanden.

Grüße Uwe

An U6, pin 18, 19, liegt doch I2C an?
Ist es das, was Du nutzen willst?

Zwi gleiche I2C Adressen.
Alles lesen :laughing:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.