ESP32 LVGL图形界面控制开关和PMW输出

本程序在 LVGL图形界面控制开关与PMW输出。原本想封装滑杆和开关重复调用,但传参区分引脚报错,只能分别封装控制各引脚的滑杆和开关。

接线(按开发板上引脚排序):

代码如下

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=4000,duty=1023)
PMW2=PWM(Pin(13),freq=4000,duty=1023)
PMW3=PWM(Pin(15),freq=4000,duty=1023)# 2. 封装要显示的组件
class LED1():def __init__(self, scr):# 创建开关按钮btn = lv.btn(lv.scr_act())# 添加回调函数btn.add_event_cb(self.open_or_close_led, lv.EVENT.ALL, None)# 简单布局btn.align(lv.ALIGN.CENTER, -55,-130)btn.add_flag(lv.obj.FLAG.CHECKABLE)btn.set_height(lv.SIZE_CONTENT)# 创建labelself.label = lv.label(btn)self.label.set_text("LED1 ON")self.label.center()# 创建LED对应引脚对象self.led = Pin(2, Pin.OUT)self.led.value(0)  # 默认不亮# 定义变量用来存储led的亮灭状态self.led_status = Falsedef open_or_close_led(self, evt):code = evt.get_code()if code == lv.EVENT.VALUE_CHANGED:if self.led_status is False:self.led.value(1)self.label.set_text("LED1 OFF")else:self.led.value(0)self.label.set_text("LED1 ON")self.led_status = not self.led_statusclass LED2():def __init__(self, scr):# 创建开关按钮btn = lv.btn(lv.scr_act())# 添加回调函数btn.add_event_cb(self.open_or_close_led, lv.EVENT.ALL, None)# 简单布局btn.align(lv.ALIGN.CENTER,55,-130)btn.add_flag(lv.obj.FLAG.CHECKABLE)btn.set_height(lv.SIZE_CONTENT)# 创建labelself.label = lv.label(btn)self.label.set_text("LED2 ON")self.label.center()# 创建LED对应引脚对象self.led = Pin(4, Pin.OUT)self.led.value(1)  # 默认不亮# 定义变量用来存储led的亮灭状态self.led_status = Falsedef open_or_close_led(self, evt):code = evt.get_code()if code == lv.EVENT.VALUE_CHANGED:if self.led_status is False:self.led.value(0)self.label.set_text("LED2 OFF")else:self.led.value(1)self.label.set_text("LED2 ON")self.led_status = not self.led_statusclass LED3():def __init__(self, scr):# 创建开关按钮btn = lv.btn(lv.scr_act())# 添加回调函数btn.add_event_cb(self.open_or_close_led, lv.EVENT.ALL, None)# 简单布局btn.align(lv.ALIGN.CENTER,-55,-80)btn.add_flag(lv.obj.FLAG.CHECKABLE)btn.set_height(lv.SIZE_CONTENT)# 创建labelself.label = lv.label(btn)self.label.set_text("LED3 ON")self.label.center()# 创建LED对应引脚对象self.led = Pin(21, Pin.OUT)self.led.value(1)  # 默认不亮# 定义变量用来存储led的亮灭状态self.led_status = Falsedef open_or_close_led(self, evt):code = evt.get_code()if code == lv.EVENT.VALUE_CHANGED:if self.led_status is False:self.led.value(0)self.label.set_text("LED3 OFF")else:self.led.value(1)self.label.set_text("LED3 ON")self.led_status = not self.led_statusclass LED4():def __init__(self, scr):# 创建开关按钮btn = lv.btn(lv.scr_act())# 添加回调函数btn.add_event_cb(self.open_or_close_led, lv.EVENT.ALL, None)# 简单布局btn.align(lv.ALIGN.CENTER,55,-80)btn.add_flag(lv.obj.FLAG.CHECKABLE)btn.set_height(lv.SIZE_CONTENT)# 创建labelself.label = lv.label(btn)self.label.set_text("LED4 ON")self.label.center()# 创建LED对应引脚对象self.led = Pin(22, Pin.OUT)self.led.value(1)  # 默认不亮# 定义变量用来存储led的亮灭状态self.led_status = Falsedef open_or_close_led(self, evt):code = evt.get_code()if code == lv.EVENT.VALUE_CHANGED:if self.led_status is False:self.led.value(0)self.label.set_text("LED4 OFF")else:self.led.value(1)self.label.set_text("LED4 ON")self.led_status = not self.led_statusclass Widget1():def __init__(self, scr):# 创建滑块slider组件self.slider = lv.slider(scr)self.slider.set_width(200)  # 设置滑块的宽度self.slider.set_range(0, 1023)  # 默认值是0-100self.slider.align(lv.ALIGN.CENTER,0,0)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)self.slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)  # 添加回调函数# 创建一个标签labelself.label = lv.label(scr)self.label.set_text("PMW1: 0")  # 默认值self.label.align_to(self.slider, lv.ALIGN.OUT_TOP_MID, 0, -15)  # label的中间与滑块的上外边框中间对齐,然后y向上15像素 x不变def slider_event_cb(self, evt):slider = evt.get_target()duty_value1=slider.get_value()PMW1.duty(1023-duty_value1)# 修改label的值self.label.set_text("PMW1: "+str(duty_value1))class Widget2():def __init__(self, scr):# 创建滑块slider组件self.slider = lv.slider(scr)self.slider.set_width(200)  # 设置滑块的宽度self.slider.set_range(0, 1023)  # 默认值是0-100self.slider.align(lv.ALIGN.CENTER,0,50)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)self.slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)  # 添加回调函数# 创建一个标签labelself.label = lv.label(scr)self.label.set_text("PMW2: 0")  # 默认值self.label.align_to(self.slider, lv.ALIGN.OUT_TOP_MID, 0, -15)  # label的中间与滑块的上外边框中间对齐,然后y向上15像素 x不变def slider_event_cb(self, evt):slider = evt.get_target()duty_value2=slider.get_value()PMW2.duty(1023-duty_value2)# 修改label的值self.label.set_text("PMW2: "+str(duty_value2))class Widget3():def __init__(self, scr):# 创建滑块slider组件self.slider = lv.slider(scr)self.slider.set_width(200)  # 设置滑块的宽度self.slider.set_range(0, 1023)  # 默认值是0-100self.slider.align(lv.ALIGN.CENTER,0,100)  # 居中(第1个0表示x的偏移量,第2个0表示相对于y的偏移量)self.slider.add_event_cb(self.slider_event_cb, lv.EVENT.VALUE_CHANGED, None)  # 添加回调函数# 创建一个标签labelself.label = lv.label(scr)self.label.set_text("PMW3: 0")  # 默认值self.label.align_to(self.slider, lv.ALIGN.OUT_TOP_MID, 0, -15)  # label的中间与滑块的上外边框中间对齐,然后y向上15像素 x不变def slider_event_cb(self, evt):slider = evt.get_target()duty_value3=slider.get_value()PMW3.duty(1023-duty_value3)# 修改label的值self.label.set_text("PMW3: "+str(duty_value3))# 3. 创建要显示的组件
LED1(scr)
LED2(scr)
LED3(scr)
LED4(scr)
Widget1(scr)
Widget2(scr)
Widget3(scr)# 4. 显示screen对象中的内容
lv.scr_load(scr)

ESP32(MicroPython) LVGL图形界面控制开关与PMW输出相关推荐

  1. ESP32学习笔记 - ESP32使用GUI-Guider制作LVGL图形界面

    上一篇文章讲述了如何移植嵌入式图形界面库LVGL到ESP32芯片平台,并成功在ESP32上面运行LVGL的官方demo,上一篇文章请参考以下链接. ESP32学习笔记 - 移植LVGL_EmbedIo ...

  2. 图形界面终端下打印内核调试信息

    (备份) 很多比较新的Linux系统中(如Fedora 16),如果要在图形界面的终端下调试一个内核模块,printk()函数的输出信息是在终端下显示不出来的,需要查看/var/log/message ...

  3. ESP32(MicroPython) 串口控制多路pmw输出

    本程序通过串口控制pmw输出,一共有8路pmw,每次输入其中一路的占空比(0-1023),依次输入8路pmw输出的占空比,循环进行. 代码如下 #输出引脚:15.2.0.4.16.17.5.18 #导 ...

  4. 【STM32多级界面】-LCD结构体多级图形界面框架

    STM32多级界面搭建 在实际的项目之中,需要用单片机在LCD/OLED中搭建一个3级的图形界面.本文的工程文件我将上次传到百度网盘,链接在最后的部分. STM32多级界面搭建 一.方案选择 二.实现 ...

  5. 从零讲起:ESP32+Micropython+MQTT阿里云物联网

    ESP32+Micropython+MQTT阿里云物联网 前言 一.ESP32是什么? 二.Micropthon开发环境搭建 1.ESP32串口驱动下载与安装 三.IDE工具下载及使用说明 1.IDE ...

  6. ESP32 MicroPython开发之旅 基础篇② —— MicroPython 执行过程

    文章目录 MicroPython 执行过程 1. MicroPython ESP32文件系统 1.1 我如何查看文件系统有多大空间? 1.2 我如何查看当前占用了多大空间? 1.3 我如何知道里面已经 ...

  7. linux 6.4 图形界面,为CentOS 6.4安装图形界面并用VNC远程连接

    为CentOS 6.4安装图形界面并用VNC远程连接 1.安装VNC服务 #yum install -y tigervnc-server #passwd                        ...

  8. 设置centos默认启动命令行(不启动图形界面)

    centos7以下的版本 #vim /etc/inittab 找到id:5:initdefault,将 5 修改为 3 即可 _____________________________________ ...

  9. 【linux】图形界面基础知识(X、X11、GNOME、Xorg、KDE的概念和它们之间的关系)

    转载自:https://blog.csdn.net/zhangxinrun/article/details/7332049 简介 LINUX初学者经常分不清楚linux和X之间,X和Xfree86之间 ...

最新文章

  1. Eclipse中导入项目后js报错解决方法
  2. vray学习笔记(3)-多维子材质是个什么东西
  3. SpringCloud与zuul
  4. 力扣1716.计算力扣银行的钱
  5. 【编译打包】nagios-4.0.4-2.el6.src.rpm
  6. python imagedraw line_修复PIL.ImageDraw.Draw.宽线条线条线条
  7. 实验十OSPF路由聚合
  8. 批量/去掉office 2010 Word中标题前的黑点
  9. 电脑root,360超级ROOT
  10. 学习日志-勉励自己-自律
  11. 你不能做宅男,因为你穷
  12. 企业实施WMS仓储管理系统需要规避哪些风险
  13. atari游戏模型_在Atari.com免费玩经典街机游戏
  14. FreeRtos延时函数delay_us()
  15. IP分片和TCP分片的区别
  16. 坐标系统投影变换分带方法
  17. imx板子设备树范例
  18. 图书销售公司薪酬管理系统
  19. FIAA固定资产【09资产折旧】
  20. 秦始皇留下的9个谜团

热门文章

  1. 打印效果灰底,硒鼓沾满墨粉
  2. Web安全的重要性(面试必备),被黑无数次还不怕吗?
  3. Vue中computed计算属性和data数据获取的问题
  4. 开发医院管理系统心得体会_如何开发医院内容管理系统
  5. 1625行,解开 underscore.js 的面纱 - 第四章
  6. lamda表达式和三个例子
  7. 制造业企业缘何要上线MES系统
  8. [Java8] lamda表达式及Stream API一览
  9. vue两个html入口路由串了,vue-router路由与页面间导航实例解析
  10. 答题卡作文模块的一种方法-VSTO