物联网开发笔记(63)- 使用Micropython开发ESP32开发板之控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程:显示中文

news2024/11/26 16:27:45

一、目的

        这一节我们学习如何使用我们的ESP32开发板来控制ILI9341 3.2寸TFT-LCD触摸屏进行LVGL图形化编程的第一步:显示中文。

二、环境

        ESP32 + 3.2寸 ILI9341触摸屏 + Thonny IDE + 几根杜邦线 + Win10

接线方法:请看上一篇文章。

三、流程介绍       

        lv_micropython固件中默认不包含中文。如果想要显示中文汉字,需要进行如下的操作:

        1,制作需要显示的汉字成为1个独立的文件(常用汉字有好几千个,不能都制作,ESP32没那   么大的存储空间)
        2,python程序加载制作的字库文件
        3,需要显示汉字的位置设置字体

四、安装制作中文字体的工具

        想要制作需要显示的文字,需要一个工具,这个工具需要用如下的流程安装:以Windows为例。

    1,安装nvm

        从官方网站下载或者从文末百度网盘下载。直接默认安装即可。

官方下载地址:https://github.com/coreybutler/nvm-windows/releases

     2,使用nvm安装node.js(包含npm)

用管理员方式打开windows 命令终端,输入nvm,验证nvm是否安装成功,如果输出以下信息则代表成功。

 为了能够让nvm安装node时更快,分别执行下面2个命令:

nvm node_mirror https://npm.taobao.org/mirrors/node/
nvm npm_mirror https://npm.taobao.org/mirrors/npm/

下面安装node.js,命令如下:

nvm install 16.18.0

   具体看下图:

注意:需要把16.18.0文件夹设置在系统变量PATH中

 3,使用npm安装lvgl模块

        安装lvgl字体生成模块。同样以管理员打开命令终端:

输入以下命令使用淘宝镜像,加速安装

npm config set registry https://registry.npm.taobao.org

然后输入以下命令:

npm i lv_font_conv -g

 验证安装工具成功,打开一个新的命令行窗口,输入以下命令:

lv_font_conv

  如果出现以下信息,则代表安装成功:

 上述安装成功后会生成lv_font_conv工具,用这个工具制作。

五、制作中文字体

        1,下载字库

        当以上流程做完后,接下来可以我们来生成字体。想在ESP32上显示什么样的字体?

下面以阿里巴巴普惠体的字体库为例讲解:字体在文末下载哦!

         2,制作

        解压下载的压缩包,解压后是一个文件夹,进入这个文件夹。按下图输入CMD回车

 输入以下命令:

lv_font_conv --size 20 --format bin --bpp 1 --font Alibaba-PuHuiTi-Medium.ttf --symbols 北京欢迎你 --no-compress -o alibabapuhuiti-20.bin

命令解释:

1,上面的命令表示生成一个文件,名字叫做alibabapuhuiti-20.bin

2,这个字体文件中只有北京欢迎你这5个字,所以非常小,这里修改为你需要制作的文字

注意:上述命令的空格一定是英文的空格,中文的空格会失败

 

 这个字体文件文末下载。

六、显示中文

        使用上面的字体文件,打开Thonny IDE,输入以下代码,我们来测试下:

import lvgl as lv
import time
from espidf import VSPI_HOST
from ili9XXX import ili9341
from xpt2046 import xpt2046
import fs_driver


# ------------------------------ 屏幕初始化操作 --start------------------------
# 屏幕宽高
WIDTH = 240
HEIGHT = 320


# 创建显示屏对象
disp = ili9341(miso=19, mosi=23, clk=18, cs=5, dc=26, rst=27, power=14, backlight=-1, backlight_on=0, power_on=0, rot=0x80,
        spihost=VSPI_HOST, mhz=60, factor=16, hybrid=True, width=WIDTH, height=HEIGHT,
        invert=False, double_buffer=True, half_duplex=False, initialize=True)

# 创建触摸屏对象
touch = xpt2046(cs=25, spihost=VSPI_HOST, mosi=-1, miso=-1, clk=-1, cal_y0 = 423, cal_y1=3948)
# ------------------------------ 屏幕初始化操作 --stop------------------------


# 1. 创建显示screen对象。将需要显示的组件添加到这个screen才能显示
scr = lv.obj()  # scr====> screen 屏幕
fs_drv = lv.fs_drv_t()
fs_driver.fs_register(fs_drv, 'S')
scr = lv.scr_act()
scr.clean()


# 2. 封装的需要显示的按钮
class CounterBtn():
    def __init__(self, scr):
        self.cnt = 0
        btn = lv.btn(scr)  # 将当前按钮与screen对象进行关联
        # btn.set_pos(20, 10)  # 相对于屏幕左上角 x为20,y为10
        btn.set_size(120, 50)  # 设置按钮的宽度为120, 高度为50
        btn.align(lv.ALIGN.CENTER,30,0)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
        self.myfont_cn = lv.font_load("S:./alibabapuhuiti-20.bin")
        label = lv.label(btn)  # 在按钮上创建一个标签Label,用来显示文字用
        label.set_style_text_font(self.myfont_cn, 0)  # set the font
        label.set_text("北京欢迎你")  # 设置文字内容
        label.center()  # 相对于父对象居中


# 3. 创建按钮
counterBtn = CounterBtn(scr)

# 4. 显示screen对象中的内容
lv.scr_load(scr)


# ------------------------------ 看门狗,用来重启ESP32设备 --start------------------------
try:
    from machine import WDT
    wdt = WDT(timeout=1000)  # enable it with a timeout of 2s
    print("提示: 按下Ctrl+C结束程序")
    while True:
        wdt.feed()
        time.sleep(0.9)
except KeyboardInterrupt as ret:
    print("程序停止运行,ESP32已经重启...")
    time.sleep(10)
# ------------------------------ 看门狗,用来重启ESP32设备 --stop-------------------------

测试效果:

 

 七、备注

中文显示知识,在研究的过程中参考的有价值的链接如下:

    1,使用字体的demo:https://github.com/lvgl/lv_binding_micropython/blob/master/examples/Dynamic_loading_font_example.py
    2, lv_font_conv的安装以及使用:https://github.com/lvgl/lv_font_conv

八、下载文件

链接: https://pan.baidu.com/s/1VZ5SeVN0Cr1Z1AVxGHpatA 提取码: pfk8 复制这段内容后打开百度网盘手机App,操作更方便哦

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

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

相关文章

Verilog刷题HDLBits——Conwaylife

Verilog刷题HDLBits——Conwaylife题目描述代码结果题目描述 Conway’s Game of Life is a two-dimensional cellular automaton. The “game” is played on a two-dimensional grid of cells, where each cell is either 1 (alive) or 0 (dead). At each time step, each c…

【图像融合】小波变换(加权平均法+局域能量+区域方差匹配)图像融合【含Matlab源码 1819期】

⛄一、小波变换彩色图像融合简介 1 前言 图像融合是将不同传感器所获得的多个图像根据某种算法进行融合处理,取长补短,使一幅图像能够更清楚、更准确地反映多幅图像的信息,多聚焦彩色图像融合是图像融合的一个分支。目前在各种图像采集与分析系统中已使用的CCD数码相机,对于聚…

分享7 个VUE项目用得上的JavaScript库

借助开源库加速VUE项目的开发进度是现代前端开发比较常见的方式,平常收集一些JavaScript库介绍,在遇到需要的时候可以信手拈来。 VUE 生态有很多不错的依赖库或者组件,是使用VUE开发前端的原因之一。 1. vueuse 这是 GitHub 上星最多的库之…

【coarse-to-fine:基于频谱和空间损失约束】

UPanGAN: Unsupervised pansharpening based on the spectral and spatial loss constrained Generative Adversarial Network (UPanGAN:基于频谱和空间损失约束的生成式对抗网络的无监督全色锐化) 研究发现,在大多数基于神经网…

扎根底层核心技术:OPPO发布旗舰蓝牙音频SoC芯片

OPPO自研芯片能力更进一步。 2022年12月14日,OPPO发布自研芯片马里亚纳MariSilicon Y,作为一颗旗舰蓝牙音频SoC,实现了三大核心技术突破,使OPPO具备了计算连接能力的蓝牙SoC平台的设计能力。 这是OPPO发布的第二款自研芯片。去年…

初学者数据分析——Python职位全链路分析

最近在做Python职位分析的项目,做这件事的背景是因为接触Python这么久,还没有对Python职位有一个全貌的了解。所以想通过本次分析了解Python相关的职位有哪些、在不同城市的需求量有何差异、薪资怎么样以及对工作经验有什么要求等等。分析的链路包括&…

用了那么久的Vue,你了解Vue的报错机制吗?

Vue的5种处理Vue异常的方法 相信大家对Vue都不陌生。在使用Vue的时候也会遇到报错,也会使用浏览器的F12 来查看报错信息。但是你知道Vue是如何进行异常抛出的吗?vue 是如何处理异常的呢?接下来和大家介绍介绍,Vue是如何处理这几种…

【数据结构】树以及二叉树的概念

作者:一个喜欢猫咪的的程序员 专栏:《数据结构》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 目录 树的概念: 树的相关概念: 树如何表示&#xff…

Anaconda中Python虚拟环境的创建、使用与删除

本文介绍在Anaconda环境下,创建、使用与删除Python虚拟环境的方法。 在Python的使用过程中,我们常常由于不同Python版本以及不同第三方库版本的支持情况与相互之间的冲突情况,而需要创建不同的Python虚拟环境;在Anaconda的帮助下&…

如何使用Python构建Telegram机器人来生成随机引语

使用Python构建Telegram机器人以生成随机引语 聊天机器人是用于进行在线聊天对话的软件应用程序,通过文本或文本转语音的方式实现客户服务的自动化。[聊天机器人]可以用于提醒、预约等事情,也可以在社交媒体平台上使用。 在本教程中,我们将…

会自动化就能拿20K?不,你这顶多算会点皮毛···

前段时间公司要招2个自动化测试,同事面了几十个候选人,发现了一个很奇怪的现象,面试的时候,如果问的是框架api、脚本编写这些问题,基本上个个都能对答如流,等问到实际项目的时候,类似“怎么从0开…

如何实现一个基于WebRTC的音视频通信系统

文章有点长,推荐先收藏前言 目前市场上音视频技术方案大致分为以下几类,WebRTC因其超低延时、集成音视频采集传输等优点,是在线教育、远程会议等领域首选技术。 前言 目前市场上音视频技术方案大致分为以下几类,WebRTC因其超低延…

10年网安经验分享:一般人别瞎入网络安全行业

小白入门网络安全,如何选择方向? 如果你是一个新手小白,那么在最开始方向选择上面这一步是至关重要的,一旦你选错了那很可能就要和安全“saygoodbye”了。 很多小白刚开始的时候还没开始学会走就想着飞了,计算机功底…

四六级口语|考研复试口语|满满干货

目录 1.Which do you prefer to use, credit cards or cash?/Do you prefer the credit card or cash? 2.When you shop, do you prefer to go by yourself or with someone?

指针进阶(3)--玩转指针

指针进阶 内容不多,但面面俱到,都是精华 1.回调函数: 2.详解qsort函数参数: 回调函数就是,把一个函数的地址,放在函数指针中,然后将该指针作为一个参数,传到 另一个函数中&#x…

04.南瓜树低代码平台平台 分析后的感想

随着企业产品的不断完善,后续将有时间来推进产品转向低代码平台化。 低代码平台不是无代码平台,采用配置的方式完成UI/流程/报表的处理,有业务人员在完成基本的产品框架后,由研发人员完成业务规则代码固化,最终达到产…

MobSDK 封装MobSDK基础包

平台兼容性 Android Android CPU类型 iOS 适用版本区间:4.4 - 12.0 armeabi-v7a:支持,arm64-v8a:支持,x86:支持 原生插件通用使用流程: 购买插件,选择该插件绑定的项目。在HB…

3. 实例化Bean的三种方式

实例化Bean的三种方式 一、构造方法方式 1.1 BookDaoImpl package com.lin.dao.daoimpl;import com.lin.dao.BookDao;public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println("BookDao的无参构造器");}/*** 数据层实现*/public …

了解Linux 操作系统!开篇!!!

【推荐阅读】 Linux内核CPU调度域内容讲解 关于如何快速学好,学懂Linux内核。内含学习路线 一文了解Linux上TCP的几个内核参数调优 Linux 接口 Linux 系统是一种金字塔模型的系统,如下所示 应用程序发起系统调用把参数放在寄存器中(有时候放在栈中)…

Python解题 - CSDN周赛第15期 - 客栈的咖啡

本期遇上官方大放水,四道题里有三道都在每日一练里做过,再加上比赛时间不太友好,参与人数不多,问哥竟然混了个第一名,真是惭愧。。。就当是官方在奖励那些平时多多参加每日一练的童鞋们了。 第一题:求并集 …