Skocz do zawartości

Monitory HMI w użytku domowym.


Pomocna odpowiedź

3 minuty temu, ethanak napisał:

lepiej jęczeć na forum że nikt nie pomaga...

"niema obowiązku...." to lepiej się nie wychylać, ewentualne błędy są piętnowane 

  • Lubię! 1

Raczej miałem nadzieję na pomysł z zamocowaniem tego, ale dzięki, pomagacie jak możecie:)).

Nie ma błędów i wypaczeń, jest budowanie doświadczenia!!

Dlaczego jeśli zrobię tak:

String tim = rtc.getTime();
String dat = rtc.getDate(true);

lv_label_set_text(objects.lbl_0_time, tim.c_str());
lv_label_set_text(objects.lbl_0_date, dat.c_str());

To się coś wysypuje, nawet nie wiem co bo moduł ciągle się resetuje, jeśli zakomentuję te dwie dolne linijki to moduł się uruchamia normalnie(oczywiście wtedy nie wyświetla godzin i daty).

21 minut temu, ethanak napisał:

A co masz w lv_label_create (od tego bym zaczął)?

Czy jak wstawisz stale napisowe zamiast c_str() też się wyłoży?

{
            // lbl_0_date
            lv_obj_t *obj = lv_label_create(parent_obj);
            objects.lbl_0_date = obj;
            lv_obj_set_pos(obj, 5, 13);
            lv_obj_set_size(obj, 187, 16);
            lv_label_set_text(obj, "Sunday, January 17 2021");
            lv_obj_set_style_text_align(obj, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
        }
        {
            // lbl_0_time
            lv_obj_t *obj = lv_label_create(parent_obj);
            objects.lbl_0_time = obj;
            lv_obj_set_pos(obj, 184, 44);
            lv_obj_set_size(obj, 109, 26);
            lv_label_set_text(obj, "16:23:45");
            lv_obj_set_style_text_font(obj, &lv_font_montserrat_22, LV_PART_MAIN | LV_STATE_DEFAULT);
            lv_obj_set_style_text_align(obj, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
            lv_obj_set_style_border_color(obj, lv_color_hex(0xff0a890a), LV_PART_MAIN | LV_STATE_DEFAULT);
            lv_obj_set_style_border_width(obj, 2, LV_PART_MAIN | LV_STATE_DEFAULT);
            lv_obj_set_style_border_side(obj, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT);
        }

to powyżej to w screens.c,

jak wstawię w main z ręki to faktycznie też się wysypuje...🤔

(edytowany)

Chyba znalazłem powód, dzięki za naprowadzenie, miałem te linijki ustawiające labela nad ui_init(). Cep.

Po przeniesieniu pod inicjację, ruszyło.

Edytowano przez SOYER

Taki trick:

mamy linijkę która się wykłada. Obj to wskaźnik do czegoś tam ważnego:

jakasFunkcja(Obj, jakieśparametry);

Można sobie dać przed tym coś w stylu:

printf("%p\n", Obj);
jakiś_delay_żeby_dało_się_przeczytać();

Jeśli wypisze 0 to znak, że na 100% o czymś ktoś zapomniał 🙂

 

  • Lubię! 1

Buzzer nie jest sterowany bezpośrednio przez ESP32, a przez ekspander TCA9554 (jego port nr 6) i to raczej stanem wysokim.

Biblioteka do obsługi ekspandera jest w pakiecie oprogramowania tego wyświetlacza.

Tu pytanie do wszystkich - jaka jest rola elementu Q7, sterującego buzzer'em. Jeśli to jest rzeczywiście tranzystor, to jakoś dziwnie podłączony.

12:23:07.051 -> E (19969) tca95xx_8bit: write_output_reg(125): Write output reg failed
12:23:07.051 -> E (19970) io_expander: esp_io_expander_set_level(106): Write Output reg failed
12:23:07.051 -> E (19972) ESP_IOExpander: [ESP_IOExpander.cpp:81] digitalWrite(): Check error 263 (ESP_ERR_TIMEOUT)
12:23:08.740 -> E (21668) tca95xx_8bit: write_output_reg(125): Write output reg failed
12:23:08.740 -> E (21669) io_expander: esp_io_expander_set_level(106): Write Output reg failed
12:23:08.786 -> E (21671) ESP_IOExpander: [ESP_IOExpander.cpp:81] digitalWrite(): Check error 263 (ESP_ERR_TIMEOUT)
12:23:10.289 -> E (23198) tca95xx_8bit: write_output_reg(125): Write output reg failed
12:23:10.289 -> E (23199) io_expander: esp_io_expander_set_level(106): Write Output reg failed
12:23:10.289 -> E (23201) ESP_IOExpander: [ESP_IOExpander.cpp:81] digitalWrite(): Check error 263 (ESP_ERR_TIMEOUT)
12:23:11.181 -> E (24080) tca95xx_8bit: write_output_reg(125): Write output reg failed
12:23:11.181 -> E (24081) io_expander: esp_io_expander_set_level(106): Write Output reg failed
12:23:11.181 -> E (24083) ESP_IOExpander: [ESP_IOExpander.cpp:81] digitalWrite(): Check error 263 (ESP_ERR_TIMEOUT)

wywołane funkcją

expander->pinMode(6, OUTPUT);

void buzz(){
  expander->digitalWrite(6, HIGH);
  delay(100);
  expander->digitalWrite(6, LOW);
}

To co wyświetliło google to jakaś czarna magia dla mnie, w sprawie timeOut dla I2C...

Może coś poradzicie...

(edytowany)
17:25:18.074 -> I (1014) io_expander: Index[0] | Dir[In] | In[1] | Out[1]
17:25:18.074 -> I (1014) io_expander: Index[1] | Dir[In] | In[1] | Out[1]
17:25:18.074 -> I (1014) io_expander: Index[2] | Dir[In] | In[1] | Out[1]
17:25:18.074 -> I (1018) io_expander: Index[3] | Dir[In] | In[1] | Out[1]
17:25:18.121 -> I (1024) io_expander: Index[4] | Dir[In] | In[1] | Out[1]
17:25:18.121 -> I (1029) io_expander: Index[5] | Dir[In] | In[0] | Out[1]
17:25:18.121 -> I (1034) io_expander: Index[6] | Dir[In] | In[1] | Out[1]
17:25:18.121 -> I (1039) io_expander: Index[7] | Dir[In] | In[1] | Out[1]
17:25:18.121 -> I (1045) io_expander: Index[0] | Dir[Out] | In[0] | Out[0]
17:25:18.121 -> I (1049) io_expander: Index[1] | Dir[In] | In[1] | Out[1]
17:25:18.121 -> I (1054) io_expander: Index[2] | Dir[Out] | In[0] | Out[0]
17:25:18.121 -> I (1060) io_expander: Index[3] | Dir[In] | In[1] | Out[1]
17:25:18.121 -> I (1065) io_expander: Index[4] | Dir[In] | In[1] | Out[1]
17:25:18.168 -> I (1070) io_expander: Index[5] | Dir[Out] | In[1] | Out[1]
17:25:18.168 -> I (1075) io_expander: Index[6] | Dir[In] | In[1] | Out[1]
17:25:18.168 -> I (1080) io_expander: Index[7] | Dir[In] | In[1] | Out[1]
17:25:18.356 -> I (1285) io_expander: Index[0] | Dir[Out] | In[1] | Out[1]
17:25:18.356 -> I (1286) io_expander: Index[1] | Dir[In] | In[1] | Out[1]
17:25:18.356 -> I (1286) io_expander: Index[2] | Dir[Out] | In[1] | Out[1]
17:25:18.356 -> I (1290) io_expander: Index[3] | Dir[In] | In[1] | Out[1]
17:25:18.356 -> I (1295) io_expander: Index[4] | Dir[In] | In[1] | Out[1]
17:25:18.356 -> I (1300) io_expander: Index[5] | Dir[Out] | In[0] | Out[0]
17:25:18.404 -> I (1305) io_expander: Index[6] | Dir[In] | In[1] | Out[1]
17:25:18.404 -> I (1311) io_expander: Index[7] | Dir[In] | In[1] | Out[1]
17:25:18.404 -> Initialize panel device
17:25:18.829 -> Initialize LVGL
17:25:18.876 -> Create UI

a to jest w Setup:

void setup() {
  delay(1000);
  expander = new EXAMPLE_CHIP_CLASS(EXAMPLE_CHIP_NAME,
                                    (i2c_port_t)EXAMPLE_I2C_NUM, ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_000,
                                    EXAMPLE_I2C_SCL_PIN, EXAMPLE_I2C_SDA_PIN);

  expander->init();
  esp_err_t initStatus = expander->begin();

  if (initStatus == ESP_OK) {
    USBSerial.println("Expander initialized successfully.");
  } else {
    expander = new EXAMPLE_CHIP_CLASS(EXAMPLE_CHIP_NAME,
                                      (i2c_port_t)1, ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_000,
                                      7, 15);
    expander->init();
    expander->begin();
  }
    pinMode(16, OUTPUT);
  digitalWrite(16, LOW);

  USBSerial.println("Original status:");
  expander->printStatus();
  expander->pinMode(5, OUTPUT);
  expander->digitalWrite(5, HIGH);
  expander->pinMode(0, OUTPUT);
  expander->digitalWrite(0, LOW);
  expander->pinMode(2, OUTPUT);
  expander->digitalWrite(2, LOW);
  expander->printStatus();
  delay(200);
  expander->digitalWrite(5, LOW);
  expander->digitalWrite(2, HIGH);
  expander->digitalWrite(0, HIGH);
  expander->printStatus();

  expander->pinMode(6, OUTPUT);
  USBSerial.begin(9600);
  USBSerial.println("Initialize panel device");
  ESP_Panel *panel = new ESP_Panel();
  panel->init();
 #if LVGL_PORT_AVOID_TEAR
  // When avoid tearing function is enabled, configure the RGB bus according to the LVGL configuration
  ESP_PanelBus_RGB *rgb_bus = static_cast<ESP_PanelBus_RGB *>(panel->getLcd()->getBus());
  rgb_bus->configRgbFrameBufferNumber(LVGL_PORT_DISP_BUFFER_NUM);
  rgb_bus->configRgbBounceBufferSize(LVGL_PORT_RGB_BOUNCE_BUFFER_SIZE);
 #endif
  panel->begin();

  USBSerial.println("Initialize LVGL");
  lvgl_port_init(panel->getLcd(), panel->getTouch());

  USBSerial.println("Create UI");
  /* Lock the mutex due to the LVGL APIs are not thread-safe */
  lvgl_port_lock(-1);
  lvgl_port_unlock();

  wifiConfig();
  timeConfig();
  mqttConfig();
  uiConfig();
 
 pmillisTime = millis();
 USBSerial.println("LET'S START...");
}

Nadmienię jeszcze, że przy resecie słyszę krótki beep ale ja tego nie ustawiałem.

Po wywołaniu tego:

void buzz(){
  expander->digitalWrite(6, HIGH);
  delay(100);
  expander->digitalWrite(6, LOW);
}

mamy to:

17:27:59.979 -> E (162895) tca95xx_8bit: write_output_reg(125): Write output reg failed
17:27:59.979 -> E (162896) io_expander: esp_io_expander_set_level(106): Write Output reg failed
17:27:59.979 -> E (162898) ESP_IOExpander: [ESP_IOExpander.cpp:81] digitalWrite(): Check error 263 (ESP_ERR_TIMEOUT)

 

Edytowano przez SOYER
(edytowany)

Aktualne postępy prac:

ESP32-S3, 4” touch panel, Supla MQTT
https://youtube.com/shorts/8zBX69HGKW0

 

Dodałem obsługę odczytu jakości powietrza, pobieram dane z czujnika, przeliczam w.g. indeksu i wyświetlam odpowiednie info. Kolor tła banerów na stronie głównej również zmienia się zależnie od odczytów, temperatury, jakości powietrza i siły wiatru.

Nie udało mi się opanować tego buzzera.

Generalnie co chciałem zrobić zrobiłem. Teraz muszę to gdzieś zamontować zamiast zwykłego włącznika.

Edytowano przez SOYER

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