移植一款小巧的GUI SGL---AI-M61-32S #41
hsb689
started this conversation in
📚Tutorials(教程)
Replies: 1 comment
|
咦哟,交作业了~ |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
📖 前言
最近在准备第 11 期电子 DIY,一直在想用什么 GUI。偶然碰到这个 GUI,大概看了一下,发现这个 GUI 非常的好用,在这里也十分推荐大家:
一个轻量、好用、适合嵌入式 DIY 的 GUI 库
话不多说,直接开始。
第一步:获取 SGL 源码
首先前往 SGL 仓库,把源码克隆下来:
第二步:工程准备
2.1 复制一个模板工程
把这个工程复制一遍,当作我们的模板工程用。工程名字随便取。
2.2 把 SGL 源码放进工程
然后直接把 SGL 的文件放过去,像这样:
2.3 对接显示屏驱动
然后对接一下显示屏的驱动。这边我用的是 ST7789,1.4 寸的一个屏幕。
屏幕驱动使用的是附件 LCD 1.3,在以前安信可论坛里面有个大佬发的。
LCD1.3.zip
把压缩包下载下来,放到刚刚创建的那个工程里面,然后打开截图里的那个文件,修改引脚定义。
Warning
注意看芯片规格书,确认引脚是不是属于 SPI 引脚。
2.4 编写 CMakeLists.txt
然后编写
CMakeLists.txt,将 SGL 和我们刚刚放进去的 LCD 驱动加入到构建。第三步:先编译验证
到这里可以先编译一下。如果没有报错的话,再继续下一步。
Tip
如果编译报错,优先检查:
LCD1.3和sgl的目录名、路径是否和CMakeLists.txt一致;sgl_config.h中堆分配后端是否与加入构建的mm后端一致;第四步:将我们的绘图接口对接 SGL
Important
这一步把 屏幕刷新、DMA 完成回调、SGL 任务和 tick 接起来,让 SGL 真正能在 ST7789 上跑起来。
4.1 屏幕刷新接口:
panel_flush_areaNote
SGL 会把需要刷新的区域和颜色数据传进来,我们直接调用 ST7789 的非阻塞绘制接口,把数据交给 SPI / DMA 发送。
4.2 DMA 完成回调
Tip
当 DMA 把一块区域发送完成后,调用
sgl_fbdev_flush_ready()告诉 SGL 可以继续刷新下一块。4.3 SGL 主任务与 tick 任务
Note
sgl_task_thread负责处理 SGL 内部任务;anim_tick_thread每 1ms 给 SGL 提供 tick,用于动画和定时器。4.4 日志输出
Tip
把 SGL 的日志重定向到
printf,方便调试。4.5 帧缓冲与初始化
Warning
panel_buffer1未定义,fbinfo中的.buffer[1]需要条件编译处理,否则会编译报错。PANEL_BUFFER_SIZE可根据屏幕宽度和可用 RAM 调整,这里取240 * 12。st7789v_spi_async_callback_enable(true)是否生效,以及 SPI DMA 中断是否正常。4.6 完整代码
Note
到这里,SGL 的绘图接口就已经和 ST7789 对接完成。下一步可以开始创建控件、写 UI 了。
第五步:创建控件并在 SGL 上显示
Important
最后一步就是把控件创建出来,然后让 SGL 把它显示到屏幕上。
如果不想手动写控件代码,可以直接用 SGL UI 设计器。
5.1 SGL UI 设计器
SGL 官方有一个 UI 设计器,开源链接在这里:
👉 https://github.com/jialiangbo/sgl-ui-designer
不想手动创建控件的话,可以使用这个工具。
5.2 先创建一个按钮
我们就直接先在这里创建一个按钮。
Warning
记得前往
sgl_config.h里面随便开启一个字体。默认是带了 3 个字体,但是都没有开启使用。如果不开启,按钮可能没有字体可用。
5.3 复制生成的按钮代码
直接在这个代码窗口把我们创建按钮的代码复制下来:
Tip
自带的测试字体没有中文,这里手动修改一下成
Button。在创建的时候,UI 设计器是可以自己改显示文本的。
由于我们在生成代码的时候没有选择字体,所以按钮这边它是没有字体的,这里也是手动添加。
如果不添加的话,SGL 会自动跑飞。
如果你在
sgl_config.h里面开启了日志打印的话,就能够看到相关错误。5.4 初始化 UI
然后编写
ui_init,调用页面创建函数:Note
然后调用一下这个函数就行了。
5.5 实验现象
实验现象就是在屏幕中间显示一个按钮。
因为我这边已经把东西组装好了,所以直接演示,我用 SGL 设置的一个 UI。
UI稍微有一点点难看,还在优化中
Note
到这里,SGL 的控件创建和显示就完成了。
✅ 小结
SGL 这个 GUI 库用起来非常顺手,适合我们这种电子 DIY 项目。后面会继续更新第 11 期电子 DIY 的进展。
如果大家也在用 SGL,欢迎一起交流~
All reactions