手表界面v8

源码路径: example/multimedia/lvgl/watch 这是一个基于LVGL v8实现的智能手表界面示例,包含多种交互界面和字体配置功能。该示例展示了如何使用SiFli-SDK的LVGL图形库组件构建嵌入式设备的用户界面。 基于此示例,开发者可以构建各种智能穿戴设备的UI界面,如运动手表、健康监测设备等。

用法

支持的开发板

此示例可在以下开发板上运行:

  • sf32lb52-lcd_n16r8

  • sf32lb52-lchspi-ulp

备注

  • 不支持520-hdk

硬件需求

  • 支持LCD显示的SiFli开发板

1. 指定字体

例如当 font_nameDroidSansFallback 时,则相当于添加了如下宏定义:

#define FREETYPE_FONT_NAME   DroidSansFallback

编译时会在 freetype 子目录里查找以 .ttf 为后缀的字体文件,并将其转换为 C 文件加入编译过程:

objs = Glob('freetype/{}.ttf'.format(font_name))
objs = Env.FontFile(objs)

编译完成后,TTF 文件会被转换成 C 文件,生成于 build_xxx_hcpu/src/resource/fonts/freetype 目录下,文件名为 {font_name}.c。该 C 文件中调用了字体注册宏,将字体注册进 LVGL,从而可以在 LVGL 中使用:

LVSF_FREETYPE_FONT_REGISTER(tiny55_full)

FREETYPE_TINY_FONT_FULL 这样的宏是在工程目录下的 Kconfig.proj 中定义的,形式如下:

config FREETYPE_TINY_FONT_FULL
    bool
    default y

2. 完整 src/resource/fonts/SConscript 实例(支持自定义多字体使用)

CPPDEFINES = []

font_name = ''  # 默认字体选项,根据工程目录下的 [Kconfig.proj] 中定义
font_name2 = 'SourceHanSansCN_Normal'  # 自定义 TTF 字体文件名,需放置在 `src/resource/fonts/freetype` 目录下

if GetDepend('FREETYPE_TINY_FONT_FULL'):
    font_name = 'tiny55_full'
elif GetDepend('FREETYPE_TINY_FONT_LITE'):
    font_name = 'tiny55_lite'
elif GetDepend('FREETYPE_HANSANS_FONT'):
    font_name = 'SourceHanSansCN_Normal'
elif GetDepend('FREETYPE_ARIAL_FONT'):
    font_name = 'arial'
else:
    font_name = 'DroidSansFallback'

objs = Glob('freetype/{}.ttf'.format(font_name))
objs = Env.FontFile(objs)

objs2 = Glob('freetype/{}.ttf'.format(font_name2))  # 寻找自定义字体文件
objs += Env.FontFile(objs2)  # 将自定义 TTF 文件转为 C 文件

函数使用

//使用默认配置font_name字体接口
void lv_ext_set_local_font(lv_obj_t *obj, uint16_t size, lv_color_t color)

//根据配置注册字体名称,使用自定义字体接口
void lv_ext_set_font_local_by_name(lv_obj_t *obj, uint16_t size, lv_color_t color, char *fontname)

异常诊断

在多字体使用时,ttf文件总和可能过大,超出事先预准备的内存大小,例如以下编译报错,此时需要修改project/xxx_hcpu/ptab.json"tags": ["HCPU_FLASH2_FONT"]max_size 大小,注意修改大小需要保证前后段的地址连续,另外还需考虑不同开发板所支持的内存大小。

region'ROM' overflowed by 7880732 bytes

示例输出

成功运行后,开发板屏幕将显示手表主界面,包含蜂窝菜单和表盘显示。通过触摸或按键可以在不同界面间切换。

参考文档