41集 ESP32 LVGL屏幕显示AI对话代码流程分析
41集 ESP32 LVGL屏幕显示AI对话代码流程分析
我们用的工程师ai_chat
有啥技术问题可以进Q群 174742054(开发者联盟),进群讨论。
app_main
–》spi_bus_initialize(LCD_HOST, &buscfg 初始化SPI
–》esp_lcd_new_panel_io_spi 把io_handle和io_config挂载到SPI接口上,io_config这里面挂了个.user_ctx = &disp_drv,,
------》example_notify_lvgl_flush_ready 这里注册了个回调函数
–》esp_lcd_new_panel_st7789把io_handle panel_config panel_handle关联到Panel上。
–》 ESP_ERROR_CHECK(esp_lcd_panel_reset(panel_handle));
ESP_ERROR_CHECK(esp_lcd_panel_init(panel_handle));
ESP_ERROR_CHECK(esp_lcd_panel_swap_xy(panel_handle, true));
ESP_ERROR_CHECK(esp_lcd_panel_mirror(panel_handle, true, false));
ESP_ERROR_CHECK(esp_lcd_panel_invert_color(panel_handle, true));
ESP_ERROR_CHECK(esp_lcd_panel_disp_on_off(panel_handle, true));
这一步是初始化panel,并且显示
–》tp_io_config = ESP_LCD_TOUCH_IO_I2C_FT5x06_CONFIG();触摸屏
–》esp_lcd_touch_new_i2c_ft5x06 把tp_io_handle, &tp_cfg, &tp都和IIC相关联
------》esp_lcd_touch_ft5x06->read_data = esp_lcd_touch_ft5x06_read_data;
esp_lcd_touch_ft5x06->get_xy = esp_lcd_touch_ft5x06_get_xy;
esp_lcd_touch_ft5x06->del = esp_lcd_touch_ft5x06_del;
这里面注册了几个回调函数
------》GPIO_MODE_INPUT PIN0 作为TP的中断, 之后gpio_config
------》esp_lcd_touch_register_interrupt_callback 这里应该是没有注册终端回调
------》gpio_config,touch_ft5x06_reset
------》touch_ft5x06_init 通过IIC初始化芯片
–》lv_init,初始化LVGL,lv_disp_draw_buf_init初始化buf
–》lv_disp_drv_init(&disp_drv);
之后注册了回调,buffer和panel
disp_drv.flush_cb = example_lvgl_flush_cb;
disp_drv.draw_buf = &disp_buf;
disp_drv.user_data = panel_handle;
–》lv_disp_drv_register(&disp_drv);
------》disp_def 全局变量初始化了,
–》esp_timer_create tick是2ms
–》esp_timer_start_periodic
–》lv_indev_drv_init 初始化LVGL的input device TP,example_lvgl_touch_cb注册回调。
–》lv_indev_drv_register(&indev_drv); 注册这个输入设备到LVGL上
–》lcd_brightness_init 之后初始化背光
–》lv_gui_start();
------》*gif_start = lv_gif_create(lv_scr_act()); 显示GIF图片
------》lv_gif_set_src(gif_start, &img_bilibili120); 设置具体图片
------》lv_obj_align 设置图片对齐
------》lv_label_create (lv_scr_act()) 创建label,挂载点是上面的src
------》lv_obj_align
------》lv_obj_set_style_text_font
------》lv_label_set_text “正在连接wifi…”
–》xTaskCreate(main_page_task, 创建主页
------》lv_obj_clean(lv_scr_act());清空开机页
------》lv_main_page 显示主页
------》lv_obj_set_style_bg_color 背景颜色
------》lv_style_init 初始化style
------》lv_style_set_radius
------》lv_style_set_bg_opa 设置opacity透明度
------》lv_style_set_bg_color
------》lv_style_set_border_width
------》lv_style_set_pad_all
------》lv_style_set_width
------》lv_style_set_height
------》lv_obj_create 创建目标挂载在活动屏幕上
------》lv_obj_add_style把设置的style挂在object上
------》lv_label_create
------》lv_obj_set_width,lv_label_set_long_mode,lv_obj_align,lv_label_set_text
------》lv_label_create,lv_obj_set_style_text_font,lv_label_set_text
-----》lv_timer_create 创建了个timer,周期100ms回调value_update_cb
----------》在value_update_cb中,调用lv_label_set_text_fmt 设置ask_text或者minimax_content在两个label中,完成对话显示。
----------》这里面的ask_flag,answer_flag在ai_chat_task中,当收到数据的时候置1 。