Skocz do zawartości

Monitory HMI w użytku domowym.


Pomocna odpowiedź

Zaryzykuję taką propozycję, może mógłbyś zaglądnąć do swoich ustawień i podpowiedzieć w którym miejscu poprawić te ustawienia? Podobnie z plikiem lv.conf. Jeślibyś się zechciał podzielić swoją wersją, można by porównać do mojego pliku.

@_LM_ do mojego maina wkleiłem Twoją funkcję, oczywiście wywaliło mi błędami, ale czy mógłbyś tu wkleić swoją funkcję .cpp, ew. napisać na czym się wzorowałeś. Chciałbym chociaż wiedzieć czy ten ekran działa. Bo jak nie to go reklamuję. Potem będę kombinował jak pójść dalej. Jednak na razie muszę spróbować uruchomić ekran. 

#include <FreeRTOS.h>
#include <Arduino.h>
#include <lvgl.h> //https://github.com/lvgl/lvgl
#include "ui.h"
#include <LovyanGFX.hpp> //https://github.com/lovyan03/LovyanGFX/tree/master
//#if LV_USE_TFT_ESPI
//#include <TFT_eSPI.h>
//#endif

static uint32_t my_tick(void)
{
    return millis();
}

   
void setup() {
  Serial.begin(9600);
create_peripherials();
  lv_init();
  lv_tick_set_cb(my_tick);
  ui_init();
}

void loop() {
  lv_task_handler(); /* Let LVGL do its work. */
  ui_tick();
}
void create_peripherials()     
{
    ESP_LOGI(TAG, "Initialize IOExpander bus");
    esp_log_level_set("lcd_panel.io.i2c", ESP_LOG_NONE);
    esp_log_level_set("GT911", ESP_LOG_NONE);
    const i2c_config_t i2c_conf_io = {
        .mode = I2C_MODE_MASTER,
        .sda_io_num = 8,
        .sda_pullup_en = GPIO_PULLUP_ENABLE,
        .scl_io_num = 9,
        .scl_pullup_en = GPIO_PULLUP_ENABLE,
        .master.clk_speed = 400 * 1000,
    };
    ESP_ERROR_CHECK(i2c_param_config(I2C_NUM_1, &i2c_conf_io));
    ESP_ERROR_CHECK(i2c_driver_install(I2C_NUM_1, i2c_conf_io.mode, 0, 0, 0));

    ESP_LOGI(TAG, "Initialize Touch bus");
    const i2c_config_t i2c_conf = {
        .mode = I2C_MODE_MASTER,
        .sda_io_num = EXAMPLE_PIN_NUM_TOUCH_SDA,
        .sda_pullup_en = GPIO_PULLUP_ENABLE,
        .scl_io_num = EXAMPLE_PIN_NUM_TOUCH_SCL,
        .scl_pullup_en = GPIO_PULLUP_ENABLE,
        .master.clk_speed = 400 * 1000,
    };
    ESP_ERROR_CHECK(i2c_param_config(TOUCH_HOST, &i2c_conf));
    ESP_ERROR_CHECK(i2c_driver_install(TOUCH_HOST, i2c_conf.mode, 0, 0, 0));


    // esp_io_expander_new_i2c_tca9554(I2C_NUM_1, ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_000, &io_expander);

    esp_err_t ret = esp_io_expander_new_i2c_tca9554(I2C_NUM_1, ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_000, &io_expander);

    if (ret != ESP_OK)
    {
        ESP_LOGW(TAG, "Failed to initialize IO expander with I2C_NUM_1, trying TOUCH_HOST...");

        ret = esp_io_expander_new_i2c_tca9554(TOUCH_HOST, ESP_IO_EXPANDER_I2C_TCA9554_ADDRESS_000, &io_expander);
        if (ret != ESP_OK)
        {
            ESP_LOGE(TAG, "Failed to initialize IO expander with TOUCH_HOST");
            ESP_ERROR_CHECK(i2c_driver_delete(I2C_NUM_1));
            return;
        }
    }

    esp_io_expander_set_dir(io_expander, IO_EXPANDER_PIN_NUM_5 | IO_EXPANDER_PIN_NUM_0 | IO_EXPANDER_PIN_NUM_2, IO_EXPANDER_OUTPUT);
    esp_rom_gpio_pad_select_gpio(EXAMPLE_PIN_NUM_TOUCH_INT);
    gpio_set_direction(EXAMPLE_PIN_NUM_TOUCH_INT, GPIO_MODE_OUTPUT);
    gpio_set_level(EXAMPLE_PIN_NUM_TOUCH_INT, 0);
    esp_io_expander_set_level(io_expander, IO_EXPANDER_PIN_NUM_5, 0); // (1)beep?
    esp_io_expander_set_level(io_expander, IO_EXPANDER_PIN_NUM_0, 0);
    esp_io_expander_set_level(io_expander, IO_EXPANDER_PIN_NUM_2, 0);
    vTaskDelay(pdMS_TO_TICKS(100));
    esp_io_expander_set_level(io_expander, IO_EXPANDER_PIN_NUM_5, 0);
    esp_io_expander_set_level(io_expander, IO_EXPANDER_PIN_NUM_0, 1);
    esp_io_expander_set_level(io_expander, IO_EXPANDER_PIN_NUM_2, 1);

    if (EXAMPLE_PIN_NUM_BK_LIGHT >= 0)
    {
        ESP_LOGI(TAG, "Turn off LCD backlight");
        gpio_config_t bk_gpio_config = {
            .mode = GPIO_MODE_OUTPUT,
            .pin_bit_mask = 1ULL << EXAMPLE_PIN_NUM_BK_LIGHT};
        ESP_ERROR_CHECK(gpio_config(&bk_gpio_config));
    }

    ESP_LOGI(TAG, "Install 3-wire SPI panel IO");
    spi_line_config_t line_config = {
        .cs_io_type = IO_TYPE_GPIO,
        .cs_gpio_num = EXAMPLE_LCD_IO_SPI_CS,
        .scl_io_type = IO_TYPE_GPIO,
        .scl_gpio_num = EXAMPLE_LCD_IO_SPI_SCL,
        .sda_io_type = IO_TYPE_GPIO,
        .sda_gpio_num = EXAMPLE_LCD_IO_SPI_SDA,
        .io_expander = NULL,
    };
    esp_lcd_panel_io_3wire_spi_config_t io_config = ST7701_PANEL_IO_3WIRE_SPI_CONFIG(line_config, 0);
    esp_lcd_panel_io_handle_t io_handle = NULL;
    ESP_ERROR_CHECK(esp_lcd_new_panel_io_3wire_spi(&io_config, &io_handle));

    ESP_LOGI(TAG, "Install ST7701 panel driver");
    esp_lcd_panel_handle_t lcd_handle = NULL;
    esp_lcd_rgb_panel_config_t rgb_config = {
        .clk_src = LCD_CLK_SRC_DEFAULT,
        .psram_trans_align = 64,
        .data_width = EXAMPLE_RGB_DATA_WIDTH,
        .bits_per_pixel = EXAMPLE_RGB_BIT_PER_PIXEL,
        .de_gpio_num = EXAMPLE_LCD_IO_RGB_DE,
        .pclk_gpio_num = EXAMPLE_LCD_IO_RGB_PCLK,
        .vsync_gpio_num = EXAMPLE_LCD_IO_RGB_VSYNC,
        .hsync_gpio_num = EXAMPLE_LCD_IO_RGB_HSYNC,
        .disp_gpio_num = EXAMPLE_LCD_IO_RGB_DISP,
        .data_gpio_nums = {
            EXAMPLE_LCD_IO_RGB_DATA0,
            EXAMPLE_LCD_IO_RGB_DATA1,
            EXAMPLE_LCD_IO_RGB_DATA2,
            EXAMPLE_LCD_IO_RGB_DATA3,
            EXAMPLE_LCD_IO_RGB_DATA4,
            EXAMPLE_LCD_IO_RGB_DATA5,
            EXAMPLE_LCD_IO_RGB_DATA6,
            EXAMPLE_LCD_IO_RGB_DATA7,
            EXAMPLE_LCD_IO_RGB_DATA8,
            EXAMPLE_LCD_IO_RGB_DATA9,
            EXAMPLE_LCD_IO_RGB_DATA10,
            EXAMPLE_LCD_IO_RGB_DATA11,
            EXAMPLE_LCD_IO_RGB_DATA12,
            EXAMPLE_LCD_IO_RGB_DATA13,
            EXAMPLE_LCD_IO_RGB_DATA14,
            EXAMPLE_LCD_IO_RGB_DATA15,
        },
        .timings = ST7701_480_480_PANEL_60HZ_RGB_TIMING(),
        .flags.fb_in_psram = 1,
        .num_fbs = LVGL_PORT_LCD_RGB_BUFFER_NUMS,
        .bounce_buffer_size_px = EXAMPLE_RGB_BOUNCE_BUFFER_SIZE,
    };
    rgb_config.timings.h_res = EXAMPLE_LCD_H_RES;
    rgb_config.timings.v_res = EXAMPLE_LCD_V_RES;
    st7701_vendor_config_t vendor_config = {
        .rgb_config = &rgb_config,
        .init_cmds = lcd_init_cmds, // Uncomment these line if use custom initialization commands
        .init_cmds_size = sizeof(lcd_init_cmds) / sizeof(lcd_init_cmds[0]),
        .flags = {
            .auto_del_panel_io = 0, /**
                                     * Set to 1 if panel IO is no longer needed after LCD initialization.
                                     * If the panel IO pins are sharing other pins of the RGB interface to save GPIOs,
                                     * Please set it to 1 to release the pins.
                                     */
            .mirror_by_cmd = 1,     // Set to 0 if `auto_del_panel_io` is enabled
        },
    };
    const esp_lcd_panel_dev_config_t panel_config = {
        .reset_gpio_num = EXAMPLE_LCD_IO_RST,
        .rgb_ele_order = LCD_RGB_ELEMENT_ORDER_RGB,
        .bits_per_pixel = EXAMPLE_LCD_BIT_PER_PIXEL,
        .vendor_config = &vendor_config,
    };
    ESP_ERROR_CHECK(esp_lcd_new_panel_st7701(io_handle, &panel_config, &lcd_handle));
    ESP_ERROR_CHECK(esp_lcd_panel_reset(lcd_handle));
    ESP_ERROR_CHECK(esp_lcd_panel_init(lcd_handle));
    esp_lcd_panel_disp_on_off(lcd_handle, true);

    esp_lcd_touch_handle_t tp_handle = NULL;

    esp_lcd_panel_io_handle_t tp_io_handle = NULL;
    const esp_lcd_panel_io_i2c_config_t tp_io_config = ESP_LCD_TOUCH_IO_I2C_GT911_CONFIG();

    ESP_LOGI(TAG, "Initialize I2C panel IO");
    ESP_ERROR_CHECK(esp_lcd_new_panel_io_i2c((esp_lcd_i2c_bus_handle_t)TOUCH_HOST, &tp_io_config, &tp_io_handle));

    ESP_LOGI(TAG, "Initialize touch controller GT911");
    const esp_lcd_touch_config_t tp_cfg = {
        .x_max = EXAMPLE_LCD_H_RES,
        .y_max = EXAMPLE_LCD_V_RES,
        .rst_gpio_num = EXAMPLE_PIN_NUM_TOUCH_RST,
        .int_gpio_num = EXAMPLE_PIN_NUM_TOUCH_INT,
        .levels = {
            .reset = 0,
            .interrupt = 0,
        },
        .flags = {
            .swap_xy = 0,
            .mirror_x = 0,
            .mirror_y = 0,
        },
    };
    ESP_ERROR_CHECK(esp_lcd_touch_new_i2c_gt911(tp_io_handle, &tp_cfg, &tp_handle));

    ESP_ERROR_CHECK(lvgl_port_init(lcd_handle, tp_handle));

    esp_lcd_rgb_panel_event_callbacks_t cbs = {
#if EXAMPLE_RGB_BOUNCE_BUFFER_SIZE > 0
        .on_bounce_frame_finish = rgb_lcd_on_vsync_event,
#else
        .on_vsync = rgb_lcd_on_vsync_event,
#endif
    };
    esp_lcd_rgb_panel_register_event_callbacks(lcd_handle, &cbs, NULL);
}

 

(edytowany)

Ok widać że jest jakiś problem z połączeniem tego do arduino, i powiem szczerze że nie bardzo wiem dlaczego te biblioteki nie dają się uruchomić na ardu. Ja to uruchomiłem zp vscode i espidf. 

Co mogę na teraz zrobić to podesłać binarki ze skompilowanym kodem co byś miał pewność że panel nadal żyje. Ja z arduino mam tyle doczynienia że.. wiem iż istnieje i od czasu do czasu pożyczę od nich jakąś bibliotekę to czujnika jak akurat nie chce mi się pisać 

Edytowano przez _LM_
  • Lubię! 1

@rade powiem Ci że jestem nieco zaskoczony że niema jakby wsparcia Arduino dla tego tft, ja działając w idf też musiałem nieco pokombinować ale nie było aż tak źle i raczej tyczyło się poprawy wydajności niż samego uruchomienia 

  • Lubię! 1

Właśnie, jak napisałeś w jednym z pierwszych postów tego wątku, najgorzej uruchomić, potem już z górki. 

Jest od groma przykładów dla eez, czy innych post lvgl edytorów, ale nic o pierwszym uruchomieniu. 
W najnowszych boardach, też już jest dokładnie ta płytka, 4”. Jednak te przykłady ich z ESP_Panel na razie tego nie wspierają, jedynie jako custom, a w custom nie wiadomo jak to ustawić. Podobnie w lv.conf niby nie ma wsparcia wpisanego dla 7701S, a jednak u Ciebie to działa. Może tam inny driver siedzi niż waveshare pisze? 

Jak Ty to uruchamiasz, może Twoje ustawienia u mnie też zadziałają. W końcu chyba ta sama płytka.

 

@_LM_ może po prostu nie ma zapotrzebowania? Tak samo można przepisać c++ na c jak w drugą stronę (przy czym w drugą nawet łatwiej)... a nawet zrobienie od zera prostego drivera pod Adafruit GFX nie jest jakimś skomplikowanym zadaniem.

  • Lubię! 1

Jakiego flashera do .bin używacie? Tam trzeba też jakieś chyba miejsce w pamięci pozaznaczać. Kiedyś miałem na starym kompie, ale tu muszę zainstalować, to dopytam.

46 minut temu, _LM_ napisał:

@rade powiem Ci że jestem nieco zaskoczony że niema jakby wsparcia Arduino dla tego tft, ja działając w idf też musiałem nieco pokombinować ale nie było aż tak źle i raczej tyczyło się poprawy wydajności niż samego uruchomienia 

No cóż, ja szukając swojego brałem pod uwagę to do czego znajdę przykłady, ale generalnie to nie używają chyba jakiś dziwnych sterowników do TFT, więc WYDAJE MI SIĘ można znaleźć układ pinów i założyć że jest tylko ekran podpięty

  • Lubię! 1
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 115200
Changed.
NO XMC flash  detected!
SPI_BOOT_CRYPT_CNT 0
SECURE_BOOT_EN False
Compressed 21088 bytes to 13047...

 is stub and send flash finish

 

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