Skocz do zawartości

ESP32flight - zbuduj radar lotniczy z ekranem dotykowym (bez lutowania, bez łączenia modułów i bez programatora)


Pomocna odpowiedź

Dobra, jeszcze jedna drobna poprawka ponieważ po przywróceniu poprawnych kolorów obraz był nieco przesunięty zmieniłem parametry synchronizacji, teraz jest bardzo dobrze, wyświetlacz nieco mruga, być może później to poprawię, no, chyba że wcześniej zrobi to autor projektu. Tymczasem zaktualizowana struktura:

 

__attribute__((unused)) static const board_cfg_t k_sunton_8070 = {
    /* Sunton ESP32-8048S070 (7" 800x480, ST7262) and its unbranded
     * Amazon/AliExpress clones. NOT Guition-compatible: DE and VSYNC are
     * swapped and the data bus is wired in the opposite order, so the
     * Guition build shows garbage on this glass. Pin map and timings
     * from rzeldent/esp32-smartdisplay (working devices). Note the slow
     * 12.5 MHz pclk and the unusual 210-pixel HSYNC front porch - both
     * are what the 7" panel actually wants. */
    .name = "Sunton ESP32-8048S070 (7in 800x480)",
    .de = 41, .vsync = 40, .hsync = 39, .pclk = 42,
    // .data = { 14, 21, 47, 48, 45,       /* B0..B4 */
    //           9, 46, 3, 8, 16, 1,       /* G0..G5 */
    //           15, 7, 6, 5, 4 },         /* R0..R4 */
    
    .data = { 15, 7, 6, 5, 4,          /* B0..B4 - zmienione */
              9, 46, 3, 8, 16, 1,       /* G0..G5 - bez zmian */
              14, 21, 47, 48, 45 },     /* R0..R4 - zmienione */
    
    .i2c_sda = 19, .i2c_scl = 20,
    .has_ch422g = false,
    .bl_gpio = 2,
    .tp_rst_gpio = 38,
  //  .hs_pulse = 30, .hs_bp = 16, .hs_fp = 210,
  .hs_pulse = 30, .hs_bp = 46, .hs_fp = 180,  
  .vs_pulse = 13, .vs_bp = 10, .vs_fp = 22,
    .pclk_hz = 12500000,
    .tp_mirror = false,
};   

 

@SOYER dzięki! To, co opisujesz, jest jak najbardziej osiągalne, a Twój plan (JSON co 10 s + pula ikon chowanych/pokazywanych) to dokładnie ta sama architektura, która siedzi w esp32flight. Po kolei:

Skąd dane.  Darmowe, społecznościowe agregatory ADS-B, bez klucza i bez rejestracji. Przykład: https://api.adsb.lol/v2/point/50.05/18.75/30 zwraca JSON ze wszystkimi samolotami w promieniu 30 mil morskich od podanego punktu (ja odpytuję co 8 s, Twoje 10 s jest w sam raz; wypada tylko nie schodzić dużo niżej, to serwisy utrzymywane przez hobbystów). W odpowiedzi masz dla każdej maszyny m.in. lat, lon, alt_baro, track (kurs), flight (znak wywoławczy). Zapasowe źródło o zgodnych danych: https://opendata.adsb.fi/api/v2/lat/50.05/lon/18.75/dist/30

Przeliczenie współrzędnych na piksele. Przy promieniu 50 km spokojnie wystarczy przybliżenie płaskiej Ziemi (błąd rzędu pojedynczych pikseli). Liczysz raz przy starcie, dla swojej lokalizacji domowej:

/* stałe policzone raz dla domu (lat0, lon0) */
float km_per_deg_lat = 110.57f;
float km_per_deg_lon = 111.32f * cosf(lat0 * M_PI / 180.0f);
float px_per_km = RADIUS_PX / RADIUS_KM;   /* np. 240 px / 50 km */

 

/* dla każdego samolotu z JSON-a */
float dx_km = (lon - lon0) * km_per_deg_lon;
float dy_km = (lat - lat0) * km_per_deg_lat;
int x = CENTER_X + (int)(dx_km * px_per_km);
int y = CENTER_Y - (int)(dy_km * px_per_km);   /* minus: ekran rośnie w dół */

I to całe "GPS na ekran". Jeśli po drodze używasz LVGL, ikonę obracasz kursem przez lv_img_set_angle(img, track * 10).

Pula obiektów. Twoje 15 ikon z chowaniem/pokazywaniem to raczej dobry pomysł: tworzysz je raz przy starcie, a po każdym odświeżeniu przypisujesz samoloty do ikon (u mnie kluczem jest hex ICAO maszyny, żeby ta sama ikona płynnie wędrowała między odczytami, a nie skakała losowo), nadmiarowe dostają LV_OBJ_FLAG_HIDDEN. Zero alokacji w trakcie działania, zero fragmentacji.

Tło z mapą. Skoro lokalizacja jest stała, nie baw się w pobieranie kafli na żywo: wygeneruj raz PNG z mapą swojej okolicy (np. zrzut z OpenStreetMap wycentrowany na dom, w skali dopasowanej do promienia), przepuść przez konwerter LVGL i wkompiluj jako asset. Jedna statyczna bitmapa, a efekt dokładnie ten, który opisujesz.

I najważniejsze: esp32flight jest na MIT, więc zamiast wymyślać od zera, możesz podglądać i wycinać do woli: github.com/theqkash/esp32flight. Najciekawsze dla Ciebie pliki to main/flight_task.c (pobieranie i parsowanie JSON-a z failoverem między agregatorami), main/geo_math.c (przeliczenia geograficzne) i widok radaru w main/ui.c. Jakbyś utknął, pisz śmiało. A jak już zadziała, wrzuć zdjęcie, chętnie zobaczę radar w innym wydaniu!

 

@_LM_ Dzięki! Ja nie mam magicznej kuli do sprzętów, więc świetnie że udało Ci się to poprawić, dorzuciłem do kodu na przyszłość. :). 
 

  • Lubię! 2
4 minuty temu, theqkash napisał:

Ja nie mam magicznej kuli do sprzętów, więc świetnie że udało Ci się to poprawić, dorzuciłem do kodu na przyszłość

na tym polega open source, fest mnie to zainspirowało chyba dodam sobie do tego widgety stacji pogowej 

  • Lubię! 1

image.thumb.png.34cfcc044c752c550b0788c448151a2e.png

Powolutku działam:) Ekran 480x480, promień mapy 48km, 10 samolotów. Samoloty klikalne, będzie pole do rozbudowy do info co to za samolot.

Teraz najgorsze(jak to napisać), ale lubię tą zabawę;)

(edytowany)

Panowie próbowałem dziś załadować to wersji 7B

Mam kominikat :

Downloading firmware firmware/0.4.5b/7b/ota_data_initial.bin failed: 403

Albo macie .bin aby załadować przez flasher ESP z konsoli?

 

Edytowano przez ewemarkam

Właśnie problem polega na tym, że ja zrobiłem stronę dla osób które nie mają pojęcia jak z tym się obchodzić (bo w dużej mierze tacy właśnie użytkownicy korzystają z tego) i jak dotąd nikt nie zgłaszał mi z tym problemów a już na pewno nie z pretensjami o trudność.
 

https://theqkash.github.io/esp32flight/
 

Naciśnij Connect przy swoim urządzeniu i powinno pójść bez problemu. Gdyby był problem to trzeba odpalić urządzenie w download mode przytrzymując przycisk Boot i wtedy podłączając kabel do komputera.

  • Lubię! 1

Ruszyło, flashowane przez python. To nie pretensje o trudność. Tylko właśnie flasher nie działał, wiem dlaczego został stworzony. No ale coś nie pykło u mnie i nie chciał flashować. jakby plików nie mogł znaleźć na serwerze. Nie mniej poradziłem sobie inaczej. 

Przytrzymywanie boot nic nie dawało, dalej te same błędy

Którą najnowszą .bin mogę wgrać na ten ekran?

 

esp32flight-v0.4.5-7b-full.bin?

 

 

 

Dzięki,

A jest jakiś sposób na tzw glicze? chodzi o to że czasem się uruchomi przesunięty ekran w pionie. Ekran przesunie się do góry, górna część jest częściowo widoczna na dole oraz po lewej lista samolotów ma takie właśnie kreski, grubosci pojedynczego pixela. Reset pomaga na to. To już jakaś przypadłość HW? 

Zdaje się, że airplanes.live zmienił zasady udostępniania danych od połowy sierpnia. Spróbuję póki co na:

String host = "https://opendata.adsb.fi";
    String path = "/v2/point/";
    String url = host + path + String(HOME_LAT, 4) + "/" + String(HOME_LON, 4) + "/26";

 

@ewemarkam 7B nie mam więc ciężko mi powiedzieć, mimo dużej grupy użytkownikow tej aplikacji na tej płytce nikt tego jak dotąd nie zgłosił. W każdym razie ciężko może być mi to zlokalizować bez sprzętu, ale możliwe że jakis posiadacz kiedyś to naprawi. 
 

@SOYER Tak, dlatego wsparcie tej usługi aktualnie jest ograniczone w aplikacji i zapewne ostatecznie zostanie całkowicie usunięte. 

  • Lubię! 1
4 godziny temu, ewemarkam napisał:

Dzięki,

A jest jakiś sposób na tzw glicze? chodzi o to że czasem się uruchomi przesunięty ekran w pionie. Ekran przesunie się do góry, górna część jest częściowo widoczna na dole oraz po lewej lista samolotów ma takie właśnie kreski, grubosci pojedynczego pixela. Reset pomaga na to. To już jakaś przypadłość HW? 

w moim waveshare 4" też tak mam, wprawdzie 1x na jakieś 100 uruchomień po nocy, ale zdarza się.

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...