Code für 1,3"-OLED von SSD1306-library zu u8g2lib umschreiben

Hi alle

Ich habe versucht, einen Code für eine Wetterstation (Board: WeMos D1mini, Display: OLED 1,3" SH1106) auf die u8g2lib von Oli Kraus umzuschreiben. Doch irgendwas mach ich falsch.
Das "Hello World" mit der u8g2lib-Library und dem constructor, den ich im neuen Code habe, funktioniert.

Jeder Input ist sehr wilkommen!

Original-Code (SSD1306):

//ATMOSPHERIC PRESSURE CODE BY ViktorDemcak

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Fonts/FreeSans9pt7b.h>

#define SCREEN_WIDTH 128 
#define SCREEN_HEIGHT 64 
#define OLED_RESET 0 
#define BLYNK_PRINT Serial

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_BME280 bme;

unsigned long delayTime;
float temperature;

char auth[] = "Laurin";
char ssid[] = "UPC2E39BE9";
char pass[] = "";

void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // DISPLAY I2C adress - should be the same as mine but if not, go to https://playground.arduino.cc/Main/I2cScanner/, upload it to your D1mini and check the adress.
  bme.begin(0x76);  // BME280 I2C adress should be the same as mine but if not, go to https://playground.arduino.cc/Main/I2cScanner/, upload it to your D1mini and check the adress.
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setFont(&FreeSans9pt7b);
  display.display();

    Blynk.begin(auth, ssid, pass);


}   

void loop() {
  delay(100);
  display.clearDisplay();
  display.setCursor(10,15);
  display.println(bme.readTemperature());
  Blynk.virtualWrite(V1, bme.readTemperature());
  display.setCursor(60,15);
  display.println(" C");
  display.drawCircle(60,6,2, WHITE);
  display.setCursor(10,35);
  display.println(bme.readHumidity());
  Blynk.virtualWrite(V2, bme.readHumidity());
  display.setCursor(60,35);
  display.println("%");
  display.setCursor(10,55);
  display.println(bme.readPressure() / 100);
  Blynk.virtualWrite(V3, bme.readPressure()/100 );
  display.setCursor(80,55);
  display.println("hPa");
  display.display();
}

Neuer Code (u8g2lib)

#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <Adafruit_GFX.h>
//#include <Fonts/FreeSans9pt7b.h>
#include <Arduino.h>
#include <U8g2lib.h>

#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
#define BLYNK_PRINT Serial



U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

Adafruit_BME280 bme;

unsigned long delayTime;
float temperature;

char auth[] = "Laurin";
char ssid[] = "UPC2E39BE9";
char pass[] = "";



void setup(void) {
  Serial.begin(9600);
  u8g2.begin();
  bme.begin(0x76);
  u8g2.setFont(u8g2_font_ncenB08_tr);
  Blynk.begin(auth, ssid, pass);
  u8g2.clearDisplay();
}

void loop(void) {
 
  u8g2.clearBuffer();
  u8g2.clearDisplay();
  u8g2.setCursor(10,15);
  u8g2.println(bme.readTemperature());
  Blynk.virtualWrite(V1, bme.readTemperature());
  u8g2.drawStr(60,15," C");
  u8g2.drawCircle(60,6,2);
  u8g2.setCursor(10,35);
  u8g2.println(bme.readHumidity());
  Blynk.virtualWrite(V2, bme.readHumidity());
  u8g2.drawStr(50,35,"%");
  u8g2.setCursor(10,55);
  u8g2.println(bme.readPressure() / 100);
  Blynk.virtualWrite(V3, bme.readPressure()/100);
  u8g2.drawStr(80,55,"hPa");
  u8g2.sendBuffer();
  delay(1000);
  
  //u8g2.setFont(u8g2_font_ncenB08_tr); // choose a suitable font
  //u8g2.drawStr(0,10,"Hello World!");  // write something to the internal memory
  //u8g2.sendBuffer();          // transfer internal memory to the display
  //delay(1000);  
}

AtmosphericPressureCode.ino (1.82 KB)

sketch_oct06a.ino (1.58 KB)

Setze Deinen Code bitte direkt ins Forum. Benutze dazu Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *). So ist er auch auf portablen Geräten lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Ist gemacht. Danke für den Hinweis Tommy!

Ja, und was genau funktioniert jetzt nicht ?
Wo dürfen wir anfangen zu suchen ?

Das Display zeigt leider nichts.

Die Verbindungen zwischen dem WeMos D1mini, dem BME 280 und dem OLED-Display sind OK. Und der constructor für das Display auch.

Da ich die Library selbst nicht kenne, habe ich keine direkten Tipps.
Ich würde den Aufbau aber von einer funktionierenden Schaltung fortführen.
Also den Testaufbau mit "Hello World" Stück für Stück um die zusätzlichen Funktionen erweitern.

Dann siehst du doch an welcher Stelle es hakt.

Oder zumindest das „Hello World“ so in den anderen Sketch reinstricken, dass das Display „Hello World“ anzeigt. Und dann langsam die Ausgaben umschreiben.

laurin123:
Das "Hello World" mit der u8g2lib-Library und dem constructor, den ich im neuen Code habe, funktioniert.

Dennoch schadet es nicht, den passenden zu nehmen:

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

Moin,

Auch wenn der Post etwas älter ist, hatte ich ein ähnliches Problem. Aber vielleicht hilft es ja:

In deinem void Setup solltest du noch die I2C-Adresse vom Display mit eintragen. Ich hatte bei meinem SSD1306 vor dem u8g2.begin() noch u8g2.setI2CAddress(ADDRESS) hinzugefügt. Denke mal, dass dein Display die Adresse 0x78 hat (steht auf der Rückseite mit einem Widerstand verbunden).

Sollte entsprechend bei dir dann so aussehen:

void setup(void) {
  Serial.begin(9600);
  u8g2.setI2CAddress(0x78);
  u8g2.begin();
  bme.begin(0x76);
  u8g2.setFont(u8g2_font_ncenB08_tr);
  Blynk.begin(auth, ssid, pass);
  u8g2.clearDisplay();
}

Klappt es?

Grüße!

CalliConfused:
Denke mal, dass dein Display die Adresse 0x78 hat (steht auf der Rückseite mit einem Widerstand verbunden).

Nee, der Wert muß durch 2 geteilt werden, also 0x3C.

Das Bit 0, das die Datenrichtung (Schreiben/Lesen) angibt, wird bei den Arduinos nicht mitgezählt bei der Adresse. Der Hersteller des OLEDs kann das natürlich nicht wissen.

kleine Frage hinterher: warum willst Du die Lib eigentlich wechseln, Speicherprobleme?