当前位置: 首页 > article >正文

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 。


http://www.kler.cn/a/300788.html

相关文章:

  • DeepSeek-v3在训练和推理方面的优化
  • 【全面解析】深入解析 TCP/IP 协议:网络通信的基石
  • 摄像头模块在狩猎相机中的应用
  • Scala语言的多线程编程
  • 3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)
  • 蓝桥与力扣刷题(709 转换成小写字母)
  • DPDK基础入门(十):虚拟化
  • 编码与实现
  • 【佳学基因检测】在MYSQL中,如何对相互关联的数据库进行更新?
  • 构建安全基石:反射API与代码注入防护的集成方案
  • STL-详细介绍list
  • 为什么最好把 CSS 的 link 标签放在 head 标签之间?
  • 安装node 报错需要:glibc >= 2.28
  • 结构体的字节对齐方式(__attribute_pack(packed))#pragma pack())
  • vivo手机已删除的短信还能恢复吗?
  • linux下进程详解
  • 【超简单】1分钟解决ppt全文字体一键设置
  • Linux用户和组群账户管理
  • 一文读懂:如何将广告融入大型语言模型(LLM)输出
  • java-在ANTLR中BaseListner的方法和词法规则的关系0.5.0
  • 【Go】Go语言中的基本数据类型与类型转换
  • 大白话!解析大模型原理!
  • 系统设计文档示例
  • 正版软件 | Sticky Password 终身密码管理器 - 使用教程分享
  • Flask 第四课 -- 基本概念
  • Weakly-Supervised Video Moment Retrieval via Semantic Completion Network 论文阅读