I just created a simple clock with 2 128x64 oled display (sh1106) + an RTC clock, using:
lib_deps = olikraus/U8g2
paulstoffregen/Time @ ^1.6
adafruit/RTClib @ 1.13.0
Individually, everything works "fine".
u8g2 + Serial => ok (easy)
2 x u8g2 + Serial => ok (a bit more complex, i2cAddresses need to be left shift or multiply per 2)
RTClib + Serial => ok (easy)
u8g2 + RTClib + Serial => ko
When you add some "logs" (ex: to scan the i2C bus et find the addresses) using Serial.print then it's a nightmare. Displays are stuck, display things from the other one, rtc clock is not running, ... then you add more logs and it's a dead end.
How I figured out this ? I commented most of the code leaving the display of static text, then I uncommented lines after lines to find the guilty one(s): Serial.print !
I looked at @olikraus code (thanks for the lib) and others looking at TwoWire, Serial, and other Print usages.
RTCLib is the easiest (small). Looks correct, but I don't like the usage of Wire and all its static things, making easy for libs to interfere...
u8g2 is really rich and requires really more time. So far I just understand the concept but can't follow and keep all the code in memory.
I haven't yet found why it collapses only when they are all 3 together (hope my unit test are correct).
I also tried other display and RTC libs but I was limited to one screen or other issues...
Conclusion:
Unit tests, Optimistic coding, trust in your code and no Serial.print !
Maybe I don't have a proper usage of Serial, Wire ... but I don't know yet