Skocz do zawartości

ESP32 e-ink polskie znaki


marcusp

Pomocna odpowiedź

Witam,

w ramach nauki obsługi wyświetlaczy z ESP32 złożyłem stację pogodową z wyświetlaczem e-ink 7,5" 800x480 według https://github.com/G6EJD/ESP32-e-Paper-Weather-Display 

Po pokonaniu drobnych problemów wszystko działa. Chciałbym jednak uzyskać polskie czcionki na ekranie. W projekcie jest plik z napisami po polsku, jednak użyte fonty nie zawierają polskich znaków - w wyświetlanych napisach polskie znaki są "wycięte" czyli np. zamiast "Śnieg" widzę "nieg".

Próbowałem użyć fontu unifont z polskimi znakami ze strony ftp://ftp.gnu.org/gnu/unifont/ - efekt jest taki, że napisy z użyciem tego fontu w ogóle się nie wyświetlają.

Konwertowałem czcionki .ttf na stronie https://rop.nl/truetype2gfx/  - ładowałem swoją czcionkę, w pole demo text wpisywałem "ąęś" i na wirtualnym wyświetlaczu widziałem polskie znaki. pobrałem pliki .h dodałem do projektu, skompilowało się bez błędów, ale efekt ten co poprzednio - napisy z użyciem tego fontu nie wyświetlają się.

Co robię źle i jak wyświetlić napisy z polskimi literami na tym wyświetlaczu?

Napisy w języku polskim są z pliku lang-pl.h i pobierane z internetu z openweathermap.org

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

- probuję zrobić to samo co kolega marcusp ale na ePapierze 2.9 ".

korzystam z biblioteki U8g2_for_Adafruit_GFX.h i podaje polskie znaki w ten sposób

const char HelloWorld[] = "\Ż\ó\łw \Środa Pi\ątek";

- fonty to naturalnie u8g2_font_unifont_t_polish.

- jak można inaczej podawać polski tekst ? 

- tekst jest statyczny czyli chyba nie ma problemu z tymi "\"

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

- backslashe zlikwidowane, teraz koduję do formatu U8G2, pośrednio poprzez pełny Unikod. 

- poniżej ścieżka 

- w programie Fony wybieram interesujący mnie ttf i jego rozmiar, export do pliku *.bdf.

- import do programu FontForge, przekodowanie na ISO 10646 (pełny Unikod) , generuj fonty, zapisz do *.bdf.

- bdfconv zamień na plik z fontami kodowanymi pod U8G2, czyli przykladowo:

bdfconv -f 1 -m "32-400" -n Tahoma22 -o myTahoma22.c Tahoma22-unicode-47.bdf

- poniżej jak to wygląda na ePapier 2.9"

 

20220304_120407.jpg

20220304_120547.jpg

Edytowano przez 99teki
  • Lubię! 2
Link do komentarza
Share on other sites

w programie tak jest ustawione

const char* Timezone    = "CET-1CEST,M3.5.0,M10.5.0/3";		 // Warsaw PL
..
int   gmtOffset_sec     = 3600;    	// UK normal time is GMT
int  daylightOffset_sec = 3600; 	// In the UK DST is +1hr or 3600-secs  

- przy pierwszym obiegu pętli jest dobrze, potem układ się usypia i kolejne przejście daje godzinę do tyłu.

- że wyświetla sobotę zamiast piątku to mały problem w tablicach.

- myslałem że sobie poradzę w ten sposób

if(esp_sleep_get_wakeup_cause() == ESP_SLEEP_WAKEUP_TIMER) {
   configTime(gmtOffset_sec, daylightOffset_sec, NULL);
  }

- ale cos to nie zadziałało.

- poszukam jeszcze w programie albo przejdę na esp 32 Time bibliotekę od esp32 rtc.

- tylko wtedy generator zegara RTC idzie na oscylatorze 150 kHz i potrafi się spóżniać 5% na dobę. 

Edytowano przez 99teki
Link do komentarza
Share on other sites

- problem rozwiązany a raczej znaleziony na sieci.

- teraz RTC nie opóżnia się o dwie godziny, dalej pozostaje problem dokładności zegara w trybie sleepdown.

- TZ zone działa poprawnie, nawet z wyłączonym Wi-Fi.

// 19.03.2022 add bootCount
// file: Arduino\_utilsy\esp32RTC_NTP_by_rothschopf2.ino
/*
NTP TZ DST - bare minimum
NetWork Time Protocol - Time Zone - Daylight Saving Time

Our target for this MINI sketch is:
- get the SNTP request running
- set the timezone
- (implicit) respect daylight saving time
- how to "read" time to be printed to Serial.Monitor

This example is a stripped down version of the NTP-TZ-DST (v2) from the ESP8266
and contains some #precompiler defines to make it working for
- ESP32 core 1.0.5
- ESP8266 core 2.7.4

by noiasca
2021-03-28
*/
			
	//#include <credentials.h> 						// that's just for my unknown credentials ;-)
			
#ifndef STASSID
#define STASSID "aaa" 									// set your SSID
#define STAPSK "bcbccb" 								// set your wifi password
#endif
			
	// choose the best fitting NTP server pool for your country
#define MY_NTP_SERVER "pl.pool.ntp.org"
			
	// choose your time zone from this list
	// https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
#define MY_TZ "CET-1CEST,M3.5.0/02,M10.5.0/03"		// Warszawa, Berlin
#define uS_TO_S_FACTOR 1000000ULL  								// Conversion factor for micro seconds to seconds 
#define TIME_TO_SLEEP  300        								// Time ESP32 will go to sleep (in seconds) 
		
RTC_DATA_ATTR int 		bootCount = 0;			
	// --- Necessary Includes ----
#ifdef ARDUINO_ARCH_ESP32
#include <WiFi.h>  									// we need wifi to get internet access
#endif
#ifdef ARDUINO_ARCH_ESP8266
#include <ESP8266WiFi.h> 
#endif
#include <time.h> 									// time() ctime()
				
	// ------- Globals -------------
time_t now;    											// this is the epoch
tm tm;         											// the structure tm holds time information in a more convient way
		
	// ------------------	
void showTime() {
 time(&now); // read the current time
 localtime_r(&now, &tm); // update the structure tm with the current time
 Serial.print("year:");
 Serial.print(tm.tm_year + 1900); // years since 1900
 Serial.print("\tmonth:");
 Serial.print(tm.tm_mon + 1); // January = 0 (!)
 Serial.print("\tday:");
 Serial.print(tm.tm_mday); // day of month
 Serial.print("\thour:");
 Serial.print(tm.tm_hour); // hours since midnight 0-23
 Serial.print("\tmin:");
 Serial.print(tm.tm_min); // minutes after the hour 0-59
 Serial.print("\tsec:");
 Serial.print(tm.tm_sec); // seconds after the minute 0-61*
 Serial.print("\twday");
 Serial.print(tm.tm_wday); // days since Sunday 0-6
 if (tm.tm_isdst == 1) // Daylight Saving Time flag
  Serial.print("\tDST");
 else
  Serial.print("\tstandard");
 Serial.println();
 Serial.println(&tm, "%A, %B %d %Y %H:%M:%S");
}
		
	// -----------
void sleep(){
  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  Serial.println(" Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) + " Seconds");
			
  Serial.println("Going to sleep now");
  Serial.println("------------------");
  Serial.println(" ");
  Serial.flush();
  esp_deep_sleep_start();
}
				
	// ----------------------------------- setup -------------------------	
void setup() {
	Serial.begin(115200);
	Serial.println("\nNTP TZ DST - bare minimum");
	Serial.printf("Bootcount = %d\n", bootCount);
			
	if ( !bootCount)	{
			// start network
		WiFi.persistent(false);
		WiFi.mode(WIFI_STA);
		WiFi.begin(STASSID, STAPSK);
		while (WiFi.status() != WL_CONNECTED) {
			delay(200);
			Serial.print ( "." );
		}
		Serial.println("\nWiFi connected");
				
		#ifdef ARDUINO_ARCH_ESP32
			// ESP32 seems to be a little more complex:
		configTime(0, 0, MY_NTP_SERVER); 								// 0, 0 because we will use TZ in the next line
		delay(500);
		setenv("TZ", MY_TZ, 1); 													// Set environment variable with your time zone
		tzset();
		#else
			// ESP8266
		configTime(MY_TZ, MY_NTP_SERVER); 								// --> for the ESP8266 only
		#endif
			//disconnect WiFi as it's no longer needed
    WiFi.disconnect(true);
    WiFi.mode(WIFI_OFF);
	}		
	bootCount++;		
	setenv("TZ", MY_TZ, 1); 													// Set environment variable with your time zone
	tzset();
	delay(1000); 																			// dirty delay
	showTime();
  sleep();
}
		
	// -------------------------------------- loop ----------------------------
void loop() {
			
}
// --------------------------- end --------------------------

- poniżej jeszcze log z programu, nie sprawdzałem jak się program zachowa dla TIME_TO_SLEEP np 1 lub 2 godziny.

NTP TZ DST - bare minimum
Bootcount = 0
...........
WiFi connected
year:2022	month:3	day:19	hour:19	min:51	sec:58	wday6	standard
Saturday, March 19 2022 19:51:58
 Setup ESP32 to sleep for every 300 Seconds
Going to sleep now
------------------
 
ets Jul 29 2019 12:21:46

rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6388
entry 0x400806b4

NTP TZ DST - bare minimum
Bootcount = 1
year:2022	month:3	day:19	hour:19	min:56	sec:59	wday6	standard
Saturday, March 19 2022 19:56:59
 Setup ESP32 to sleep for every 300 Seconds
Going to sleep now
------------------

 

Edytowano przez 99teki
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.