ESP32(MicroPython)LVGL图形界面 RGB灯闪烁控制器

2023-11-07

ESP32(MicroPython) RGB灯闪烁控制器

本程序通过依次调整RGB灯中每个灯的PMW频率和占空比实现对RGB灯闪烁的控制。

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 PWM

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

PMW1=PWM(Pin(12),freq=1,duty=1023)
PMW2=PWM(Pin(13),freq=1,duty=1023)
PMW3=PWM(Pin(15),freq=1,duty=1023)

class Widget1():
    def __init__(self, scr,x,y,w,r1,r2): #x轴偏移量,y轴偏移量,宽度,高度,最小值,最大值
        # 创建滑块slider组件
        self.slider = lv.slider(scr)
        self.slider.set_width(w)  # 设置滑块的宽度
        self.slider.set_range(r1, r2)  # 默认值是0-100
        self.slider.align(lv.ALIGN.CENTER,x,y)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
        self.slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)  # 添加回调函数

        # 创建一个标签label
        self.label = lv.label(scr)
        self.label.set_text("1")  # 默认值
        self.label.align_to(self.slider, lv.ALIGN.OUT_TOP_MID, 0, -5)  # label的中间与滑块的上外边框中间对齐,然后y向上15像素 x不变

    def slider_event_cb(self, evt):
        slider = evt.get_target()
        # 修改label的值
        freq1=slider.get_value()
        PMW1.freq(freq1)
        self.label.set_text(str(freq1))
        
class Widget2():
    def __init__(self, scr,x,y,w,r1,r2): #x轴偏移量,y轴偏移量,宽度,高度,最小值,最大值
        # 创建滑块slider组件
        self.slider = lv.slider(scr)
        self.slider.set_width(w)  # 设置滑块的宽度
        self.slider.set_range(r1, r2)  # 默认值是0-100
        self.slider.align(lv.ALIGN.CENTER,x,y)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
        self.slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)  # 添加回调函数

        # 创建一个标签label
        self.label = lv.label(scr)
        self.label.set_text("1")  # 默认值
        self.label.align_to(self.slider, lv.ALIGN.OUT_TOP_MID, 0, -5)  # label的中间与滑块的上外边框中间对齐,然后y向上15像素 x不变

    def slider_event_cb(self, evt):
        slider = evt.get_target()
        # 修改label的值
        freq2=slider.get_value()
        PMW2.freq(freq2)
        self.label.set_text(str(freq2))
        
class Widget3():
    def __init__(self, scr,x,y,w,r1,r2): #x轴偏移量,y轴偏移量,宽度,高度,最小值,最大值
        # 创建滑块slider组件
        self.slider = lv.slider(scr)
        self.slider.set_width(w)  # 设置滑块的宽度
        self.slider.set_range(r1, r2)  # 默认值是0-100
        self.slider.align(lv.ALIGN.CENTER,x,y)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
        self.slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)  # 添加回调函数

        # 创建一个标签label
        self.label = lv.label(scr)
        self.label.set_text("1")  # 默认值
        self.label.align_to(self.slider, lv.ALIGN.OUT_TOP_MID, 0, -5)  # label的中间与滑块的上外边框中间对齐,然后y向上15像素 x不变

    def slider_event_cb(self, evt):
        slider = evt.get_target()
        # 修改label的值
        freq3=slider.get_value()
        PMW3.freq(freq3)
        self.label.set_text(str(freq3))        

class Widget4():
    def __init__(self, scr,x,y,s):#x轴偏移量,y轴偏移量,尺寸
        # 创建圆弧对象
        arc = lv.arc(scr)
        # 设置角度
        arc.set_end_angle(135)  # 角度是 顺时针方向
        # 设置宽高
        arc.set_size(s, s)
        # 设置事件处理回调函数
        arc.add_event_cb(self.event_cb, lv.EVENT.VALUE_CHANGED, None)
        arc.align(lv.ALIGN.CENTER,x,y)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
        
        # 创建文本
        self.label = lv.label(scr)
        self.label.set_text("0%")  # 设置文字内容
        # 居中显示
        self.label.align(lv.ALIGN.CENTER,x,y)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
    
    def event_cb(self, evt):
        arc = evt.get_target()
        current_value = arc.get_value()
        duty=current_value*10
        PMW1.duty(1000-duty)
        self.label.set_text("%d%%" % current_value)
        
class Widget5():
    def __init__(self, scr,x,y,s):#x轴偏移量,y轴偏移量,尺寸
        # 创建圆弧对象
        arc = lv.arc(scr)
        # 设置角度
        arc.set_end_angle(135)  # 角度是 顺时针方向
        # 设置宽高
        arc.set_size(s, s)
        # 设置事件处理回调函数
        arc.add_event_cb(self.event_cb, lv.EVENT.VALUE_CHANGED, None)
        arc.align(lv.ALIGN.CENTER,x,y)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
        
        # 创建文本
        self.label = lv.label(scr)
        self.label.set_text("0%")  # 设置文字内容
        # 居中显示
        self.label.align(lv.ALIGN.CENTER,x,y)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
    
    def event_cb(self, evt):
        arc = evt.get_target()
        current_value = arc.get_value()
        duty=current_value*10
        PMW2.duty(1000-duty)
        self.label.set_text("%d%%" % current_value)
        
class Widget6():
    def __init__(self, scr,x,y,s):#x轴偏移量,y轴偏移量,尺寸
        # 创建圆弧对象
        arc = lv.arc(scr)
        # 设置角度
        arc.set_end_angle(135)  # 角度是 顺时针方向
        # 设置宽高
        arc.set_size(s, s)
        # 设置事件处理回调函数
        arc.add_event_cb(self.event_cb, lv.EVENT.VALUE_CHANGED, None)
        arc.align(lv.ALIGN.CENTER,x,y)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
        
        # 创建文本
        self.label = lv.label(scr)
        self.label.set_text("0%")  # 设置文字内容
        # 居中显示
        self.label.align(lv.ALIGN.CENTER,x,y)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)
    
    def event_cb(self, evt):
        arc = evt.get_target()
        current_value = arc.get_value()
        duty=current_value*10
        PMW3.duty(1000-duty)
        self.label.set_text("%d%%" % current_value)
        
# 3. 创建要显示的组件
Widget1=Widget1(scr,-55,-30,95,1,20) #x轴偏移量,y轴偏移量,宽度,高度,最小值,最大值
Widget2=Widget2(scr,55,50,95,1,20)
Widget3=Widget3(scr,-55,130,95,1,20)
Widget4=Widget4(scr,-55,-100,90) #x轴偏移量,y轴偏移量,尺寸
Widget5=Widget5(scr,55,-20,90)
Widget6=Widget6(scr,-55,60,90)
# 4. 显示screen对象中的内容
lv.scr_load(scr)

# ------------------------------ 看门狗,用来重启ESP32设备 --start------------------------
try:
    from machine import WDT
    wdt = WDT(timeout=2000)  # 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-------------------------

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

ESP32(MicroPython)LVGL图形界面 RGB灯闪烁控制器 的相关文章

  • 无法在 mysql 表中的值中使用破折号(-)[重复]

    这个问题在这里已经有答案了 我一直在尝试从 python 将数据插入 MYSQL 表 我的sql表中的字段是id token start time end time和no of trans 我想存储使用生成的令牌uuid4在令牌栏中 但由于
  • 使用信号时出现 django TransactionManagementError

    我有一个与 django 的用户和 UserInfo 一对一的字段 我想订阅用户模型上的 post save 回调函数 以便我也可以保存 UserInfo receiver post save sender User def saveUse
  • 在 Python 3 中动态导入模块的问题

    我遇到的情况是 在我的 Python 3 项目中 在运行时必须包含某些模块 我在用着importlib import module为了这 第二次更新 我确实找到了一种方法来做一些接近我想要的事情 一些额外的代码可能会使我的一些链接稍微偏离一
  • 通过鼻子测试检查某个函数是否发出警告

    我正在使用编写单元测试nose http somethingaboutorange com mrl projects nose 0 11 2 我想检查函数是否引发警告 该函数使用warnings warn 这是很容易就能做到的事情吗 def
  • 在 keras 中使用自定义张量流操作

    我在张量流中有一个脚本 其中包含自定义张量流操作 我想将代码移植到 keras 但我不确定如何在 keras 代码中调用自定义操作 我想在 keras 中使用tensorflow 所以到目前为止我发现的教程描述了与我想要的相反的内容 htt
  • 使用 Python 的文本中的词频但忽略停用词

    这给了我文本中单词的频率 fullWords re findall r w allText d defaultdict int for word in fullWords d word 1 finalFreq sorted d iterit
  • 在函数调用之间保存数据的Pythonic方式是什么?

    对我来说 上下文是我需要在调用修改该值的函数之间保留的单个 int 的信息 我可以使用全局 但我知道这是不鼓励的 现在 我使用了包含 int 的列表形式的默认参数 并利用了可变性 以便在调用之间保留对值的更改 如下所示 def increm
  • 在ansible中合并字典

    我目前正在构建一个使用 ansible 安装 PHP 的角色 并且在合并字典时遇到一些困难 我尝试了多种方法来做到这一点 但我无法让它像我想要的那样工作 A vars file my default values key value my
  • 如何使用python读取最后一行的特定位置

    我有一个太大的 txt 文件 并且有几行类似的行 如下所示 字1 字2 字3 字4 553 75 我对位置 4 值 感兴趣 即最后一行 553 75 我的文件文本 word1 word2 word3 word4 553 20 word1 w
  • 在 MATLAB 中创建共享库

    一位研究人员在 MATLAB 中创建了一个小型仿真 我们希望其他人也能使用它 我的计划是进行模拟 清理一些东西并将其变成一组函数 然后我打算将其编译成C库并使用SWIG https en wikipedia org wiki SWIG创建一
  • 提交表格并上传带有请求的文件

    我正在努力提交特定的表格蟒蛇请求 http www python requests org 我想使用它的网站上的其他表单工作正常 我可以提交登录表单等 这只是我遇到问题的文件上传 显然 提交表单效果很好 因为我从网站收到一条消息 说 请返回
  • 如何从数据框的单元格中获取值?

    我构建了一个条件 从我的数据框中提取一行 d2 df df l ext l ext df item item df wn wn df wd 1 现在我想从特定列中获取一个值 val d2 col name 但结果 我得到一个包含一行和一列
  • 有没有任何方法可以使用 openpyxl 获取 .xlsx 工作表中存在的行数和列数?

    有没有任何方法可以使用 openpyxl 获取 xlsx 工作表中存在的行数和列数 在xlrd中 sheet ncols sheet nrows 将给出列数和行数 openpyxl中有这样的方法吗 给定一个变量sheet 可以通过以下方式之
  • 为 Python 2.4 改进“with”语句的直接替换

    您能否建议一种方法来编写可在 Python 2 4 中使用的 with 语句的直接替换代码 这将是一个 hack 但它可以让我更好地将我的项目移植到 Python 2 4 EDIT 删除了不相关的元类草图 只需使用 try finally
  • Flask SQLAlchemy 与 MyPy - 模型类型错误

    我遇到了以下组合问题flask sqlalchemy and mypy 当我定义一个新的 ORM 对象时 例如 class Foo db Model pass where db是使用创建的数据库SQL炼金术应用于flask app mypy
  • 如何将 pytest 装置与 django TestCase 一起使用

    我如何在TestCase方法 类似问题的几个答案似乎暗示我的例子应该有效 import pytest from django test import TestCase from myapp models import Category py
  • 网页抓取 - 如何识别网页上的主要内容

    给定一个新闻文章网页 来自任何主要新闻来源 例如时报或彭博社 我想识别该页面上的主要文章内容 并丢弃其他杂项元素 例如广告 菜单 侧边栏 用户评论 在大多数主要新闻网站上都可以使用的通用方法是什么 有哪些好的数据挖掘工具或库 最好是基于Py
  • 从 csv 中读取 pandas 数据帧,以非固定标头开始

    我有许多数据文件是由我的实验室中使用的一些相当黑客的脚本生成的 该脚本非常有趣 因为它在标头之前附加的行数因文件而异 尽管它们具有相同的格式并具有相同的标头 我正在编写一个批处理来将所有这些文件处理为数据帧 如果我不知道位置 如何让 pan
  • psutil:测量特定进程的CPU使用率

    我正在尝试测量进程树的 cpu 使用率 目前获取进程 没有子进程 的 cpu usage 就可以了 但我得到了奇怪的结果 import psutil p psutil Process PID p cpu percent 还给我float g
  • Jinja2中获取请求参数

    如何检索请求参数a在 Jinja2 模板中 http foo bar a 1 我这个答案有点晚了 但其他解决方案并没有真正考虑到您对 Flask 的使用 事实上 您将 Flask 与 Jinja2 一起使用 这使得您的情况与其他框架有点不同

随机推荐

  • 使用Python开发一个恐龙跑跑小游戏,玩起来

    相信很多人都玩过 chrome 浏览器上提供的恐龙跑跑游戏 在我们断网或者直接在浏览器输入地址 chrome dino 都可以进入游戏 今天我们就是用 Python 来制作一个类似的小游戏 素材准备 首先我们准备下游戏所需的素材 比如恐龙图
  • k8s flannel vxlan流量抓包分析

    Flannel Vxlan抓包 对于 Kubernetes 集群中的 Pod 由于容器内不便于抓包 通常视情况在 Pod 数据包经过的 veth 设备 docker0 网桥 CNI 插件设备 如 cni0 flannel 1 etc 及 P
  • cms垃圾收集器是如何进行垃圾回收的

    文章目录 CMS 垃圾回收器 核心垃圾回收过程 完整垃圾回收过程 阶段一 初始标记 阶段二 并发标记 Concurrent Mark 阶段三 并发预清理阶段 阶段四 可终止的预处理 阶段五 重新标记 阶段六 并发清理 阶段七 并发重置 CM
  • Lattice FPGA 开发工具Diamond使用流程总结——安装

    Lattice的芯片价格便宜 功耗低 最近项目要用 先来一份开发使用流程 软件安装 加载软件包 如下 下载安装包后 点击Diamond exe 文件 进入安装对话框 逐步点击YES或NEXT 完成路径设置等步骤 如下 到达产品加载选项页面
  • es集成SpringCloud

    es全文检索 feign 集成SpringCloud的使用 1 es的使用 1 1 导包 1 2 es的配置文件 application yml 1 3 创建CourseDoc 1 4 创建CourseDocRepository 1 5 普
  • 基于ubuntu操作系统下的Qt的安装

    1 首先下载安装包 进入官网下载地址 http download qt io 如图所示 顺带说说目录结构 archive 各种 Qt 开发工具安装包 新旧都有 可以下载 Qt 开发环境和源代码 community releases 社区定制
  • Android 复杂首页搭建BaseMultiItemQuickAdapter,详解简单易学

    关于不同类型多布局的展示BaseMultiItemQuickAdapter详解 二 新篇章 对于Android 初学者来说 说到数据展示 相信大家对一定会想到ListView 或者 RecyclerView 但是简单的数据展示这个确实没毛病
  • ubuntu java sdk_ubuntu16.04配置android SDK环境

    对于很多新手来说 在配置任何环境的时候一篇非常好的指导安装方案是最合适不过的 我也是从这个坑慢慢爬出来的 反复的搜索文章反复的测试来配置安装环境 为了大家也为了自己以后的方便 今天就为大家整理一套即完整又详细的Android环境配置步骤 如
  • 云计算和物联网之间是什么关系,主要有什么区别?

    云计算和物联网是当今IT业界的两大焦点 它们有很大的区别 但同时也有着千丝万缕的联系 物联网通过数量惊人的传感器采集到难以计数的数据量 而云计算可以对这些海量数据进行智能处理 云计算是物联网发展的基石 而物联网又是云计算的最大用户 促进着云
  • Charles乱码和SSL 代理问题解决

    在刚接触Charles进行抓包使用时 遇到了两个问题 1 Charles上抓的包出现了乱码 2 Charles开启SSL Proxying代理后出现了手机无法上网或手机和电脑浏览器都无法上网的情况 浏览器提示证书不可用或过期 尝试了很久终于
  • SpringBoot开启事务

    Java知识点总结 想看的可以从这里进入 目录 2 12 事务开启 2 12 事务开启 Spring Boot使用的是Spring 事务管理机制 对事务管理提供了一个顶层的接口PlatformTransactionManager 对所支持的
  • RPA让采购流程更加高效丨采购领域应用RPA的5大场景

    采购是企业生产经营中必不可少的环节之一 也是企业成本构成的主要因素 企业采购形式多样 包括招标 竞争性谈判 磋商 询价 竞价等 如今 互联网的发展已经升级了采购模式 借力RPA提升采购效率 则是企业确保供应 降低成本 实现可持续发展的一个良
  • 深度学习实战(四):行人跟踪与摔倒检测报警

    深度学习实战 四 行人跟踪与摔倒检测报警 1 项目简介 1 1 相关工作 2 方法简介 2 1 总体结构 2 2 骨架的图结构 2 3 空间图卷积网络 2 3 1 Sampling Function 2 3 2 Weight Functio
  • 大修或新更换的电压互感器TV为什么要核相(定相)?

    大修或新更换的电压互感器TV为什么要核相 定相 答 大修或新更换的互感器 含二次回路更动 在投入运行前应核相 定相 所谓定相 就是将TV一次侧在同一电源上 测定它们的二次侧电压相位是否相同 若相位不正确 会造成如下结果 1 破坏同期的正确性
  • [JSOI2018]机器人

    题目描述 一个 n m n times m n m的网格 有一个机器人一开始在 1 1
  • 画图软件怎么做性能测试,软件性能测试能力提升解决方案.pdf

    软件性能测试能力提升解决方案 软件性能测试能力提升解决方案 软件性能测试能力提升解决方案 软软件件性性能能测测试试能能力力提提升升解解决决方方案案 课程试用 课程试用 课课程程试试用用 测试经理 TM 测试主测 TC 测试架构师 TAE 测
  • ChatGPT充值,银行卡被拒绝,图文教程

    目录 前言 步骤 1 魔法地址选择 2 选择手机号码 归属地 3 勾选 服从协议 4 填写信息 5 完善账单地址 6 订阅成功 前言 大家好 今天我在订阅ChatGPT4时 遭遇了银行卡被拒绝的尴尬境地 这里有个技巧 助你开心畅享ChatG
  • 大数据和人工智能的关系,超全解析

    大数据拥抱云计算 在PaaS层中一个复杂的通用应用就是大数据平台 大数据是如何一步一步融入云计算的呢 1数据不大也包含智慧 一开始这个大数据并不大 原来才有多少数据 现在大家都去看电子书 上网看新闻了 在我们80后小时候 信息量没有那么大
  • 使用C++封装MySQL API的教程(Python)

    在本教程中 我们将学习如何使用C 封装MySQL的API 并使用Python作为示例 我们将创建一个简单的程序 通过C 封装的MySQL API连接到MySQL数据库 并执行一些基本的数据库操作 MySQL是一个流行的开源关系型数据库管理系
  • ESP32(MicroPython)LVGL图形界面 RGB灯闪烁控制器

    ESP32 MicroPython RGB灯闪烁控制器 本程序通过依次调整RGB灯中每个灯的P 频率和占空比实现对RGB灯闪烁的控制 import lvgl as lv import time from espidf import VSPI