Skocz do zawartości

Pochwal się nad czym właśnie pracujesz! Wspólny mini-worklog


Pomocna odpowiedź

- nie rozumiem pytania, chodzi o VBR, CBR to odczytuję z tagów pliku mp3.

- ale proszę mieć wyrozumiałość, jestem po całym dniu walki z LVGL i ESP32S3-BOX-3B, na końcu się okazało że NVS miał błędy, system tego nie sformatował.

- złe określenie moje, po prostu robię seek o 1/10 czasu do przodu utworu.

		
			// Seek to stored position
  if (pausedPos > 0 && !file->seek(pausedPos, SEEK_SET)) 
	{
			//Serial.println("resumeTrack(): seek failed, starting from 0");
    file->seek(0, SEEK_SET);
    pausedPos = 0;
  }
 	// --------------------------- seek ------------------------		
		if(jasnosc == 5 && seek ) 	
		{
			pausedPos += info.sizeFile / 10;
			if(pausedPos >= info.sizeFile - 1000)								// koniec pliku
			{
				//Serial.printf(" [pauseTrack] _666_ overload !!! back all change. ");
				pausedPos -= info.sizeFile / 10;
			} else {
				tempTime += (int)info.duration / 10.0;
			}
			seek = 0;
		}	

 

(edytowany)

screenShot.zip- skrypt do robienia zrzutów z ekranu, zrzuty w formacie RGB565 PNG 

screenshot.thumb.png.09664f52b5b7df4ef00d3386d2086bce.pngscreenshot-capture.zip

- program przygotowany dla biblioteki graficznej LovyanGFX oraz TFT ILI9342.

- ekran graficzny musi mieć możliwość czytania z pamięci obrazu.

- poniżej zrzut z ekranu przygotowanego programu oraz zrzut binarny transmisji plików z ekranu.

- w komendzie skryptu pytona należy zmienić numer portu COM.

Available COM Ports
-------------------
COM1
COM11
-------------------

COM11 connected
SCREENSHOT
SCREENSHOT_BEGIN 1
WIDTH 320
HEIGHT 240
FORMAT RGB565_LE
LENGTH 153600
CRC32 471467E3
DATA
..................................
 SCREENSHOT_END

f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800
f800f800f800f800f800f800f800f800f800f800f800f800f800f800f800

07_54_screenshot.thumb.png.61b6672c729d7add4b01f2f9c25b6220.png

Edytowano przez 99teki
  • Lubię! 1

- polskie ogonki, fonty times16, 18 oraz times16, 18 Bold

19_06_screenshot.thumb.png.f2b1ecd354352756166be7e729d16712.png   19_22_screenshot.thumb.png.4e18a5ec7a419dfb0bac648eacf5b6aa.png  19_36_screenshot.thumb.png.0d2269a2802e19372da97165f365958b.png  19_44_screenshot.thumb.png.ddb307e587071563ec2ebdd0683b58a3.png

 

D:\Arduino\ESP32-S3-N16R16-BOX3\_piaskownica\test_ekranu_zawijanie1>python screenshot-capture\screenshot-capture.py --port COM4 --output screenshot.png
Otwieranie portu COM4...
Stabilizacja połączenia (pauza 2 sekundy)
Wysyłanie komendy wyzwalającej zrzut: SCREENSHOT...
Oczekiwanie na słowo kluczowe DATA (maksymalnie 20 sekund)...
[Arduino]: SCREENSHOT_BEGIN 1
[Arduino]: WIDTH 320
[Arduino]: HEIGHT 240
[Arduino]: FORMAT RGB565_LE
[Arduino]: LENGTH 153600
[Arduino]: CRC32 CE8E3DC7
[Arduino]: DATA
Pobieranie 153600 surowych bajtów obrazu...
Pomyślnie odebrano z portu: 153600 bajtów.
Sukces! Obraz zapisany w: 19_36_screenshot.png
Port zamknięty bezpiecznie.

 

  • Lubię! 1
  • 2 tygodnie później...
(edytowany)

- teraz pozostało tylko do zrobienia timer oraz radio intrnetowe.

- poniżej prototyp radia WWW z panelem sterowania dotykowym.

- jak widać panel sterowania to na żywo przeniesiona grafika z Mp3plaera.

radio_WWW.thumb.png.5f597a4947ca967671390547ef199cc6.png  panel_sterowania.thumb.png.b5e1918f71f57bbb8c45af70412e7a75.png

Edytowano przez 99teki
  • Lubię! 1
  • 2 tygodnie później...
(edytowany)

- dodano zegar do radia oraz cztery panele z listą stacji, do wyboru

. zegar.thumb.png.128463ef6f31166f624e637e8a4fc605.png    

void pobierzCzasZNaglowka() 
{
		// 1. Utworzenie bezpiecznego klienta TLS
  WiFiClientSecure *client = new WiFiClientSecure;
  if (!client) 
	{
    //Serial.println("Błąd alokacji klienta secure");
    return;
  }
			
		// Ignorujemy weryfikacje certyfikatu SSL dla szybkiego odczytu nagłowka
  client->setInsecure(); 
		
  HTTPClient https;
			
		// 2. KROK KLUCZOWY: Definiujemy nagłowek, który chcemy przechwycić
  const char* naglowkiDoPrzechwycenia[] = {"Date"};
  https.collectHeaders(naglowkiDoPrzechwycenia, 1);
			
		//	Serial.println("[HTTPS] laczenie z serwerem w celu pobrania czasu...");
			
			// Używamy dowolnego serwera HTTPS, ktory zwraca poprawny nagłowek Date
  if (https.begin(*client, "https://google.com")) 
	{
    	// Wysyłamy zapytanie GET
    int httpCode = https.GET();
				
    if (httpCode > 0) 
		{
				//	Serial.printf("[HTTPS] Kod odpowiedzi: %d\n", httpCode);
				
				// 3. Pobranie wartosci zapisanego nagłowka "Date"
      if (https.hasHeader("Date")) 
			{
        dataSerwera = https.header("Date");
					//	Serial.print("Pobrany czas (GMT): ");
					//	Serial.println(dataSerwera);
					//	lcd.setCursor(10,10);
					//	lcd.setTextColor(TFT_GREEN);
					//	lcd.printf("Pobrany czas (GMT): %s\n", dataSerwera);
					//	lcd.println(dataSerwera);
					//
					// Zmienna 'dataSerwera' zawiera teraz ciąg np.: "Sun, 25 Oct 2026 16:45:00 GMT"
					// Tutaj mozesz wdrożyć funkcję parsującą ten string do wewnętrznego RTC w ESP32-S3
									
      } else {
        //Serial.println("Serwer nie zwrócił nagłowka Date.");
      }
    } else {
      //Serial.printf("[HTTPS] Bład GET: %s\n", https.errorToString(httpCode).c_str());
    }
				
			// 4. Zamknięcie połączenia i zwolnienie zasobów
    https.end();
  } else {
    //Serial.println("[HTTPS] Nie można połaczyć się z serwerem");
  }
			
			// Usunięcie obiektu klienta z pamięci sterty (zapobiega wyciekom pamięci w radiu)
  delete client; 
}	// --- end-pobierzCzasZNaglowk ---

- na partycji OTA0 wgrano plik programu pendrive_MSC, program ten pobiera dane na temat aktualnego adresu WiFi i zapisuje w partycji NVS, potem przełącza się na partycję OTA1.

if (digitalRead(BUTTON_PIN) == LOW) 
	{
    Serial.println("Change to ota_1 (Extended mode)...");
    delay(500);
    
    const esp_partition_t* target = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_1, NULL);
    if (target) 
		{
      esp_ota_set_boot_partition(target);
      esp.restart();
    } else 
		{
      Serial.println("Error: ota_1 partition not found!");
    }
  }

- po restarcie , program startuje z partycji OTA1 i odczytuje dane  lokalne WiFi, a potem uruchamia radio internetowe.

		// ------------------- Read the 1 string -----------------------------
    size_t required_size = 0;
    ESP_LOGI(TAG, "\nReading string from NVS...");
    err = nvs_get_str(my_handle, "config_ssid", NULL, &required_size);
    if (err == ESP_OK) 
		{
				char message[required_size];								// char* message = malloc(128 * sizeof(char));
				err = nvs_get_str(my_handle, "config_ssid", message, &required_size);
				if (err == ESP_OK) 
				{
					ESP_LOGI(TAG, "Read string: %s", message);
					config_ssid = String(message);
				}
					//	free(message);							// daje bledy
    }

- aktualny czas jest pobierany z esp32s3, z RTC.

	// ----------------------------------------------
void ustawWewnetrznyRTC(time_t unixTimestamp) 
{
  if (unixTimestamp == 0) return;

			// 1. Konfiguracja czasu systemowego w ESP32-S3
  struct timeval tv;
  tv.tv_sec = unixTimestamp;  											// Sekundy od 1970r
  tv.tv_usec = 0;             											// Mikrosekundy
			
		// Ta funkcja sprzętowo synchronizuje wewnętrzny licznik RTC w chipie ESP32-S3
  settimeofday(&tv, NULL);
				
		// 2. Ustawienie strefy czasowej dla Polski w systemie operacyjnym
  setenv("TZ", STREFA_CZASOWA, 1);
  tzset();
			
		//	Serial.println("Wewnętrzny zegar RTC został zsynchronizowany!");
}

- z poziomu programu , z wykorzystaniem funkcji millis() co 60 sekund jest odczytywany i zapisywany na TFT czas aktualny.

	// ----------------------------------
void wyswietlAktualnyCzasLokalny() 										// [1260]
{
  time_t teraz;
  struct tm infoCzasu;													// przepisanie struktury czasu
				
  time(&teraz); 														// Pobranie aktualnego czasu z wewnętrznego RTC
  localtime_r(&teraz, &infoCzasu); 										// Konwersja na czas lokalny (uwzględnia TZ)
			// Formatowanie do czytelnej postaci: RRRR-MM-DD GG:MM:SS
			//	strftime(buforCzasu, sizeof(buforCzasu), "%Y-%m-%d %H:%M:%S", &infoCzasu);
	strftime(buforCzasu, sizeof(buforCzasu), "%H:%M", &infoCzasu);			
		// Serial.print("Aktualny czas lokalny w radiu: ");
		// Serial.println(buforCzasu);
	if(cztery)
	{
		lcd.setCursor(10,70);
		lcd.setTextColor(TFT_YELLOW);
		lcd.printf("czas lokalny: %s\n", buforCzasu);
		cztery = 0;
	}	

- czy ktoś może wie czy jakaś stacja radiowa nadaje w streamingu polskie znaki?, chętnie sprawdzę czy to u mnie działa.

Edytowano przez 99teki
  • Lubię! 2

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...