Skocz do zawartości

Monitory HMI w użytku domowym.


SOYER

Pomocna odpowiedź

(edytowany)

Elo, pododawałem biblioteki, pozmieniałem co nieco w plikach. W lv_conf.h odkomentowałem losowy sterownik i ustawiłem 1 w odpowiednim miejscu, dodatkowo kilka jedynek przy FONTS.

Zrobiłem nowy prosty projekt w EEZstudio. Dołączyłem pliki do arduIDE, skompilowałem. Udało się.

Nie wiem czy przejmować się takim komunikatem:

 #pragma message("Possible failure to include lv_conf.h, please read the comment in this file if you get errors")

 

Teraz mam

image.thumb.png.92b53a8302d42658a84b60b80bb3cf7a.png

co ważniejsze:

Szkic używa 341525 bajtów (26%) pamięci programu. Maksimum to 1310720 bajtów.
Zmienne globalne używają 82408 bajtów (25%) pamięci dynamicznej, pozostawiając 245272 bajtów dla zmiennych lokalnych.

skompilowane, trochę dużo odznaczonych fontów na "1" w lv_conf...

 

plik actions.h:

image.thumb.png.d4c7f494e9a4d54d7a7ae80a7029ec55.png

@_LM_ czy w ten sposób używamy action?:

image.thumb.png.890dd0cc1da54a1c38a2df6dd439218e.png

 

image.png

Edytowano przez SOYER
Link do komentarza
Share on other sites

Na razie utknąłem na etapie wgrania na ekran. To co wkleiłem powyżej to raczej nie zadziała tak jak chcę. 

Już mniej więcej wiem z czym to się je, więc pora na ekran.

Aleeeee…, przypomniałem sobie, że mam w szufladzie 3 ekrany które kiedyś Botland przysłał mi przez pomyłkę. Teoretycznie są uszkodzone, jesnak nigdy tego nie sprawdzałem bo za cienki jestem na własne ekrany.

Dzisiaj je wyciągam, podłączam i zobaczymy czy dostaną życia. Jak faktycznie zepsute to zamówię kuriera z czymś nowym. 

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

Cześć, @_LM_ jeśli byś chciał zerknąć i coś doradzić, czy dla podstawowego projektu tyle wystarczy do uruchomienia:

#include <lvgl.h>
#include "ui.h"
#if LV_USE_TFT_ESPI
#include <TFT_eSPI.h>
#endif

//float temperature = 0;
static uint32_t my_tick(void)
{
    return millis();
}
void setup() {
  String LVGL_Arduino = "Hello Soyer ";
  LVGL_Arduino += String('V') + lv_version_major() + "." + lv_version_minor() + "." + lv_version_patch();

  Serial.begin(9600);
  Serial.println(LVGL_Arduino);

  tft.begin();
  tft.setRotation(0);
  tft.setBrightness(255);

  lv_init();
  lv_tick_set_cb(my_tick);
}

Pomijam oczywiście to co jest w plikach dołączonych, a stworzonych przez EEZ... 

Czy jeszcze jakieś libsy trzeba dodać, funkcje? Czy to już odpali?

Ekran zamówiłem, zaraz wkleję przykładowego loopa...

Możesz się odnieść?

Link do komentarza
Share on other sites

Przy kompilacji dostaję takie błędy:

c:/users/katon/appdata/local/arduino15/packages/esp32/tools/esp-xs3/2302/bin/../lib/gcc/xtensa-esp32s3-elf/12.2.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: sketch\objs.a(styles.c.o):(.literal.get_style_main_screen_MAIN_DEFAULT+0x4): undefined reference to `lv_mem_alloc'
c:/users/katon/appdata/local/arduino15/packages/esp32/tools/esp-xs3/2302/bin/../lib/gcc/xtensa-esp32s3-elf/12.2.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: sketch\objs.a(styles.c.o): in function `get_style_main_screen_MAIN_DEFAULT':
C:\Users\katon\OneDrive\Pulpit\Szkice\qwe\qwe/styles.c:18: undefined reference to `lv_mem_alloc'
c:/users/katon/appdata/local/arduino15/packages/esp32/tools/esp-xs3/2302/bin/../lib/gcc/xtensa-esp32s3-elf/12.2.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: sketch\objs.a(styles.c.o): in function `get_style_btn_next_MAIN_DEFAULT':
C:\Users\katon\OneDrive\Pulpit\Szkice\qwe\qwe/styles.c:43: undefined reference to `lv_mem_alloc'
c:/users/katon/appdata/local/arduino15/packages/esp32/tools/esp-xs3/2302/bin/../lib/gcc/xtensa-esp32s3-elf/12.2.0/../../../../xtensa-esp32s3-elf/bin/ld.exe: sketch\objs.a(styles.c.o): in function `get_style_btn_next_MAIN_PRESSED':
C:\Users\katon\OneDrive\Pulpit\Szkice\qwe\qwe/styles.c:64: undefined reference to `lv_mem_alloc'
collect2.exe: error: ld returned 1 exit status
exit status 1

Biblioteka lvgl najnowsza, płytki esp32 najnowsze.

Link do komentarza
Share on other sites

Ok, pokażę, że się uczę ale pewnych rzeczy nie przeskoczę.

Projekt wygląda tak: 

image.thumb.png.14b46a43e483d47fa12a9869573b542d.png

image.thumb.png.f81bb25d6750a3bf50230745b087ac48.png

dwa proste ekrany. Jeden user_action, dla wszystkich buttonów.

 

@_LM_ więc zdarzenia obsługuję tak:

actions.h:

#ifndef EEZ_LVGL_UI_EVENTS_H
#define EEZ_LVGL_UI_EVENTS_H

#include <lvgl.h>

#ifdef __cplusplus
extern "C" {
#endif

extern void action_przycisk(lv_event_t * e);


#ifdef __cplusplus
}
#endif

#endif /*EEZ_LVGL_UI_EVENTS_H*/

actionc.c:

#include <stdbool.h>
#include "actions.h"

lv_event_t akcja = {};
akcja_is_available = false;
void action_przycisk(lv_event_t * e){
    akcja = *e;
    akcja_is_available = true;
}

main:

void loop() {
  lv_task_handler(); /* Let LVGL do its work. */
  ui_tick();
  checking();

}
void checking(){
if (akcja_is_available == true)
  {
    lv_obj_t *obj = lv_event_get_target_obj(&akcja);
    Serial.printf("Received event from obj: %u\n", obj);
    akcja_is_available = false;

    if (obj == objects.btn1)
    {
      lv_scr_load(objects.main1);
      
    }
    else if (obj == objects.btn2)
    {
      lv_scr_load(objects.main);
      
    }
    else if (obj == objects.rly1)
    {
      //otwórzbramę1
    }
    else if (obj == objects.rly2)
    {
      //otwórzbramę2
    }
    
  }
}

Sądzę, że jest dobrze.

Jednak nie przeskoczę tych problemów z pamięcią.

Wprawdzie w pliku lv.conf zmieniłem linijkę

#define LV_MEM_SIZE (128 * 1024U)          /*[bytes]*/

zamiast 64 dałem 128, ale za bardzo nie wiem co robię, tyle gdzieś wyczytałem, u autora projektu, ale nawet nie wiem czy piszą o tym samym.

Wybrana płytka:

image.thumb.png.754d7e28354542f4e90517aa51c37eda.png

Logi z kompilacji:

Teraz już rozumiem strukturę bibliotek:), naprawdę sporo się nauczyłem. Ten film wyjaśnia wszystko bardzo elegancko.

Jednak o z tymi błędami to nie wiem co zrobić. Faktycznie to o pamięć chodzi?

 

Link do komentarza
Share on other sites

Jeszcze jedna rzecz, po ładnym przepisaniu szkicu obsługującego wydarzenia, od kolegi którego film wkleiłem powyżej, a którego szkic jest tutaj, wywala mi błąd dotyczący tego:
 

actions.c:4:1: error: variable 'przycisk' has initializer but incomplete type
    4 | lv_event_t przycisk = {};
      | ^~~~~~~~~~
C:\Users\katon\AppData\Local\Temp\arduino_modified_sketch_234280\actions.c: In function 'action_przycisk':
actions.c:8:16: error: invalid use of incomplete typedef 'lv_event_t'
    8 |     przycisk = * e;
      |                ^
actions.c:8:14: error: 'przycisk' has an incomplete type 'lv_event_t'
    8 |     przycisk = * e;
      |              ^
C:\Users\katon\AppData\Local\Temp\arduino_modified_sketch_234280\actions.c: At top level:
actions.c:4:12: error: storage size of 'przycisk' isn't known
    4 | lv_event_t przycisk = {};
      |            ^~~~~~~~
"C:\\Users\\katon\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp-x32\\2302/bin/xtensa-esp32-elf-gcc" -MMD -c "@C:\\Users\\katon\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-442a798083\\esp32/flags/c_flags" -w -Os -DF_CPU=240000000L -DARDUINO=10819 -DARDUINO_ESP32_DEV -DARDUINO_ARCH_ESP32 "-DARDUINO_BOARD=\"ESP32_DEV\"" "-DARDUINO_VARIANT=\"esp32\"" -DARDUINO_PARTITION_default "-DARDUINO_HOST_OS=\"windows\"" "-DARDUINO_FQBN=\"esp32:esp32:esp32:JTAGAdapter=default,PSRAM=disabled,PartitionScheme=default,CPUFreq=240,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,LoopCore=1,EventsCore=1,DebugLevel=none,EraseFlash=none,ZigbeeMode=default\"" -DESP32 -DCORE_DEBUG_LEVEL=0 -DARDUINO_RUNNING_CORE=1 -DARDUINO_EVENT_RUNNING_CORE=1 -DARDUINO_USB_CDC_ON_BOOT=0 "@C:\\Users\\katon\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-442a798083\\esp32/flags/defines" "-IC:\\Users\\katon\\AppData\\Local\\Temp\\arduino_modified_sketch_234280" -iprefix "C:\\Users\\katon\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-442a798083\\esp32/include/" "@C:\\Users\\katon\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-442a798083\\esp32/flags/includes" "-IC:\\Users\\katon\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\esp32-arduino-libs\\idf-release_v5.1-442a798083\\esp32/qio_qspi/include" "-IC:\\Users\\katon\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.1\\cores\\esp32" "-IC:\\Users\\katon\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\3.0.1\\variants\\esp32" "-IC:\\Users\\katon\\OneDrive\\Pulpit\\Szkice\\libraries\\lvgl\\src" "@C:\\Users\\katon\\AppData\\Local\\Temp\\arduino_build_892589/build_opt.h" "@C:\\Users\\katon\\AppData\\Local\\Temp\\arduino_build_892589/file_opts" "C:\\Users\\katon\\AppData\\Local\\Temp\\arduino_build_892589\\sketch\\ui.c" -o "C:\\Users\\katon\\AppData\\Local\\Temp\\arduino_build_892589\\sketch\\ui.c.o"
Użycie biblioteki lvgl w wersji 9.2.2 z folderu: C:\Users\katon\OneDrive\Pulpit\Szkice\libraries\lvgl 
exit status 1
variable 'przycisk' has initializer but incomplete type

 

Link do komentarza
Share on other sites

1.24, pół soboty i pół nocy w plecy... ale za to zaprzyjaźniłem się z AI;)

Co do problemu z inicjalizacją zmiennej to AI zaproponowało kilka rzeczy które się nie powiodły i jedną która rozwiązała problem:

pracę na wskaźniku do struktury, a nie na strukturze, nie znam się, więc może ktoś obeznany wypowie się czy to będzie działać:

#include <stdbool.h>
#include "actions.h"

lv_event_t *akcja;
bool akcja_is_available = false;

void action_przycisk(lv_event_t * e){
    akcja = e;
    akcja_is_available = true;
}

Co do problemu z pamięcią, to AI również na początku nie wiedziała co począć, ale po dłuższej rozmowie i podesłaniu jej paru odpowiedzi powiedziała, że raczej w lv.conf powinienem zmniejszyć ilość przypisanej pamięci dla lvgl. Tak też zrobiłem:

image.thumb.png.6b619b950d08c78793b071b8f6dde78e.png

Co też skutkowało wyczekiwanym przeze mnie komunikatem:

image.thumb.png.494610b18ad73db159253dc1846c2e96.png

Skompilowało się. 

Idę spać:)

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

void action_przycisk(lv_event_t * e){
  
  
  lv_obj_t *obj = (lv_obj_t *)lv_event_get_target(e);

  
  if (obj == objects.myButton1)
{
       //Handle myButton1
}
  
  // akcja = e;
    akcja_is_available = true;
}

Już raz Ci pokazałem jak obsługuje się eventy. Zamiast bawić się z GPT wziąłbyś i przejrzał przykłady.

Zapis jak powyżej daje korzyści bo nie musisz dla każdego obiektu definiować zdarzenia. Na przykład masz dziesięć elementów w UI button1,2,3... checkbox1,2..n wtedy tworzysz jedną funkcję event dla wszystkich przycisków i za pomocą get_target sprawdzasz kto tego eventa wywołał. Przy okazji, kiedy już wiesz skąd funkcja została wywołana możesz zmienić właściwości danego elementu np: chcąc zmienić tekst na buttonie

    static int licznik = 0;
    lv_obj_t * obj = (lv_obj_t *)lv_event_get_target(e); // 
    if(obj == objects.btn_menu)
    {
        lv_obj_t * label = lv_obj_get_child(obj,0);
        lv_label_set_text_fmt(label,"Click no:. %d",licznik++);
        
    }


 

Edytowano przez _LM_
  • Pomogłeś! 1
Link do komentarza
Share on other sites

22 minuty temu, _LM_ napisał:
void action_przycisk(lv_event_t * e){
  
  
  lv_obj_t *obj = (lv_obj_t *)lv_event_get_target(e);

  
  if (obj == objects.myButton1)
{
       //Handle myButton1
}
  
  // akcja = e;
    akcja_is_available = true;
}

Już raz Ci pokazałem jak obsługuje się eventy. Zamiast bawić się z GPT wziąłbyś i przejrzał przykłady.

No tak, jednak trzeba mieć pojęcie o obiektówce, wskaźnikach, a przede wszystkim o tym jak zbudowana jest biblioteka lvgl. Pewnie dojdę do jakiegoś doświadczenia w tym temacie, ale na razie daleko do tego.

Dziękuję. 

Masz może jeszcze jakieś rady co do konkretnie tego modułu z Ali którego link mi podesłałeś na początku. Zamówiłem, już jedzie do mnie. 

Może na początek jaką konkretnie płytkę wybrać do kompilacji w arduIDE?

Link do komentarza
Share on other sites

29 minut temu, SOYER napisał:

No tak, jednak trzeba mieć pojęcie o obiektówce, wskaźnikach, a przede wszystkim o tym jak zbudowana jest biblioteka lvgl.

Trzeba się skupić na rozwiązaniu zadania a nie pieprzyć co tam komuś się nie spodobało. Z resztą @ethanak też jasno dał Ci do zrozumienia jaki błąd popełniasz, więc skup się na zadaniu a nie głupkowatych dziecinnych docinkach. 

Moduł który kupiłeś ma bezpośrednio wyprowadzone tylko dwa gpio, jest to magistrala i2c więc jeśli chcesz sterować większą ilością urządzeń konieczne może się okazać dokupienie modułów rozszerzających I2C, CAN lub RS485 

Edytowano przez _LM_
Link do komentarza
Share on other sites

(edytowany)
1 godzinę temu, _LM_ napisał:

Trzeba się skupić na rozwiązaniu zadania a nie pieprzyć co tam komuś się nie spodobało. Z resztą @ethanak też jasno dał Ci do zrozumienia jaki błąd popełniasz, więc skup się na zadaniu a nie głupkowatych dziecinnych docinkach. 

Moduł który kupiłeś ma bezpośrednio wyprowadzone tylko dwa gpio, jest to magistrala i2c więc jeśli chcesz sterować większą ilością urządzeń konieczne może się okazać dokupienie modułów rozszerzających I2C, CAN lub RS485 

Nie potrzebuję bezpośrednio sterować żadnym urządzeniem, wszystko przez linki bezpośrednie.

1 godzinę temu, _LM_ napisał:

Jak masz discorda to mają oni fajną grupę eez - studio i LVGL https://discord.gg/zvNM5YEn 

Nie mam discorda.

Pytałem również o typ płytki do ustawienia w arduinoIDE. Zwyczajnie esp32 dev module?

Jakieś dodatkowe zmiany przy tej płytce ustawiane w IDE? Pamięci? Zegary? 

Pytam Ciebie bo masz to fizycznie u siebie.

Jakbyś też mógł zacytować jakąś moją głupkowatą docinkę to bym chociaż wiedział o co Ci chodzi. Albo zostawmy to może.

Edytowano przez SOYER
Link do komentarza
Share on other sites

2 minuty temu, SOYER napisał:

Pytałem również o typ płytki do ustawienia w arduinoIDE. Zwyczajnie esp32 dev module?

 

To zależy od tego co kupiłeś...  Ja kupiłem wyświetlacz z ESP32S3, 16MB flash i 8MB PSRAM i konkretnym sterownikiem obrazu, który jest popularny.

Jak kupiłeś osobno wyświetlacz to pewnie byle jakie esp32, z uwagą, że może mieć za mało RAMu...

Link do komentarza
Share on other sites

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

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.