Wyświetlacz OLED 1,3" SH1106

zzrr
Posts: 572
Joined: Wed Oct 26, 2022 7:35 pm

Post

Mirek5 wrote: Mon Feb 26, 2024 6:55 am Może problemem jest fragment kodu. U mnie jest taki:
u8x8.setCursor(2,6);
u8x8.setContrast(8);
u8x8.print(getDOW(localTime->tm_wday));
No raczej ten fragment kodu nie jest problemem. .
Nie posiadam takiego OLEDa i nie korzystam z tej biblioteki, więc nie chcę też wprowadzić Cie czymś w błąd.
Jeśli chcesz spróbuj jeszcze wstawić w pętli Setup tą linię. Niestety nie wiem czy to rozwiąże problem.
u8x8.setBusClock(400000); pod u8x8.begin();
Mirek5
Posts: 119
Joined: Wed Oct 20, 2021 7:58 am

Post

zzrr wrote: Mon Feb 26, 2024 11:56 am
Mirek5 wrote: Mon Feb 26, 2024 6:55 am Może problemem jest fragment kodu. U mnie jest taki:
u8x8.setCursor(2,6);
u8x8.setContrast(8);
u8x8.print(getDOW(localTime->tm_wday));
No raczej ten fragment kodu nie jest problemem. .
Nie posiadam takiego OLEDa i nie korzystam z tej biblioteki, więc nie chcę też wprowadzić Cie czymś w błąd.
Jeśli chcesz spróbuj jeszcze wstawić w pętli Setup tą linię. Niestety nie wiem czy to rozwiąże problem.
u8x8.setBusClock(400000); pod u8x8.begin();
Dostałem informację: Do obsługi kontrastu wyświetlacza należy skorzystać z biblioteki U8g2lib.h a następnie skorzystać z funkcji u8g2.setContrast(128); wartość parametru jest z przedziału (0 - 255).
Mam zainstalowaną bibliotekę ale dostaję komunikat:
Compilation error: 'u8g2' was not declared in this scope
To obecny skecz. Gdzie robię błąd?

PIN ESP PIN LCD
GND GND
3,3V Vcc
GPIO5 SCL
GPIO4 SDA

*/
#ifdef ESP8266
#include <ESP8266WiFi.h>
#else
#include <WiFi.h>
#endif
#include <time.h>
#include <U8x8lib.h>
#include <U8g2lib.h>
#include "credentials.h"

const char* ssid = mySSID; //zmień w pliku credentials.h
const char* password = myPASSWORD; //zmień w pliku credentials.h

const char* NTP_SERVER = "pl.pool.ntp.org";
const char* TZ_INFO = "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00"; // sprawdz swoją strefę na https://remotemonitoringsystems.ca/time ... ations.php
tm timeinfo;
time_t now;
long unsigned lastNTPtime;
unsigned long lastEntryTime;

//U8X8_SH1106_128X64_NONAME_SW_I2C u8x8(/* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);
U8X8_SSD1309_128X64_NONAME2_SW_I2C u8x8(/* clock=*/D4, /* data=*/D3, /* reset=*/U8X8_PIN_NONE);

void setup()
{
u8x8.begin();

Serial.begin(115200);
Serial.println("\n\nNTP test czasi\n");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

Serial.print("Laczenie z siecia");
int counter = 0;
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
if (++counter > 100)
ESP.restart();
Serial.print( "." );
}
Serial.println("\nWiFi connected\n\n");

configTime(0, 0, NTP_SERVER);
// See https://github.com/nayarsystems/posix_t ... /zones.csv for Timezone codes for your region
setenv("TZ", TZ_INFO, 1);

if (getNTPtime(10))
{
// wait up to 10sec to sync
}
else
{
Serial.println("Brak czasu");
ESP.restart();
}
showTime(&timeinfo);
lastNTPtime = time(&now);
lastEntryTime = millis();
}

void loop()
{
getNTPtime(10);
showTime(&timeinfo);
delay(1000);
}

bool getNTPtime(int sec)
{
{
uint32_t start = millis();
do
{
time(&now);
localtime_r(&now, &timeinfo);
delay(10);
} while (((millis() - start) <= (1000 * sec)) && (timeinfo.tm_year < (2016 - 1900)));

if (timeinfo.tm_year <= (2016 - 1900))
return false; // the NTP call was not successful

Serial.print("Time Now: ");
Serial.println(now);
}
return true;
}

void showTime(tm *localTime)
{
//print to serial terminal
//Serial.print(localTime->tm_mday);
Serial.print('.');
Serial.print(localTime->tm_mon + 1);
Serial.print('.');
Serial.print(localTime->tm_year - 100);
Serial.print('-');
Serial.print(localTime->tm_hour);
Serial.print(':');
Serial.print(localTime->tm_min);
//Serial.print(':');
//Serial.print(localTime->tm_sec);
Serial.print(" Day of Week ");
Serial.println(localTime->tm_wday);
Serial.println();

//display on OLED
char time_output[30];

//u8x8.setFont(u8x8_font_courB18_2x3_f);
u8x8.setFont(u8x8_font_courB18_2x3_f);
//u8x8.setCursor(03,0);
//u8x8.setCursor(3,0);
u8x8.setCursor(3,0);
//sprintf(time_output, "%02d:%02d:%02d", localTime->tm_hour, localTime->tm_min, localTime->tm_sec);
sprintf(time_output, "%02d:%02d", localTime->tm_hour, localTime->tm_min);
//sprintf(time_output, "%02d:%02d:%02d", localTime->tm_hour, localTime->tm_min);
u8x8.print(time_output);

//u8x8.setFont(u8x8_font_8x13B_1x2_f);
u8x8.setFont(u8x8_font_8x13_1x2_f);
u8x8.setCursor(3,4);
//sprintf(time_output, "%02d/%02d/%02d", localTime->tm_mday, localTime->tm_mon + 1, localTime->tm_year - 100);
sprintf(time_output, "%02d.%02d.%02d", localTime->tm_mday, localTime->tm_mon + 1, localTime->tm_year + 1900);
u8x8.print(time_output);

u8x8.setCursor(2,6);
//u8x8.setContrast(8);
u8g2.setContrast(100);
u8x8.print(getDOW(localTime->tm_wday));
}

char * getDOW(uint8_t tm_wday)
{
switch(tm_wday)
{
case 1:
return "Poniedzialek";
break;

case 2:
return " Wtorek ";
break;

case 3:
return " Sroda ";
break;

case 4:
return " Czwartek ";
break;

case 5:
return " Piatek ";
break;

case 6:
return " Sobota ";
break;

case 7:
return " Niedziela ";
break;

default:
return " Error ";
break;
}
}
lukasz06
Posts: 1426
Joined: Sun Jul 17, 2022 6:53 pm

Post

Kiedyś pisałem do Krycha88 żeby na to spojrzał, ale też nie miał tego wyświetlacza. Może warto zapytać ponownie 😉
zzrr
Posts: 572
Joined: Wed Oct 26, 2022 7:35 pm

Post

Mirek5 wrote: Mon Feb 26, 2024 12:02 pm
Dostałem informację: Do obsługi kontrastu wyświetlacza należy skorzystać z biblioteki U8g2lib.h a następnie skorzystać z funkcji u8g2.setContrast(128); wartość parametru jest z przedziału (0 - 255).
Ty masz U8g2lib... a wpis w Twoim kodzie który Ci podawałem u8x8.setContrast jest prawidłowy w odniesieniu do tego jak był napisany już kod Twój wczesniej.
Zapis w twoim kodzie U8X8_SSD1309_128X64_NONAME2_SW_I2C u8x8(.... tworzy obiekt u8x8 z klasy u8x8lib.h w bibliotece u8g2lib.
Możesz sobie też wpisać u8g2.setContrast tylko najpierw musiałbyś w kodzie dodać #include <U8g2lib.h> ale to i tak da w efekcie to samo.
A tak na marginesie to ta biblioteka mi się nie podoba jak na razie :D ;)
Gdzieś mi się przewinęła też informacja że ta funkcja tez może mieć wpływ na wyświetlanie. Ale zastanawiałem się czy Ci takie informacje nie pewne podrzucać. u8x8.setPowerSave(0); funkcja może dostać parametr 1 albo 0. Podobno 0 to max jasność a 1 przyciemniony. Możesz sobie sprawdzić to jak chcesz.
A przepraszam bardzo coś jeszcze...
Gdzie jest w kodzie ta pętla którą Ci podałem....
if (LocalDay != localTime->tm_wday)
{
u8x8.clearLine(6);
u8x8.clearLine(7);
u8x8.setCursor(2, 6);
u8x8.print(getDOW(localTime->tm_wday));
LocalDay = localTime->tm_wday;
}
w celu nie nakładania się na siebie wyrazów? drugiej opcji ze spacjami którą Ci klew proponował też nie widzę. No i gdzie tu jest przez tyle czasu cokolwiek wspólnego z SUPLĄ? ;) Pierwsze upomnienie, nie odrobiona praca domowa :lol:
Jeszcze to spróbuj podmienić U8X8_SSD1309_128X64_NONAME0_SW_I2C u8x8(/* clock=*/D4, /* data=*/D3, /* reset=*/U8X8_PIN_NONE); NONAME2 zamienione na NONAME0.
Mirek5
Posts: 119
Joined: Wed Oct 20, 2021 7:58 am

Post

zzrr wrote: Mon Feb 26, 2024 1:33 pm
Mirek5 wrote: Mon Feb 26, 2024 12:02 pm
Dostałem informację: Do obsługi kontrastu wyświetlacza należy skorzystać z biblioteki U8g2lib.h a następnie skorzystać z funkcji u8g2.setContrast(128); wartość parametru jest z przedziału (0 - 255).
Ty masz U8g2lib... a wpis w Twoim kodzie który Ci podawałem u8x8.setContrast jest prawidłowy w odniesieniu do tego jak był napisany już kod Twój wczesniej.
Zapis w twoim kodzie U8X8_SSD1309_128X64_NONAME2_SW_I2C u8x8(.... tworzy obiekt u8x8 z klasy u8x8lib.h w bibliotece u8g2lib.
Możesz sobie też wpisać u8g2.setContrast tylko najpierw musiałbyś w kodzie dodać #include <U8g2lib.h> ale to i tak da w efekcie to samo.
A tak na marginesie to ta biblioteka mi się nie podoba jak na razie :D ;)
Gdzieś mi się przewinęła też informacja że ta funkcja tez może mieć wpływ na wyświetlanie. Ale zastanawiałem się czy Ci takie informacje nie pewne podrzucać. u8x8.setPowerSave(0); funkcja może dostać parametr 1 albo 0. Podobno 0 to max jasność a 1 przyciemniony. Możesz sobie sprawdzić to jak chcesz.
A przepraszam bardzo coś jeszcze...
Gdzie jest w kodzie ta pętla którą Ci podałem....
if (LocalDay != localTime->tm_wday)
{
u8x8.clearLine(6);
u8x8.clearLine(7);
u8x8.setCursor(2, 6);
u8x8.print(getDOW(localTime->tm_wday));
LocalDay = localTime->tm_wday;
}
w celu nie nakładania się na siebie wyrazów? drugiej opcji ze spacjami którą Ci klew proponował też nie widzę. No i gdzie tu jest przez tyle czasu cokolwiek wspólnego z SUPLĄ? ;) Pierwsze upomnienie, nie odrobiona praca domowa :lol:
Jeszcze to spróbuj podmienić U8X8_SSD1309_128X64_NONAME0_SW_I2C u8x8(/* clock=*/D4, /* data=*/D3, /* reset=*/U8X8_PIN_NONE); NONAME2 zamienione na NONAME0.
Dostałem takie informacje. Nie wiem gdzie co powpisywać do tego skecza.

Przykładowy kod zamieszczam poniżej:

#include &lt;U8g2lib.h&gt;
#include &lt;Wire.h&gt;

#define OLED_ADDRESS 0x3C // Adres I2C wyświetlacza OLED

// Inicjalizacja obiektu wyświetlacza
U8G2_SSD1309_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);

void setup() {
// Inicjalizacja komunikacji I2C
Wire.begin();

// Inicjalizacja wyświetlacza
u8g2.begin();

// Ustawienie kontrastu na połowę maksymalnej wartości
u8g2.setContrast(128);

// Wypełnienie ekranu na biało
u8g2.setDrawColor(1); // Ustawienie koloru rysowania na biały
u8g2.drawBox(0, 0, 128, 64); // Narysowanie prostokąta, który wypełni cały ekran
u8g2.sendBuffer(); // Wysłanie bufora do wyświetlacza
}

void loop() {

}
zzrr
Posts: 572
Joined: Wed Oct 26, 2022 7:35 pm

Post

@Mirek5 Ty nie komplikuj... ;)
Ustal najpierw czy OLED obsługuje HW a może po prostu trzeba SW ale inne. Dlatego podałem Ci wyżej przykład. Może to wystarczy żeby Ci działał poprawnie ten kontrast. A jak nie zadziała to wtedy szukaj dalej.
Tą linię poniżej po prostu podmieniaj
U8X8_SSD1309_128X64_NONAME2_SW_I2C u8x8(/* clock=*/D4, /* data=*/D3, /* reset=*/U8X8_PIN_NONE);
Podam Ci z biblioteki kilka przykładowych wpisów które po prostu sprawdź
U8X8_SSD1309_128X64_NONAME2_HW_I2C u8x8(/* reset=*/U8X8_PIN_NONE, /* clock=*/D4, /* data=*/D3 );
U8X8_SSD1309_128X64_NONAME0_SW_I2C u8x8(/* clock=*/D4, /* data=*/D3, /* reset=*/U8X8_PIN_NONE);
U8X8_SSD1309_128X64_NONAME0_HW_I2C u8x8(/* reset=*/U8X8_PIN_NONE, /* clock=*/D4, /* data=*/D3);
Mirek5
Posts: 119
Joined: Wed Oct 20, 2021 7:58 am

Post

zzrr wrote: Mon Feb 26, 2024 11:57 pm @Mirek5 Ty nie komplikuj... ;)
Ustal najpierw czy OLED obsługuje HW a może po prostu trzeba SW ale inne. Dlatego podałem Ci wyżej przykład. Może to wystarczy żeby Ci działał poprawnie ten kontrast. A jak nie zadziała to wtedy szukaj dalej.
Tą linię poniżej po prostu podmieniaj
U8X8_SSD1309_128X64_NONAME2_SW_I2C u8x8(/* clock=*/D4, /* data=*/D3, /* reset=*/U8X8_PIN_NONE);
Podam Ci z biblioteki kilka przykładowych wpisów które po prostu sprawdź
U8X8_SSD1309_128X64_NONAME2_HW_I2C u8x8(/* reset=*/U8X8_PIN_NONE, /* clock=*/D4, /* data=*/D3 );
U8X8_SSD1309_128X64_NONAME0_SW_I2C u8x8(/* clock=*/D4, /* data=*/D3, /* reset=*/U8X8_PIN_NONE);
U8X8_SSD1309_128X64_NONAME0_HW_I2C u8x8(/* reset=*/U8X8_PIN_NONE, /* clock=*/D4, /* data=*/D3);
Przykro mi ale żadna z tych trzech propozycji nie "ruszyła". Nie było żadnego błędu w kompilacji, a zmiana wartości kontrastu w linii
u8x8.setContrast(10);
nie działała.
Zdaję sobie sprawę, że zawracam Ci "gitarę", ale starzy ludzie tak mają.
zzrr
Posts: 572
Joined: Wed Oct 26, 2022 7:35 pm

Post

Mirek5 wrote: Tue Feb 27, 2024 6:17 am ...Zdaję sobie sprawę, że zawracam Ci "gitarę", ale starzy ludzie tak mają.
Spokojnie... nie zawracasz żadnej gitary. Przecież jak ktoś nie chce to nie odpowiada. Nie jestem specjalistą od OLEDów ale coś tam próbowałem podpowiedzieć. "Wdepnąłem" w temat to tez chciałbym żeby Ci to poszło do przodu. Nie posiadam takiego OLEDA bo bylo by moze łatwiej. Dobrze by było jak by ktoś kto takiego posiada popróbował albo sie podzielił.
lukasz06
Posts: 1426
Joined: Sun Jul 17, 2022 6:53 pm

Post

Ja mam, ale termostat z GG na nim działa więc nie posprawdzam. Funkcja ściemnia była by super, bo w nocy daje po oczach. 😉
Mirek5
Posts: 119
Joined: Wed Oct 20, 2021 7:58 am

Post

lukasz06 wrote: Tue Feb 27, 2024 7:53 am Ja mam, ale termostat z GG na nim działa więc nie posprawdzam. Funkcja ściemnia była by super, bo w nocy daje po oczach. 😉
No co Ty - wyświetlacz OLED 2,42" SSD1309 128x64 obsługujesz softem wygenerowanym w GG? W GG jest opcja wybrania takiego wyświetlacza do skompilowania?

Return to “Pomoc”