Skocz do zawartości

Dziwna anomalia - biała linia na wyświetlaczu OLED 1,3 128x64px I2C


Igus

Pomocna odpowiedź

Witam,
Mam dość dziwny problem z WYŚWIETLACZem OLED 1,3″ 128X64PX I2C BIAŁY. Na zdjęciu dołączam tą anomalię. Skrótowo: po prawej stronie wyświetlacza przez szerokość 2 px ale po całej wysokości widoczna jest biała linia. Biblioteka której używam to u8g2.
Czy można to jakoś naprawić?

20240406_172326.jpg

Link do komentarza
Share on other sites

(edytowany)

Na Adafriut to samo. Wiec moze to jednak uszkodzenie wyswietlacza? Podeślę jeszcze mój kod:
 

#include <Wire.h> #include <U8g2lib.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> #define BME_SDA D7 #define BME_SCL D6 #define width 5 // Wybierz odpowiednią konfigurację dla swojego wyświetlacza U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ D6, /* data=*/ D7); // Inicjalizacja obiektu czujnika BME280 Adafruit_BME280 bme; void setup() { Wire.begin(BME_SDA, BME_SCL); bme.begin(0x76); // Adres I2C czujnika BME280 u8g2.begin(); } void loop() { u8g2.clearBuffer(); // Wyczyść bufor wyświetlacza // Odczyt danych z czujnika BME280 float temperature = bme.readTemperature(); float humidity = bme.readHumidity(); float pressure = bme.readPressure() / 100.0F; // Wyświetlenie danych na ekranie OLED u8g2.setFont(u8g2_font_10x20_tf); // Większa czcionka u8g2.clear(); u8g2.drawStr(width, 25, "Temperatura:"); u8g2.setCursor(width, 45); u8g2.print(temperature); u8g2.print(" C"); u8g2.sendBuffer(); delay(2000); u8g2.clear(); u8g2.drawStr(width, 25, "Wilgotnosc:"); u8g2.setCursor(width, 45); u8g2.print(humidity); u8g2.print(" %"); u8g2.sendBuffer(); delay(2000); u8g2.clear(); u8g2.drawStr(width, 25, "Cisnienie:"); u8g2.setCursor(width, 45); u8g2.print(pressure); u8g2.print(" hPa"); // Wyświetlenie zmian na ekranie u8g2.sendBuffer(); // Opóźnienie delay(2000); }

 

Edytowano przez Igus
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

#include <Wire.h>
#include <U8g2lib.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WebServer.h>

#define BME_SDA D7
#define BME_SCL D6

#define width 5

// Wybierz odpowiednią konfigurację dla swojego wyświetlacza
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ D6, /* data=*/ D7);

// Inicjalizacja obiektu czujnika BME280
Adafruit_BME280 bme;

const char* ssid = "IgusWiFi";
const char* password = "Fagot2eliot";

ESP8266WebServer server(80);

void handleRoot() {
  float temperature = bme.readTemperature();
  float humidity = bme.readHumidity();
  float pressure = bme.readPressure() / 100.0F;

  String response = "Temperatura: " + String(temperature) + " C\n";
  response += "Wilgotnosc: " + String(humidity) + " %\n";
  response += "Cisnienie: " + String(pressure) + " hPa\n";

  server.send(200, "text/plain", response);
}

void setup() {
  Serial.begin(9600); // Rozpocznij komunikację szeregową
  delay(100); // Poczekaj chwilę na inicjalizację monitora portu szeregowego
  
  Serial.println("Initializing...");

  Wire.begin(BME_SDA, BME_SCL);
  if (!bme.begin(0x76)) {
    Serial.println("Could not find BME280 sensor, check wiring!");
    while (1);
  }

  u8g2.begin();

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  Serial.println("WiFi connected!");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP()); // Wypisz adres IP ESP

  server.on("/", handleRoot);

  server.begin();
  Serial.println("HTTP server started");
}


void loop() {
  if (WiFi.status() != WL_CONNECTED) {
    Serial.println("WiFi connection lost, attempting to reconnect...");
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
      delay(1000);
      Serial.println("Reconnecting to WiFi..");
    }
    Serial.println("WiFi reconnected!");
  }

  u8g2.clearBuffer(); // Wyczyść bufor wyświetlacza

  // Odczyt danych z czujnika BME280
  float temperature = bme.readTemperature();
  float humidity = bme.readHumidity();
  float pressure = bme.readPressure() / 100.0F;

  // Wyświetlenie danych na ekranie OLED
  u8g2.setFont(u8g2_font_10x20_tf); // Większa czcionka
  delay(2000);
  u8g2.clear();
  u8g2.drawStr(width, 25, "Temperatura:");
  u8g2.setCursor(width, 45);
  u8g2.print(temperature);
  u8g2.print(" C");

  u8g2.sendBuffer();

  delay(2000);
  u8g2.clear();
  u8g2.drawStr(width, 25, "Wilgotnosc:");
  u8g2.setCursor(width, 45);
  u8g2.print(humidity);
  u8g2.print(" %");

  u8g2.sendBuffer();

  delay(2000);
  u8g2.clear();
  u8g2.drawStr(width, 25, "Cisnienie:");
  u8g2.setCursor(width, 45);
  u8g2.print(pressure);
  u8g2.print(" hPa");

  // Wyświetlenie zmian na ekranie
  u8g2.sendBuffer();

  // Obsługa klientów HTTP
  server.handleClient();
}

To mój kod do stacji pogodowej (swoją drogą jeśli widzicie jakiś błąd to możecie coś mi pomóc). Na bibliotekę Adafrit nie traciłem czasu (no totalnie nie umiem tego obsłużyć)

Link do komentarza
Share on other sites

Wszystkie u8g2 zamieniasz na display jeśli byś korzystał z biblioteki Adafruit_SSD1306 są jeszcze inne zmiany, ale dużo tego jest w kodzie.

Link do komentarza
Share on other sites

No to jak tak to lubisz to faktycznie najlepiej będzie jak przy tym zostaniesz, ale ja ci wtedy raczej nie pomogę. Za to te różne chaty gpt są świetnymi narzędziami do debugowania kodu, możesz zobaczyć.

Link do komentarza
Share on other sites

(edytowany)

Wydaje mi się, że ten wyświetlacz używa układu SH1106 (a nie SSD1306 ) - jeśli tak, to musisz odpowiednio zmodyfikować konstruktor biblioteki, np.:

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

 

Edytowano przez jand
  • Lubię! 1
Link do komentarza
Share on other sites

Może być tak: 

U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* clock=*/ D6, /* data=*/ D7);

? Mam piny na PCB, gdzie SCL jest na D6 a SDA na D7

Link do komentarza
Share on other sites

O mój boże... Męczę się z tym problemem od 3 miesięcy! I wreszcie!!!! Dziękuje ci z całego serca, jand (po raz kolejny mi pomagasz). Dziękuje, naprawdę dziękuje

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.