玩转树莓派屏幕之五:自定义LCD屏幕显示

news/2025/10/7 21:54:59/文章来源:https://www.cnblogs.com/liulongtao/p/19128932

上一章节中已经完成了lvgl适配以及tslib的屏幕校准。自己要展示的内容还没有展示出来,还是使用玩转树莓派屏幕之二:自定义屏幕显示 中直接展示的文字,没有任何渲染。

lvgl中支持很多控件,屏幕展示的内容更加丰富。但是让自己去配置这些组件以及布局,搞不了搞不了。。。

还好现在有很多的GUI 设计工具可以使用。本次使用的是GUI Guider,也支持LVGL v9系列。不得不吐槽一下,lvgl不同系列代码api有很大变化,在网上的大部分教程在v9版本都不能适用。

一、使用Gui Guider设计GUI

  1. 选择新建 -> LVGL 9.2.1 -> 设备 simulator --> 模版为Empty UI,点击创建工程。
    image

  2. 工程名称自取,树莓派MHS色深选择16bit,屏幕选择480*320,点击创建
    image

  3. 界面介绍:

image

  1. 设计GUI界面:

image

  1. 点击模拟:

image

image

这也看不出来啥。。。。。

  1. 点击生成代码,选择C

image

  1. 查看生成文件:

    custom、generated是我们要的文件。

image

二、适配Gui Guider

3.1 目录移植

新建guider_gui目录,将生成的custom、generated放入其中。

├── CMakeLists.txt
├── LICENSE
├── Makefile
├── README.md
├── guider_gui
│   ├── custom
│   └── generated
├── lvgl
├── scripts
│   └── backend_conf.sh
├── src
│   ├── lib
│   ├── main.c
│   └── usr
├── toolchain.cmake
└── user_cross_compile_setup.cmake

3.2 配置CMake.txt

让项目编译过程中能够识别新增加的gui内容,需要配置CMake引入.c文件和.h文件。

# 包含 tslib 头文件(自动从 pkg-config 获取)
include_directories(${TSLIB_INCLUDE_DIRS})
link_directories(${TSLIB_LIBRARY_DIRS})# 重新生成了src/usr内容
#aux_source_directory(src/usr/)
include_directories(src/usr)
file(GLOB_RECURSE SRC_USR_ADD ${PROJECT_SOURCE_DIR}/src/usr/*.c)# 引入guider-gui生成内容
include_directories(${PROJECT_SOURCE_DIR}/guider_gui/generated)
include_directories(${PROJECT_SOURCE_DIR}/guider_gui/custom)
include_directories(${PROJECT_SOURCE_DIR}/guider_gui/generated/images)#aux_source_directory(${PROJECT_SOURCE_DIR}/guider_gui/custom/)
file(GLOB_RECURSE SRC_LVGL_GUIGUIDER ${PROJECT_SOURCE_DIR}/guider_gui/generated/*.c)
file(GLOB_RECURSE SRC_LVGL_IMG ${PROJECT_SOURCE_DIR}/guider_gui/generated/images/*.c${PROJECT_SOURCE_DIR}/guider_gui/generated/guider_fonts/*.c
)add_executable(lvglsim src/main.c ${LV_LINUX_SRC} ${LV_LINUX_BACKEND_SRC} ${SRC_LVGL_GUIGUIDER} ${SRC_USR_ADD}src/usr/NetTools.c ${SRC_LVGL_IMG})target_include_directories(lvglsim PRIVATE ${TSLIB_INCLUDE_DIRS})
target_link_libraries(lvglsim lvgl_linux lvgl PkgConfig::TSLIB dl pthread)

这里只放了新增的部分,其他使用的LVGL demo中自带的。具体其他细节可以看下面的github链接地址。

3.4 修改main文件

在src/main中引入头文件和定义,在while循环中定期去刷新屏幕内容,这里是设置了1s刷新一次。

#include "gui_guider.h"
lv_ui guider_ui;int main() {....setup_ui(&guider_ui);while (true){uint32_t start_tick = lv_tick_get();usleep(LVGL_TICK); /*Sleep for 5 millisecond*/lv_task_handler();lv_tick_inc(LVGL_TICK); /*Tell LVGL that 5 milliseconds were elapsed*/if (start_tick - last_update >= 1000) {// 每秒执行刷新动作}}
}

更改屏幕中的显示内容,可以通过直接设置label的text内容进行修改:

lv_label_set_text(guider_ui.screen_cpu_show_info, tempStr);

三、效果展示

Gui-Guider设置展示

image-20251007190202167

实物展示

image-20251007190226824

四、开源地址

已经将GuiGuider和LVGL的源码放到了github:

https://github.com/secoworld/RaspberryPi_LCD_Monitor

参考文档:

  • https://github.com/Temperature6/DevMonitor_for_Pis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/930888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AtCoder ARC207 总结

AtCoder ARC207 总结 B 构造题。观察样例,发现 \(i\) 恰好三步到达 \(n-i\),其他点都是两步到达,这使我们想到 \(n\) 为偶数时的解法:分成 \(\le n/2\) 和 \(>n/2\) 的两部分点,对于其中一部分,我们让一个点恰…

工信部信息备案网站首页wordpress 多站点 合集

目录 前提:list 的基本介绍 一、构造/析构/拷贝/赋值 1、构造函数 2、析构函数 3、拷贝构造函数 4、赋值 二、修改操作 1、push_back 2、insert 3、erase 4、clear 三、list iterator 的使用 1、operator * 2、operator 3、operator -- 4、operator &…

http长连接维护【yet】

http长连接维护【yet】。

2025.10.7模拟赛

赛时 唐完了 开题,看错T1,以为是可重边,然后推性质,发现假了 看一眼题目,没有可重边,是个红题,唐完了,然后写完1h15min已经过去了 T2想了几种转化,然后脑子不思考了 看到左右<=7,觉得只有部分的顺序会影响…

详细介绍:ZLG ZCANPro,ECU刷新,bug分享

详细介绍:ZLG ZCANPro,ECU刷新,bug分享pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

好好学习, 天天向上

纯粹的热爱世界, 对其多样性的好奇, 引发出无限的成长, 探索和学习, 让人变得强大

万网发布网站建网站需要什么软件

💡💡💡本文改进内容: token mixer被验证能够大幅度提升性能,但典型的token mixer为自注意力机制,推理耗时长,计算代价大,而RIFormers是无需TokenMixer也能达成SOTA性能的极简ViT架构 ,在保证性能的同时足够轻量化。 💡💡💡RIFormerBlock引入到YOLOv9,多个数…

副本(Replica)在Elasticsearch中扮演什么角色? - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

请问怎么做网站小城镇建设 网站官方

spring共四天 第一天&#xff1a;spring框架的概述以及spring中基于XML的IOC配置 第二天&#xff1a;spring中基于注解的IOC和ioc的案例 第三天&#xff1a;spring中的aop和基于XML以及注解的AOP配置 第四天&#xff1a;spring中的JdbcTemlate以及Spring事务控制 -------------…

瀑布流资源网站模板wordpress新建页面显示数据

一、插入排序 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴&#xff0c;但它的原理应该是最容易理解的了&#xff0c;因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排…

CentOS7关闭防火墙、Linux开启关闭防火墙 - 详解

CentOS7关闭防火墙、Linux开启关闭防火墙 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

鱼头seo软件张家界有实力seo优化费用

安装Elasticsearch 7.8.0 官网&#xff1a;Elasticsearch 7.8.0 | Elastic 大家下载所需要的安装包即可。然后解压缩&#xff1a; Elasticsearch是通过java编写的&#xff0c;所以自带jdk。多好&#xff0c;下载Elasticsearch赠送jdk 0.0&#xff0c;不过一般我们用自己的jdk…

OpenStack实验过程

用户与项目管理 创建用户与项目 cd ~ source keystonerc_admin # 应用需要的环境变量,获取权限以便后续操作 openstack project create cec # 创建项目 openstack user create --domain default --password openstack…

2025.10.7+7

2025.10.7 Week 笔记2025.10.7 Luogu P4145 很经典的题,记录区间的极值,如果 \(\max\) 为 \(1\),那么就不修改,因为 \(\sqrt{1} = 1\) 的,

樟木头网站推广栖霞酒店网站设计价格

概述 此模块是一位大佬写的应用于单片机内存管理模块mem_malloc,这个mem_malloc的使用不会产生内存碎片,可以高效利用单片机ram空间。 源码仓库:GitHub - chenqy2018/mem_malloc mem_malloc介绍 一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎…

MySQl accessed by ssh in win11

1.Open PowerShell via administrator role,then run to confirm whether the ssh has been installed in win11ssh -V 2.Access mysql via ssh, prerequisite you must configure mysql.exe path in system environm…

oppoR9m刷Linux系统:VCOM模式备份系统与基带IMEI/NVRAM/QCN

前言全局说明COM、VCOM、9008模式备份系统与基带IMEI/NVRAM/QCN注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。请慎重刷机 !!! 注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。…

两个开源中国象棋引擎的编译

Debian 12, gcc 12. CCStockfish编译通过,运行时没有.nnue文件。文档声称可不用NNUE, ucioption.cpp里没有Use NNUE,不可能setoption 它 false.Pikafish,make build时自动先make net,从GitHub下载到了43MB的.nnue文…

php网站开发实用技术答案新乡网站建设设计

为什么需要使用泛型: 1):存储任意类型的数据在集合中 ,但是取出来都是Object类型的,此时就得强转.List list new ArrayList();list.add(1); //Interger类型Object ele list.get(0); //现在需要调用Interger类中的方法I nterger num (Interger) ele;System.out.println(num);…

网站优化竞争对手分析网站建设项目延期验收申请

第一章 计算机系统概述 1.3 计算机的性能指标 本笔记参考书目&#xff1a; 计算机组成原理&#xff08;第六版.立体化教材&#xff09;白中英、戴志涛2021王道计算机组成原理视频公开课 本节重点&#xff1a; 容量计算K/M/G/T单位转换CPU主频/CPI/IPS/FLOPS数据通路带宽/吞吐…