Elektroda.pl
Elektroda.pl
X
Relpol przekaźniki nadzorczeRelpol przekaźniki nadzorcze
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Videoporadnik wyświetlacze NEXTION

ekrzychoooo 20 Sty 2020 12:02 10023 172
  • #151
    darlin
    Poziom 11  
    w opisie Nextion exchange wspomina się o dostępnych 8 portach GPIO.
    Jak je użyć? (od strony nextiona)
  • Relpol przekaźniki nadzorczeRelpol przekaźniki nadzorcze
  • #153
    Jarzabek666
    Poziom 30  
    Według dokumentacji😉 8 portów cyfrowych high/low w tym cztery pwm..
  • #154
    darlin
    Poziom 11  
    Czy można z poziomu nextion wykonać walidacje wpisywanych wartości do pola number?
    np. tylko zakres 0 do 500
  • Relpol przekaźniki nadzorczeRelpol przekaźniki nadzorcze
  • #156
    darlin
    Poziom 11  
    Ech... do projektu musiałem dodać (zadeklarować) kolejnych 10 kontrolek i zderzyłem się ze ścianą brakującej pamięci w arduino nano:

    ..."Szkic używa 9058 bajtów (29%) pamięci programu. Maksimum to 30720 bajtów.
    Zmienne globalne używają 1594 bajtów (77%) pamięci dynamicznej, pozostawiając 454 bajtów dla zmiennych lokalnych. Maksimum to 2048 bajtów.
    Niski poziom dostępnej pamięci, mogą wystąpić problemy ze stabilnością..."...

    w sumie, razem to 35 kontrolek.
    Czy można temu jakoś zaradzić, zoptymalizować?
  • #157
    ekrzychoooo
    Poziom 15  
    darlin napisał:
    Zmienne globalne używają 1594 bajtów (77%) pamięci dynamicznej

    Duży projekt jak na nano. Z drugiej strony jakby tak tylko szacunkowo przyjąć 4 bajty( albo aż 4) na zmienną to wychodzi 398 zmiennych.
    Nie masz czasem w globalnych jakiś dużych tablic zadeklarowanych?
    Odejmij od projektu jakąś kontrolkę, najlepiej taką których masz najwięcej i podaj ile się zmniejszyło. Jak będzie wiadomo jaka kontrolka to można coś tu kombinować. Choć bez kodu to ....
  • #158
    darlin
    Poziom 11  
    Odjecie 10 kontrolek typu NexNumber Poz1 = NexNumber(0, 4, "set.n0"); to odzyskanie 10% pamięci
    odjęcie kolejnych 9 kontrolek typu NexCheckbox Check = NexCheckbox (2, 13, "set.c0"); to następne odzyskane 7 %
    W obu przypadkach nie potrzebuję aż 4 bajtów na zmienną. NextChecbox to przecież tylko dwa bity. A numeryczna wystarczyłby uint16_t.
  • #159
    ekrzychoooo
    Poziom 15  
    darlin napisał:
    "set.n0"
    Chyba w którymś filmie coś mówiłem o wpływie długości nazwy na zajętość RAM(może to był live). Z jednej strony długie nazwy są fajne ale z drugiej muszą być pamiętane bo biblioteka nextion dobiera się do obiektów poprzez nazwy a nie przez ID (trochę do bani ale tak jest).
    darlin napisał:
    NextChecbox to przecież tylko dwa bity
    dlaczego?
  • #160
    Slawek K.
    Poziom 32  
    Nazwy obiektów mają kolosalny wpływ na rozmiar alokacji pamięci, dlatego ja używam conajwyżej dwuznakowych. Druga sprawa, jeżeli komunikacja z obuektem na wyświetlaczu odbywa sie tylko w jedną stronę (bez callback) to nie definuj obiektu w Nano tylko wysyłaj dane zwkłym Serial.println kończąc transmisje 3x FF, to również osczędzi Ci sporo pamięci. Polołudniu wrzucę przykładową funkcję, jeżeli chcesz.

    Pozdr
  • #161
    darlin
    Poziom 11  
    Dziękuje za ukierunkowanie. Widać że można jeszcze coś zdziałać. Funkcję też chętnie obejrzę.

    W ostatecznej ostateczności można pozbyć się bootlodera to jakieś dodatkowe 4KB
    ale sugestia Serial.print i nazwy może rozwiążą mój problem. Sprawdzę i dam znać.

    co do NextChecbox 2 bity - nieważne - coś pomieszałem (;
  • #162
    ekrzychoooo
    Poziom 15  
    darlin napisał:
    sugestia Serial.print i nazwy może rozwiążą mój problem.

    Można wykorzystać funkcje biblioteczne bez tworzenia obiektów tak jak pisał Sławek.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Zrezygnowanie z bootloadera da tylko oszczędność w pamięci programu. W danej chwili albo działa aplikacja albo bootloader.
  • #163
    Slawek K.
    Poziom 32  
    Poniżej przykładowe funkcje :

    1. Wysyła liczbę float do pola tekstowego w Nextion

    Kod: c
    Zaloguj się, aby zobaczyć kod


    2. Wysyła tekstt do pola tekstowego w Nextion

    Kod: c
    Zaloguj się, aby zobaczyć kod

    3. Wysyła liczbę int do pola numerycznego w Nextion

    Kod: c
    Zaloguj się, aby zobaczyć kod


    4. Wysyła polecenie systemowe do Nextion
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Pozdr
  • #164
    darlin
    Poziom 11  
    Udało się powyższymi metodami oszczędzić nieco pamięci, ale chciałoby się więcej (;.
    zastanawiam się czy poniższa konwersja do uint8_t ma prawo zadziałać?

    nP1.getValue(uint8_t(&storeData[1].pos));
    nC1.getValue(uint8_t(&storeData[1].ch));

    kompilator przepuszcza coś takiego z uwagą:
    warning: cast from 'uint8_t* {aka unsigned char*}' to 'uint8_t {aka unsigned char}' loses precision [-fpermissive]

    ale wygląda na to że tonie działa.
    Może jakaś sugestia w tym kierunku?
    Generalnie wszystkie te 35 wartości kontrolek nextiona muszę zapisać do arduino eeprom.
  • #165
    jacol184
    Poziom 10  
    Panowie siedze już dłuższy czas aby uruchomić Nextion z ESP32 na Serial2 wszytko co udało mi się osiągnąć to komunikacja jednostronna ESP>>nextion , niestety nie mam już pomysłu jak opanować komunikację nextion< ESP ( touch).
    Mam nadzieje że ktoś posiada doświadczenia w tym temacie.

    Dodano po 27 [minuty]:

    Nie ma tematu nagle mnie olśniło :-)
  • #166
    darlin
    Poziom 11  
    Gdy wysyłam komendę z poziomu arduno do nextion za pomocą Seriala np:
    Serial.print("thsp=1");
    Serial.print("\"\xFF\xFF\xFF");
    To przestają być wysyłane wszystkie inne obiekty nextion, a w podglądzie seriala widzę coś takiego:
    ⸮⸮⸮bkcmd=1⸮⸮⸮page 0⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮...
    ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮thsp=1"⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮

    Gdy za komentuję Serial.print to pokazują się pozostałe:
    ⸮⸮⸮bkcmd=1⸮⸮⸮page 0⸮⸮⸮s1.n0⸮⸮⸮s1.n1⸮⸮⸮s1.n2⸮⸮⸮s1.n3⸮⸮⸮s1.n4⸮⸮⸮s2.n0⸮⸮⸮s2.n1⸮⸮⸮s2.n2⸮⸮⸮s2.n30⸮⸮⸮s2.

    Nie mogą oba sposoby działać równolegle?
  • #169
    ekrzychoooo
    Poziom 15  
    Bez kodu będzie ciężko pomóc.
    Funkcja biblioteczna która wysyła wygląda tak
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Najpierw czyści bufor wejściowy. Ale to tak bez kodu to strzelam.
  • #170
    Jarzabek666
    Poziom 30  
    A czemu "thsp=1" czyli jedna sekunda jak specyfikacja mówi minimum 3 sekundy??

    Sets internal No-touch-then-sleep timer to specified value in seconds
    min 3, max 65535, default 0 (max: 18 hours 12 minutes 15 seconds)
    Nextion will auto-enter sleep mode if and when this timer expires.
    Note: Nextion device needs to exit sleep to issue thsp=0 to disable sleep on no touch, otherwise once thsp is set, it will persist until reboot or reset.
  • #171
    darlin
    Poziom 11  
    Z "thsp=3" też nie działa. Generalnie mój problem dotyczy wszystkich komend wysłanych przez serial.
    Ale wiem już o co chodzi.
    To przypadłość którą kilka postów wcześniej opisywałem, a z którą wciąż się borykam nie mogąc już nic więcej rozwinąć w programie.
    Chodzi o permanentny brak pamięci na zmienne globalne w moim nano. .."Zmienne globalne używają 1827 bajtów (89%) pamięci dynamicznej"..
    Gdy trochę uwolniłem pamięci to komenda serialowa i komendy obiektowe nextiona zaczęły działać.

    Wymyśliłem nieco inny sposób komunikacji. Za pomocą istniejącego już pola number. W arduino wysyłam polem numerycznym np wartość 5.
    W nextion timer czuwam i jeśli pole ma taką wartość to wyłączam
    thsp=3
    thup=0
    tyle tylko że to nie do końca chce zadziałać (;

    działa dopiero jak zmienię wartość z 5 na inną.
  • #173
    darlin
    Poziom 11  
    .."pozostawiając 221 bajtów dla zmiennych lokalnych".
    Jak na razie program bez seriali działa.