ESP32(Micro Python) LVGL 传感器数值显示

2023-11-17

本程序用于显示SR04超声波传感器和BMP280气压温度传感器的读数。由于高度数值类型不符合要求,BMP280改为显示气压和温度值。气压值分两部分显示,分别为千帕值-100(避免超出表盘显示范围)和千帕值的两位小数。由于标签不能显示动态数值,不使用数字显示。

f6fd2a4b9b0f480ba51eb418caed58d3.jpeg

 目前本人只了解到仪表盘组件可以进行动态显示,但不能调节显示范围。如果有了解更多可进行动态显示的组件的读者请在评论区中告知。

代码如下

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 random

from machine import SoftI2C

import bmp280

from hcsr04 import HCSR04

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

#定义HCSR04控制对象

hcsr04=HCSR04(trigger_pin=15, echo_pin=2)

#初始化BMP280,定义第二个I2C接口i2c2用于连接BMP280

i2c2 = SoftI2C(sda=Pin(22), scl=Pin(21))

BMP = bmp280.BMP280(i2c2)

# 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 Widget1():

    def __init__(self, scr,s,x,y,r1,r2,v1,v2): #尺寸,x轴偏移量,y轴偏移量,动画起始值,动画结束值,开始处蓝色区域最大值,结尾处红色区域最小值

        # 1. 创建仪表盘对象

        self.meter = lv.meter(scr)

        self.meter.align(lv.ALIGN.CENTER,x,y) # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)

        self.meter.set_size(s, s) # width: s height: s

        # 2. 创建刻度线对象

        scale = self.meter.add_scale()

        # -------- 子刻度线 --------

        # 51:短线的个数

        # 1:短线宽度(单位像素)

        # 7:短线长度

        # 最后1个参数:颜色

        self.meter.set_scale_ticks(scale, 21, 1, 7, lv.palette_main(lv.PALETTE.GREY))

        # -------- 主刻度线 --------

        # 10: 多少个子刻度线显示1个主刻度线

        # 2: 宽度

        # 10: 长度

        # 下一个参数:颜色

        # 10: 文字与线的距离 10像素

        self.meter.set_scale_major_ticks(scale, 4, 2, 10, lv.color_black(), 5)

        # 3. 添加警示刻度线

        # 在起点添加蓝色弧

        blue_arc = self.meter.add_arc(scale, 1, lv.palette_main(lv.PALETTE.BLUE), 0)

        self.meter.set_indicator_start_value(blue_arc, r1)

        self.meter.set_indicator_end_value(blue_arc, v1)

        # 在刻度开始处使刻度线为蓝色

        blue_arc_scale = self.meter.add_scale_lines(scale, lv.palette_main(lv.PALETTE.BLUE), lv.palette_main(lv.PALETTE.BLUE), False, 0)

        self.meter.set_indicator_start_value(blue_arc_scale, r1)

        self.meter.set_indicator_end_value(blue_arc_scale, v1)

        # 在末端添加红色弧

        red_arc = self.meter.add_arc(scale, 1, lv.palette_main(lv.PALETTE.RED), 0)

        self.meter.set_indicator_start_value(red_arc, v2)

        self.meter.set_indicator_end_value(red_arc, r2)

        # 使刻度线在刻度末端变为红色

        red_arc_scale = self.meter.add_scale_lines(scale, lv.palette_main(lv.PALETTE.RED), lv.palette_main(lv.PALETTE.RED), False, 0)

        self.meter.set_indicator_start_value(red_arc_scale, v2)

        self.meter.set_indicator_end_value(red_arc_scale, r2)

        # 4. 仪表指针

        # 4: 宽度

        # 下一参数:颜色

        # -10:指针与刻度线距离

        self.indic = self.meter.add_needle_line(scale, 2, lv.palette_main(lv.PALETTE.GREY), -5)

        # 5. 创建动画对象

        a = lv.anim_t()

        a.init()

        a.set_var(self.indic)

        temp = self.timer_cb()

        a.set_values(0, temp)

        a.set_time(500)

        # a.set_repeat_delay(100)

        # a.set_playback_time(500)

        # a.set_playback_delay(100)

        # a.set_repeat_count(lv.ANIM_REPEAT_INFINITE)

        a.set_custom_exec_cb(self.set_value)

        lv.anim_t.start(a)

        # 创建一个标签label

        self.label = lv.label(scr)

        self.label.set_text("Distance_cm") # 默认值

        self.label.align_to(self.meter, lv.ALIGN.OUT_BOTTOM_MID, 0, 5) # label的中间与滑块的上外边框中间对齐,然后y向下5像素 x不变

        # 6. 添加定时器

        lv.timer_create(self.timer_cb, 200, None) # 延时

    def set_value(self, anmi_obj, value):

        """动画回调函数"""

        self.meter.set_indicator_value(self.indic, value)

    def timer_cb(self, timer=None):

        """定时器回调函数"""

        ret=round(hcsr04.distance_cm()/1)

        self.meter.set_indicator_value(self.indic, ret)

        return ret

class Widget2():

    def __init__(self, scr,s,x,y,r1,r2,v1,v2): #尺寸,x轴偏移量,y轴偏移量,动画起始值,动画结束值,开始处蓝色区域最大值,结尾处红色区域最小值

        # 1. 创建仪表盘对象

        self.meter = lv.meter(scr)

        self.meter.align(lv.ALIGN.CENTER,x,y) # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)

        self.meter.set_size(s, s) # width: s height: s

        # 2. 创建刻度线对象

        scale = self.meter.add_scale()

        # -------- 子刻度线 --------

        # 51:短线的个数

        # 1:短线宽度(单位像素)

        # 7:短线长度

        # 最后1个参数:颜色

        self.meter.set_scale_ticks(scale, 21, 1, 7, lv.palette_main(lv.PALETTE.GREY))

        # -------- 主刻度线 --------

        # 10: 多少个子刻度线显示1个主刻度线

        # 2: 宽度

        # 10: 长度

     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ESP32(Micro Python) LVGL 传感器数值显示 的相关文章

  • 判断线程是否已经启动

    如何判断Python线程是否已经启动 有一个方法is alive 但这是真的before and while一个线程正在运行 你可以看看ident领域的Thread实例 这Python 2 7 线程文档 http docs python o
  • 如何查找分布式dask中任务失败的原因?

    我正在开发一个分布式计算系统dask distributed 我通过以下方式提交给它的任务Executor map功能有时会失败 而其他看起来相同的功能却可以成功运行 该框架是否提供了诊断问题的方法 update我所说的失败是指增加 Bok
  • 多重处理:如何从子进程重定向标准输出?

    注意 我见过multiprocessing Process 的日志输出 https stackoverflow com questions 1501651 log output of multiprocessing process 不幸的是
  • 在 python 2 和 3 的spyder之间切换

    根据我在文档中了解到的内容 它指出您只需使用命令提示符创建一个新变量即可轻松在 2 个 python 环境之间切换 如果我已经安装了 python 2 7 则 conda create n python34 python 3 4 anaco
  • 如何有条件地组合两个相同形状的 numpy 数组

    这听起来很简单 但我想我把它想得太复杂了 我想创建一个数组 其元素是从两个形状相同的源数组生成的 具体取决于源数组中哪个元素更大 为了显示 import numpy as np array1 np array 2 3 0 array2 np
  • 蟒蛇 |如何将元素随机添加到列表中

    有没有一种方法可以将元素随机添加到列表中 内置函数 ex def random append lst a lst append b lst append c lst append d lst append e return print ls
  • 返回不包括指定键的字典副本

    我想创建一个函数 返回字典的副本 不包括列表中指定的键 考虑这本词典 my dict keyA 1 keyB 2 keyC 3 致电without keys my dict keyB keyC 应该返回 keyA 1 我想用一行简洁的字典理
  • 如何从网站中提取冠状病毒病例?

    我正在尝试从网站中提取冠状病毒 https www trackcorona live https www trackcorona live 但我得到了一个错误 这是我的代码 response requests get https www t
  • 使用 Python 抓取维基百科数据

    我正在尝试从以下内容中检索 3 列 NFL 球队 球员姓名 大学球队 维基百科页面 http en wikipedia org wiki 2008 NFL draft 我是 python 新手 一直在尝试使用 beautifulsoup 来
  • 在 Windows 上将 Word2vec 与 Tensorflow 结合使用

    In 本教程文件 https github com tensorflow models blob master tutorials embedding word2vec py L45通过 Tensorflow 找到以下行 第 45 行 来加
  • 如何检查包含 NaN 的列表 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 在我的 for 循环中 我的代码生成一个如下所示的列表 list 0 0 0 0 sum 0 0 0 0 该循环生成所有其他数字向量 但它也
  • 如何在 Keras 中使用部分输入进行训练,其余部分用于损失函数

    我是 Keras 新手 正在尝试实现神经网络机器学习模型 输入张量看起来像 X1 X2 和输出 Y 注意 X1 和 X2 是相关的 在模型中 只有 X1 将用于训练 但 X1 和 X2 都将传递给损失函数 该损失函数是 X1 X2 y pr
  • 别碰我的女人

    我讨厌的一件事迪斯图尔斯 http docs python org distutils 我猜他是邪恶的人 他这样做了 https github com python cpython blob 300dd552b15825abfe0e367a
  • 从 python 中的缩进文本文件创建树/深度嵌套字典

    基本上 我想迭代一个文件并将每行的内容放入一个深层嵌套的字典中 其结构由每行开头的空格数量定义 本质上 目标是采取这样的事情 a b c d e 并将其变成这样的东西 a b c d e Or this apple colours red
  • 如何获取 Matplotlib 生成的散点图的像素坐标?

    我使用 Matplotlib 生成散点图的 PNG 文件 现在 对于每个散点图 除了 PNG 文件之外 我还会also就像生成散点图中各个点的像素坐标列表一样 我用来生成散点图 PNG 文件的代码基本上是这样的 from matplotli
  • PermanentTaskFailure:“模块”对象没有属性“迁移”

    我在 google appengine 上使用 Nick Johnson 的批量更新库 http blog notdot net 2010 03 Announcing a robust datastore bulk update utili
  • python 中的基本矩阵转置

    我尝试了 python 中矩阵转置的最基本方法 但是 我没有得到所需的结果 接下来是代码 A 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 print A def TS A B A for i in range len A
  • dask allocate() 或 apply() 中的变量列名

    我有适用于pandas 但我在将其转换为使用时遇到问题dask 有一个部分解决方案here https stackoverflow com questions 32363114 how do i change rows and column
  • SpaCy 中的自定义句子边界检测

    我正在尝试在 spaCy 中编写一个自定义句子分段器 它将整个文档作为单个句子返回 我编写了一个自定义管道组件 它使用以下代码来执行此操作here https github com explosion spaCy issues 1850 但
  • Python列表对象属性“append”是只读的

    正如标题所说 在Python中 我试图做到这一点 以便当有人输入一个选择 在本例中为Choice13 时 它会从密码列表中删除旧密码并添加新密码 passwords mrjoebblock mrjoefblock mrjoegblock m

随机推荐

  • Unity2018打包图集(SpriteAtlas)以及使用

    将编辑器中Edit ProjectSettings Edit SpritePacker Mode设置为AlwaysEnabled Assets右键Create创建SpriteAtlas 将需要打包图集的图片文件夹选中 然后点击packpre
  • C语言:二分查找(折半查找),冒泡排序

    目录 一 二分查找 二分查找的需注意的细节 二 冒泡排序 冒泡排序需注意的细节 本篇博客详细讲解常用的几个方法 分别是二分查找和冒泡排序法 一 二分查找 二分查找 意思就是每次都分为两部分 将查找的数字和中间数字相比 判断大小后确定所查找数
  • ajax 填充下拉框,使用ajax填充下拉框--普通select

    1 与普通select有区别的是另一种带分组的select 2 带分组的select见另一篇 使用ajax填充下拉框 分组select 3 两者均使用ajax填充 数据来源于后台大哥 效果如下图 html 运营商 js callBack f
  • Centos 8.0中安装Redis服务器

    企业级开发中 经常需要把一些中间件安装在Linux服务上 主要考虑到linux服务器的性能吧 1 官网下载Linux版安装包 Redis 楼主使用的是 6 2 1 目前最新是6 2 6 差别不大 2 使用XShell 和Xftp连接Cent
  • 关于C++智能指针

    普通指针到智能指针的转换 int iPtr new int 42 shared ptr
  • Android Studio中的keystore

    跟着导师第一次做一个使用人数达到4位数的软件 软件提供了更新 结果在更新的时候发现 有的人显示的是已安装了存在签名冲突的同名数据包 不能安装 查了下发现是keystore的问题 直接用apk文件夹下的debug版本的apk放在服务器给他们安
  • JVM jmap命令

    作用 主要用来生成堆dump文件 C Users qianqian gt jmap h Usage jmap option
  • 为什么虚拟现实视频看上去那么粗糙?

    分辨率 Gear VR 可以支持超高分辨率 UHD 的播放 在像素方面 UHD视频每一帧有 3840 像素宽 x 1920 像素高的大小 视频经常播放 30 帧每秒 较低的分辨率也支持高帧率 Galaxy S6 手机显然是能够轻松地播放 4
  • docker内部sshfs

    container内部挂载前提 默认docker容器启动后无法通过sshfs挂载远程目录 可通过在构建container的时候添加 privileged 选项 挂载 sshfs xxx 111 111 111 11 remote dir l
  • Java实现飞机大战小游戏(一)

    day1 创建游戏窗口 1 设置背景图片 BaseFrame类 public class BaseFrame extends JFrame 设置窗体宽度和高度 public static int frameWidth 512 游戏界面宽度
  • cmake 提前结束处理命令: return

    有时候 我们有这样的需求 当处理到某个地方的时候 后面的我们都不想处理或者不需要处理的时候 就可以提前结束当前的处理逻辑 回到父级去处理 在C C 中 我们有break关键字跳出当前循环 continue关键字进入下一次循环 return关
  • 使用Redis作缓存时,怎么保证缓存和数据库的一致性?

    使用Redis作缓存时 怎么保证缓存和数据库的一致性 文章目录 使用Redis作缓存时 怎么保证缓存和数据库的一致性 1 先更新数据库 再更新缓存 2 先删缓存 再更新数据库 3 先更新数据库 再删缓存 其他造成缓存和数据库不一致的原因 方
  • 华为OD机试2022Q4【硬件产品销售方案】97%正确率

    200分的题目 对了97 题目记得不是很清楚了 给定一个amount 代表你这个企业拥有的钱 给定一行 代表一个工厂拥有的所有零件的价格 切库存无限量 例如 100 200 200 300 500 代表工厂有5种零件 每种零件单价为100
  • YARN核心组件功能特性分析

    1 YARN Client YARN Client 提交Application 到ResourceManager 它会首先创建一个Application上下文件对象 并设置ApplicationMaster必需的资源请求信息 然后提交到Re
  • 这个框架真心可以!10分钟就搞定一个网站!

    最近有很多小伙伴问我 有没有能快速能搭建网站的框架 首先我去尝试了低代码 快确实快 但是样式和功能确实差点意思 偶然间 我发现一款神奇的网站框架 VuePress 我尝试部署了下 然后一下爱上了它 我发现很多博主也都是用的这款框架搭建的个人
  • ntp服务器地址是什么协议,ntp服务器地址的介绍与解释

    ntp服务器地址的介绍与解释 分类 云服务资讯 编辑 浏览量 100 2021 07 23 14 43 16 NTP属于运用层协议 依据UDP传输 运用的端口号为123 用来同步网络中分布式时间服务器和客户端之间的时间 使网络中的设备供应依
  • 某宝sign逆向(以商品评论采集为例)

    文章目录 1 目标网址 2 携带参数分析 3 sign值逆向 4 以一个商品为例采集商品评论 往期逆向文章推荐 JS逆向之艺恩数据 JS逆向之今日头条 signature JS逆向之网易云音乐 JS逆向之巨量星图sign签名 JS逆向之巨量
  • Android内存如何优化?阿里技术员工整理亲授,建议收藏

    作者 山鱿鱼说 链接 https juejin cn post 7106289745499521054 基础知识 内存概念 VSS Virtual Set Size 虚拟耗用内存 包含共享库占用的内存 RSS Resident Set Si
  • animation中CrossFade的问题

    之前一个项目在教室中有很多带动画的学生模型 运行中在摄像机视野内的模型动画顺利播放 但是视野外的会卡住 或者在sence视图中能看到的会顺利播放 最后把animation的CrossFade播放改为直接play播放 问题解决 具体原因出在哪
  • ESP32(Micro Python) LVGL 传感器数值显示

    本程序用于显示SR04超声波传感器和BMP280气压温度传感器的读数 由于高度数值类型不符合要求 BMP280改为显示气压和温度值 气压值分两部分显示 分别为千帕值 100 避免超出表盘显示范围 和千帕值的两位小数 由于标签不能显示动态数值