ESP32(MicroPython)LVGL输入字符显示到OLED屏幕

news2025/1/12 16:09:05

本程序用于输入字符显示到OLED屏幕(按回车键输出字符到屏幕),依次输出六行字符,再按回车会清空屏幕并从第一行开始输出。

4ecb063db956430899956307505ad5bd.jpg

 代码如下

import lvgl as lv

import time

from espidf import VSPI_HOST

from ili9XXX import ili9341

from xpt2046 import xpt2046

import fs_driver

from machine import Pin

import onewire, ds18x20

from machine import SoftI2C

from ssd1306 import SSD1306_I2C #I2C的oled选该方法

 

# ------------------------------ 屏幕初始化操作 --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()

 

#创建软件I2C对象

i2c = SoftI2C(sda=Pin(2), scl=Pin(15))

#创建OLED对象,OLED分辨率、I2C接口

oled = SSD1306_I2C(128, 64, i2c)

 

y=0

# 2. 封装要显示的组件

class MyWidget():

    

    def __init__(self, scr):

        

        # 创建文本框

        ta = lv.textarea(scr)

        ta.set_one_line(False) # 关闭1行模式

        ta.set_size(240, 80) # 设置宽高

        ta.align(lv.ALIGN.TOP_MID, 0, 5) # 设置位置

        ta.add_event_cb(lambda e: self.textarea_event_handler(e, ta), lv.EVENT.READY, None) # 添加回调函数

        ta.add_state(lv.STATE.FOCUSED) # 设置光标

 

        # 定义数字键盘要显示的内容

        btnm_map = ["a", "b", "c","d", "e", "f", "\n",

                    "g", "h", "i","j", "k", "l", "\n",

                    "m", "n", "o","p", "q", "r", "\n",

                    "s", "t", "u","v", "w", "x", "\n",

                    "y", "z", "1","2", "3", "4", "\n",

                    "5", "6", "7","8", "9", "0", "\n",

                    ",", ".", "?","!",lv.SYMBOL.BACKSPACE, lv.SYMBOL.NEW_LINE, ""]

 

        # 按钮矩阵

        btnm = lv.btnmatrix(scr)

        btnm.set_size(230, 230) # 设置宽高

        btnm.align(lv.ALIGN.BOTTOM_MID, 0, -5) # 设置位置

        btnm.add_event_cb(lambda e: self.btnm_event_handler(e, ta), lv.EVENT.VALUE_CHANGED, None)

        btnm.clear_flag(lv.obj.FLAG.CLICK_FOCUSABLE) # 设置为非活跃,即文本框中的光标一直聚焦

        btnm.set_map(btnm_map) # 设置要显示的内容(数字键盘)

        

        # 设置有源蜂鸣器引脚

        self.p15 = Pin(15, Pin.OUT)

        self.p15.value(1) # 不响

        

    def textarea_event_handler(self, e, ta):

        global y

        oled.text(ta.get_text(), 0, y) #把输入的内容显示到屏幕

        oled.show() #执行显示

        y+=10

        if y==60:

            y=0

            oled.fill(0) #清屏,防止文字重叠

 

    def btnm_event_handler(self, e, ta):

        obj = e.get_target()

        txt = obj.get_btn_text(obj.get_selected_btn()) # 获取被点击的按钮的内容,例如数字3

        if txt == lv.SYMBOL.BACKSPACE: # 如果是退格键,那么就删除1个字符

            ta.del_char()

        elif txt == lv.SYMBOL.NEW_LINE: # 如果是回车键,那么就触发事件

            lv.event_send(ta, lv.EVENT.READY, None)

        elif txt:

            ta.add_text(txt) # 如果不是回车键,那么就将当前数字显示到文本框

            

        # 让蜂鸣器响1声

        self.p15.value(0)

        time.sleep(0.2)

        self.p15.value(1) # 不响

 

 

# 3. 创建要显示的组件

MyWidget(scr)

 

# 4. 显示screen对象中的内容

lv.scr_load(scr)

 

 

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

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

相关文章

模拟随机验证码

网拷一篇中英文文本,去除标点空格作为验证码字符集。 (本笔记适合对 python 的随机模块有一定了解的的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》&a…

如何在IDEA上实现JDBC编程

💕人生在世,不如意事常八九,若把烦恼全都写在纸上,时间长了纸也会烦。所以,没事的时候给自己多一些微笑,少一些烦恼。💕 🐼作者:不能再留遗憾了🐼 &#x1f3…

【备战秋招】每日一题:4月23日美团春招第二题:题面+题目思路 + C++/python/js/Go/java带注释

为了更好的阅读体检,为了更好的阅读体检,,可以查看我的算法学习博客第二题-制作骰子 在线评测链接:P1246 题目内容 塔子哥是一个喜欢手工制作的人,他经常用各种材料制作一些有趣的物品。他最近想要制作一个骰子,但是…

Oracle11gRAC安装JVM组件

目录: 安装前检查:安装JVM组件:方式一(图形化安装)方式二(执行脚本安装) 检查DB JVM状态脚本 安装前检查: 检查角色: select * from dba_roles where ROLE in (JAVAIDP…

分布式安装配置spark-3.2.3

Spark是一个基于内存的大数据计算框架,可以与Hadoop集成,提供更快速的数据处理能力。本文将介绍如何在三个Ubuntu系统上搭建一个Spark集群。 主要步骤包括: 准备工作:下载安装包,设置环境变量,解压安装包…

基于Elasticsearch与Hbase组合框架的大数据搜索引擎

本项目为学校大数据工程实训项目,共开发4周,答辩成绩不错。代码仓库放文章尾,写的不好,代码仅供参考。 搜索 对于结构化数据,因为它们具有特定的结构,所以我们一般都是可以通过关系型数据库(M…

【读书笔记】《房思琪的初恋乐园》- 林奕含

文章目录 第一章 乐园第二章 失乐园 第一章 乐园 钱爷爷说:“两个小美女有心事啊?”怡婷最恨人家叫她们两个小美女,她很这种算术上的好心。 在外人看来,女生无论长得漂亮还是长得不怎么样都是一种原罪。或者正如上野千鹤子所说那样…

pocketgl

pocketgl支持在自己的web页面集成类似 Shadertoy、 Threejs 等基于webGL 的渲染图形窗口, 并且拥有shader代码高亮编辑器支持实时修改和预览。 其自带的mesh包含两个Sphere 和 Teaport, 同时支持上床自定义的网格 和 背景天空盒。其既支持像Shadertoy 这种只包含fra…

[元带你学: eMMC协议详解 13] 数据读(Read) 写(Write) 详解

依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载。 所在专栏 《元带你学: eMMC协议详解》 内容摘要 全文 4700字, 主要内容 1. 数据读取 2. 块读取操作 3. 数据写 4.块写操作 参考 1. 数据读取 当没有数据传输时,DATO-D…

Python使用happybase写入HBase

HBase是一个分布式的、面向列的NoSQL数据库,可以存储大量的非结构化或半结构化的数据。tif是一种常见的影像文件格式,可以存储多波段的栅格数据。本文将介绍如何使用Python的happybase模块和gdal模块,从tif格式的影像文件中读取数据&#xff…

排序算法的奇妙冒险

排序算法的奇妙冒险 一.排序的概念1.1 排序的定义1.2 排序的稳定性1.3 排序的内排序和外排序 二.插入排序2.1 直接插入排序2.2 希尔排序 三.选择排序3.1直接选择排序3.2 堆排序 四.交换排序4.1 冒泡排序4.2 快速排序**选取基准值的方法**快速排序的优化非递归实现快速排序 五.归…

Web3简述MetaMask并演示谷歌安装MetaMask扩展程序方式

Web3到现在理论这段是说的有点太多了 那么 我们先来看个东西 叫 MetaMask 这个在我们项目开发过程中需要使用 其实 你如果去找MetaMask 可能会被一些关键字下到 可能会看到 虚假 诈骗等关键字 因为 这个东西本事就是一个开源的以太坊的一个钱包 那么 钱包肯定就是用来管理资产…

LoadDef python工具包学习一:计算love数

首先在github下载这个工具箱:https://github.com/hrmartens/LoadDef 下载完毕,解压缩进入如下的界面,点击进入working工作文件夹。在doc文件夹里面有帮助文档和教程,有需要的可以仔细阅读。 loaddef主要的功能模块包括&#xff1…

力扣日记1494

1. 题目 [LeetCode 1494. 并行课程 II]https://leetcode.cn/problems/parallel-courses-ii/) 1.1 题意 严格按照选课先修顺序选课,每个学期选课数有上限,求选完所有课程的最短学期数 1.2 分析 这道题的数据量很小,而且作为困难题&#xff…

一起学 WebGL:纹理对象学习

大家好,我是前端西瓜哥,今天我们来了解 WebGL 的纹理对象(Texture) 纹理对象,是将像素(texels)以数组方式传给 GPU 的对象,常见场景是贴图,就是将图片的数据应用到 3D 物…

vue 根据word摸板导出word文档,并压缩为zip

yarn add jszip3.10.1 yarn add jszip-utils0.1.0 yarn add pizzip3.1.4 yarn add docxtemplater3.29.5 yarn add docxtemplater-image-module-free1.1.1 yarn add file-saver2.0.5 注意:这里的fileUrl必须是绝对路径,否则可能会报 is not zip的错误&…

当pytest遇上poium会擦出什么火花

当pytest遇上poium会擦出什么火花 首先,创建一个test_sample/test_demo.py 文件,写入下面三行代码。 def test_bing(page):page.get("https://www.bing.com")assert page.get_title "必应"不要问题 page 从哪里来,打开…

(LLM) 的所有知识;10分钟了解向量数据库;微软 Bing 可以识别图片了;

🦉 AI新闻 🚀 微软 Bing 可以识图」了,吊打 GPT-4? 摘要:微软 Bing 最新识图功能让用户可以上传图片并进行编程、做题、看病等操作,还能分析梗图笑点。然而在某些情况下表现不佳,例如无法数清…

技术分享 | i.MX8M Plus开发板 固定IP地址以及单网口多IP设置

以启扬IMX8MP开发板为例,给大家分享固定IP地址以及单网口多IP设置的步骤流程。 固定IP地址设置 20-wired.network 重启Network生效 网口多ip设置 对于一些网络管理的命令 connman设置(参考) imx8 yocto系统的init system使用systemd&#xff…

精选Java SSM 框架基础面试题

一、Spring面试题 1、Spring 在ssm中起什么作用? Spring:轻量级框架作用:Bean工厂,用来管理Bean的生命周期和框架集成。两大核心:1、IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,se…