luatos框架中LVGL如何使用中文字体〈二〉编写脚本设置中文字体

news2025/1/17 13:57:02

本节内容,将和大家一同学习,在luatos环境中,使用lvgl库,一步步的编译固件、编写脚本,最终实现中文字体的显示。
芯片:AIR101
LCD屏:ST7789

上一节,我们一同学习了,硬件引脚具体的接法,硬件连接好了,接下来,就是见证奇迹(编写脚本,操控LCD屏显示内容)的时刻了。

第一步:先初始化外部硬件(让芯片知道增加了一个外部硬件)

LCD屏,肯定是属于LCD库的操控权限内,所以我们找到LUATOS文档中,lcd驱动模块
在这里插入图片描述
接下来的第一步,就是初始化设备了,函数参数,文档里写得很清楚,咱们就不再赘述了
初始化参数中,注意:lcd初始化之前需要先初始化spi

local spi_lcd = spi.deviceSetup(0, pin.PB04, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 1)
lcd.init(
        "st7789",
        {
            port = "device",
            pin_dc = pin.PB01,
            pin_pwr = pin.PB00,
            pin_rst = pin.PB03,
            direction = 0,
            w = 240,
            h = 320,
            xoffset = 0,
            yoffset = 0
        },
        spi_lcd
    )

要想让屏显示内容,必须要先让屏工作起来,亮起来。所以我们把背光点亮

pwm.open(0,1000,50,0,100)
lcd.on()  --这句可加可不加,初始状态,就会亮起来

到这里,LCD屏就准备就绪了,接下来就是LVGL库的使用了

第二步:先了解luatos LVGL库的使用方法

与上面LCD模块初始化同理,使用LVGL也需要先做初始化

lvgl.init()

今天我们主要是学习如何显示中文内容
1、先基于LVGL画布创建一个按钮

local btn2 = lvgl.btn_create(lvgl.scr_act(), nil)

2、设置按钮的位置,LVGL官方源码中是支持多种位置的,比如ALIGN_TOP_MID,ALIGN_LEFT_MID,但是好像LustOS的LVGL库中,并没有支持,至少我使用ALIGN_TOP_MID的时候,会报错

lvgl.obj_align(btn2, nil, lvgl.ALIGN_CENTER, 0,0)

3、给按钮添加文字前,先要基于按钮创建一个标签,标签才可以显示文字

label = lvgl.label_create(btn2, nil)

4、给标签设置文字,如果是英文字符,就可以使用默认字体,直接显示了

lvgl.label_set_text(label, "hello world")

5、设置中文字体,直接使用中文,按钮将不显示任何文字

lvgl.label_set_text(label, "中国制造")

第三步、重点来了,如何显示中文字体(仅限luatos环境中)

1、因为芯片的固件中,为了固件的大小考虑,并没有加入中文字体,所以我们要先重新编译一个带有中文字体的固件。
注意两个红框的地方,先要正确选择芯片型号,另外要保证固件大小
在这里插入图片描述
除了上图中基础的要选择以外,下面是本次测试要用到的东西
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最最重要的,就是上图,因为我们现在用的是LVGL库,所以必须要选择LVGL库专用字体,在这里为了照顾固件的大小 ,选择了10PIX字号的

第三步,给label标签设置文字,使期支持中文字体

先看一下lustos 文档
在这里插入图片描述
到这里,如果直接使用示例中的代码,你会发现仍然不会显示文字
问题有两点:
1)lvgl.font_get(“opposans_m_12”),示例中使用的字体是12号的,我们添加到固件是10号的,正确应该lvgl.font_get(“opposans_m_10”)
2)最后一句lvgl.scr_load(screen_label),这里会导致整个屏,不显示任何内容,正确应该是重新加载整个画板:lvgl.scr_load(lvgl.scr_act()),这一句不加也可以

重新回到我们自己的脚本代码中,具体给标签设置中文的代码如下
第二步中,我们已经创建了标签,也设置了标签的内容,现在只需要给标签增加样式就可以了

local label_style = lvgl.style_create() --创建一个样式对象
log.info("set_text_style",lvgl.style_set_text_font(label_style,lvgl.STATE_DEFAULT, lvgl.font_get("opposans_m_10"))) --设置使用的字体
log.info("add style",lvgl.obj_add_style(label, lvgl.LABEL_PART_MAIN, label_style))
--把样式增加到标签label

在这里插入图片描述
最后,送上完整的脚本代码,仅供参考

PROJECT = "air101_test"
VERSION = "1.0.1"
sys = require "sys"
local spi_lcd = spi.deviceSetup(0, pin.PB04, 0, 0, 8, 20 * 1000 * 1000, spi.MSB, 1, 1)
log.info(
    "lcd.init",
    lcd.init(
        "st7789",
        {
            port = "device",
            pin_dc = pin.PB01,
            pin_pwr = pin.PB00,
            pin_rst = pin.PB03,
            direction = 0,
            w = 240,
            h = 320,
            xoffset = 0,
            yoffset = 0
        },
        spi_lcd
    )
)
pwm.open(0,1000,50,0,100)
-- lcd.on()
log.info("lvgl_init",lvgl.init())
local label
local btn2 = lvgl.btn_create(lvgl.scr_act(), nil)
lvgl.obj_align(btn2, nil, lvgl.ALIGN_CENTER, 0,0)
label = lvgl.label_create(btn2, nil)
local str = "中国制造#"
lvgl.label_set_text(label, str)
log.info("set_text_style",lvgl.style_set_text_font(label_style,lvgl.STATE_DEFAULT, lvgl.font_get("opposans_m_10")))
log.info("add style",lvgl.obj_add_style(label, lvgl.LABEL_PART_MAIN, label_style))
--vgl.scr_load(lvgl.scr_act())

本次测试,收关结束!

luatos框架中LVGL如何使用中文字体〈一〉开发板与LCD屏如何连线的基本步骤

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

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

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Text)

显示一段文本的组件。 说明: 该组件从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 可以包含Span和ImageSpan子组件。 接口 Text(content?: string | Resource, value?: TextOptions) 从API versi…

Python测试框架pytest(28)测试报告Allure - 动态生成标题、动态生成功能、报告添加用例失败截图

一、动态生成标题 默认 allure 报告上的测试用例标题不设置就是用例名称,其可读性不高;当结合 pytest.mark.parametrize 参数化完成数据驱动时,如标题写死,其可读性也不高。 那如果希望标题可以动态的生成,采取的方案…

大型文物三维扫描抄数服务3d建模造型设计逆向贴图等比例制作仿制

大型文物三维扫描数字化建模是一项前沿的技术,它运用高精度的扫描设备,将文物的三维形态精确地捕捉下来,再通过专业的建模软件,将这些数据转化为数字化的三维模型。这一技术的出现,不仅极大地提升了文物保护的效率和精…

爬虫案例2:playwright 超爽体验

参考链接:https://playwright.bootcss.com/python/docs/intro 目标网站:https://spa6.scrape.center/通过观察,页面的信息是通过Ajax请求后返回的信息 下面使用playwright实现绕过token的获取直接拿到返回的数据import asyncio import json f…

WebGIS开发0基础必看教程:清空功能和地图定位功能的设计以及实现

1.背景 当地图中增加了很多元素后,对不同的元素需要进行一定的控制,最简单的控制就是能对元素有选择的进行清空删除。在本节中,还将介绍WebGIS中另外一个常用功能,即地图定位功能。具体描述便是:当输入一个坐标点后&a…

LiveGBS流媒体服务器中海康摄像头GB28181公网语音对讲、语音喊话的配置

LiveGBS海康摄像头国标语音对讲大华摄像头国标语音对讲GB28181语音对讲需要的设备及服务准备 1、背景2、准备2.1、服务端必备条件(注意)2.2、准备语音对讲设备2.2.1、不支持跨网对讲示例2.2.2、 支持跨网对讲示例 3、开启音频开始对讲4、搭建GB28181视频…

[BJDCTF2020]Cookie is so stable

hint提示查看cookies flag.php页面我们先随便输入一个名字 输入后我们重新进一次flag.php,发现cookie里存储了刚刚登陆时输入的用户名,直接猜是ssti 尝试后根据ssti特征判断是twig模板 {{_self.env.registerUndefinedFilterCallback("exec")…

POS 之 验证者如何才能提议区块

验证者提议区块 验证者帐户提议区块。 验证者帐户由节点运营商(可以是AWS等待云服务商)管理,节点运营商运行验证者软件作为其执行和共识客户端的一部分,并且已经向存款合约中存入了至少 32 个以太币 然而,每个验证者只是偶尔负责提议一个区块…

【原创】[新增]ARCGIS之土地报备Txt、征地Xls格式批量导出Por旗舰版

一、软件简介 2024年新增旗舰版软件,本软件全新界面开发,保留原有软件功能及一些使用习惯,并集成了现已有的所有定制格式的支持,并增加自定义格式的导出;做到1N2(即为1种通用版本N种定制格式导出txt、Xls&a…

物理隔离条件下,如何安全高效地进行内外网文件导入导出?

内外网文件导入导出通常指的是在内部网络(内网)和外部网络(外网)之间传输文件的过程。这在企业环境中尤其常见,因为内部网络通常包含敏感数据,而外部网络(如互联网)则允许更广泛的访…

生成器建造者模式(Builder)——创建型模式

生成器/建造者模式——创建型模式 什么是生成器模式? 生成器模式是一种创建型设计模式, 使你能够分步骤创建复杂对象。 该模式允许你使用相同的创建代码生成不同类型和形式的对象。 提炼两个关键点:Ⅰ.分步骤创建复杂对象。Ⅱ.相同创建代码…

linux-MDK can电机带导轨

确保接线正确,这个带导轨的电机需要24V的电压 $ ls /dev //查看端口是什么$ sudo slcand -o -s6 /dev/ttyACM0 can0 //将端口封装为can0 $ sudo ip link set can0 up //打开端口 按照电机说明书,按照需要的指令计算检验和&#xf…

30天学会QT(进阶)--------------第二天(创建项目)

1、如何规范的创建一个项目 由于本人也是从其他的项目上学来的,所以也不算是业界规范,每个公司或者个人都有自己的方式去创建项目,项目的创建是本着简洁,明了,方便而言的,所以对于我来说,不繁琐…

速卖通批量注册买家号安全吗?怎么弄?

在速卖通等跨境电商平台上,买家号的注册与养号过程繁琐而复杂。传统的手动注册方式效率低下,难以满足大规模的需求。而跨境智星系统凭借其全自动化的功能,能够轻松实现买家号的批量注册与养号,大大提高了效率。 使用跨境智星系统进…

计算机基础:一些你必须知道的名词详解,必须要会的理论知识

软件测试 计算机基本特点 计算机硬件组成 内存储器和外存储器特点 计算机软件系统组成 常见的操作系统软件 编码 计算机数据计量单位 浏览器 图片类型 网页打开过程 客户端、服务器、请求和响应 dos 命令 软件测试 在规定的条件下对程序进行操作,以发现…

海豚调度系列之:认识海豚调度

海豚调度系列之:认识海豚调度 一、海豚调度二、特性三、建议配置四、名次解释 一、海豚调度 Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化操作任务、工作流和全生命周期数据处理过…

MySQL row_number()函数,rank()函数和dense_rank()函数

从MySQL8.0开始引用row_number(), rank()函数和dense_rank()函数,也就是常见的窗口函数,三个函数都是一种用于计算排名的工具,它们根据指定的列对结果集进行排序,并为每一行分配一个排名值(1,2,3,...)。 函…

【ansible】ansible的介绍和安装

前言运维自动化 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代码管理(SCM):GitHub、GitLab、BitBucket、SubVersion 构建工具:maven、Ant、Gradle 自动部署:Capistrano、CodeDeploy 持续…

insertAdjacentHTML() 作用

insertAdjacentHTML()简介 insertAdjacentHTML() 方法是将文本解析为 element 元素,并将结果节点插入到DOM树中的指定位置。它不会重新解析它正在使用的元素,因此它不会破坏元素内的现有元素。这避免了额外的序列化步骤,使其比直接使用innerH…

京东|淘宝电商API数据采集接口C++/JAVA/python软件API接口调试

多语言环境下API接口的调用,是很多电商企业都要求的。 如何接入京东/淘宝API接口,如何请求? taobao.item_get 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_na…