【雕爷学编程】MicroPython手册之麦哲伦 STM32H743 GUI-触摸按钮

在这里插入图片描述
MicroPython是为了在嵌入式系统中运行Python 3编程语言而设计的轻量级版本解释器。与常规Python相比,MicroPython解释器体积小(仅100KB左右),通过编译成二进制Executable文件运行,执行效率较高。它使用了轻量级的垃圾回收机制并移除了大部分Python标准库,以适应资源限制的微控制器。

MicroPython主要特点包括:
1、语法和功能与标准Python兼容,易学易用。支持Python大多数核心语法。
2、对硬件直接访问和控制,像Arduino一样控制GPIO、I2C、SPI等。
3、强大的模块系统,提供文件系统、网络、图形界面等功能。
4、支持交叉编译生成高效的原生代码,速度比解释器快10-100倍。
5、代码量少,内存占用小,适合运行在MCU和内存小的开发板上。
6、开源许可,免费使用。Shell交互环境为开发测试提供便利。
7、内置I/O驱动支持大量微控制器平台,如ESP8266、ESP32、STM32、micro:bit、掌控板和PyBoard等。有活跃的社区。

MicroPython的应用场景包括:
1、为嵌入式产品快速构建原型和用户交互。
2、制作一些小型的可 programmable 硬件项目。
3、作为教育工具,帮助初学者学习Python和物联网编程。
4、构建智能设备固件,实现高级控制和云连接。
5、各种微控制器应用如物联网、嵌入式智能、机器人等。

使用MicroPython需要注意:
1、内存和Flash空间有限。
2、解释执行效率不如C语言。
3、部分库函数与标准版有差异。
4、针对平台优化语法,订正与标准Python的差异。
5、合理使用内存资源,避免频繁分配大内存块。
6、利用原生代码提升速度关键部位的性能。
7、适当使用抽象来封装底层硬件操作。

总体来说,MicroPython让Python进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
麦哲伦(STM32H743)是STMicroelectronics推出的一款高性能微控制器系列,具有强大的处理能力和丰富的外设资源。以下是麦哲伦STM32H743微控制器的参考技术参数:
1、核心处理器:
ARM Cortex-M7内核,最高主频400 MHz
浮点运算单元(FPU),支持单精度和双精度浮点运算
2、存储器:
Flash存储器:1 MB
SRAM:1 MB
外部存储器接口(支持SDRAM、NOR Flash和NAND Flash等)
3、外设资源:
多个通用定时器(TIM),用于计时、PWM生成等应用
多个串行通信接口(USART、SPI、I2C等)
多个通用输入/输出口(GPIO)
多个模拟输入通道(ADC)
多个模拟输出通道(DAC)
多个通用用途DMA控制器(DMA)
多个通用同步/异步收发器(USART)
多个通用用途直流电机控制器(GPTM)
多个通用用途同步波形发生器(GPTM)
多个USB接口(USB 2.0 OTG FS/HS)
多个以太网控制器(Ethernet MAC)
多个高速串行接口(SPI、I2S等)
多个SDIO接口(支持SD卡和MMC卡)
4、封装和引脚:
LQFP和BGA封装,引脚数量和布局根据具体型号而定
5、工作电压和温度范围:
工作电压:1.7V至3.6V
工作温度范围:-40°C至+85°C或-40°C至+125°C
安全和加密:
内置硬件加速器,支持高级加密标准(AES)、数据完整性校验(CRC)等
内置硬件随机数发生器(RNG)
支持多种安全保护机制,如读保护、写保护、区域保护等
6、调试和开发支持:
JTAG/SWD调试接口
支持ST-Link调试器和开发工具
支持多种集成开发环境(IDE),如Keil MDK、IAR Embedded Workbench等

在这里插入图片描述
MicroPython的麦哲伦STM32H743开发板配备了GUI(图形用户界面)和触摸按钮功能。下面将以专业的视角为您详细解释其主要特点、应用场景以及需要注意的事项。

主要特点:

图形用户界面(GUI)支持:麦哲伦STM32H743开发板提供了图形用户界面支持,可以通过LCD显示屏和触摸按钮实现交互式的用户界面。开发者可以使用MicroPython编写GUI应用程序,包括按钮、标签、文本框等常见的界面元素。

触摸按钮功能:麦哲伦STM32H743开发板具备触摸按钮功能,可以通过触摸屏实现按钮的触摸和点击操作。开发者可以定义触摸按钮的位置、尺寸和外观样式,并为按钮添加事件处理函数,实现按钮的交互功能。

灵活性和可扩展性:MicroPython和麦哲伦STM32H743开发板的组合提供了灵活性和可扩展性。开发者可以利用MicroPython语言的简洁性和易用性,快速开发GUI应用程序,并通过丰富的外设接口和资源,扩展和定制自己的应用。

应用场景:

嵌入式设备控制界面:麦哲伦STM32H743开发板的GUI和触摸按钮功能适用于嵌入式设备的控制界面开发。通过触摸按钮,用户可以轻松控制设备的各种功能和参数,如机器人控制、家庭自动化系统、工业自动化等。

信息展示和交互界面:麦哲伦STM32H743开发板的GUI功能可用于信息展示和用户交互界面的开发。开发者可以使用LCD显示屏和触摸按钮实现信息的展示和输入,如智能终端、信息查询终端、导航系统等。

教育和学习工具:麦哲伦STM32H743开发板的GUI和触摸按钮功能适用于教育和学习工具的开发。通过触摸按钮和图形界面,学生可以进行交互式学习和实验,如科学实验、编程学习、物理模拟等。

需要注意的事项:

显示屏和触摸屏选型:选择合适的LCD显示屏和触摸屏是关键。确保显示屏和触摸屏的尺寸、分辨率和接口与麦哲伦STM32H743开发板兼容,并且具备稳定和可靠的性能。

界面设计和用户体验:在开发GUI应用时,需要注重界面设计和用户体验。合理布局按钮和界面元素,保证用户界面的直观性和易用性。同时,关注触摸按钮的响应速度和准确性,提升用户的交互体验。

资源消耗和性能优化:GUI应用可能占用较多的存储空间和处理器资源。在开发过程中,需要注意合理管理和优化资源的使用,以确保系统的稳定性和性能。

综上所述,MicroPython的麦哲伦STM32H743开发板具备GUI和触摸按钮功能,适用于嵌入式设备控制界面、信息展示和交互界面、教育和学习工具等应用场景。在使用时需要注意选择合适的显示屏和触摸屏、设计良好的界面和用户体验,以及合理管理资源和优化性能。这样可以实现功能丰富且稳定的GUI应用程序。

案例一:使用MicroPython控制STM32H743的LCD显示屏显示当前时间

import machine
import time
from machine import Pin, I2C
from ssd1306 import SSD1306_I2C

# 初始化I2C接口
i2c = I2C(scl=Pin(5), sda=Pin(4))

# 初始化OLED显示屏
oled = SSD1306_I2C(128, 64, i2c)

# 清空屏幕
oled.fill(0)
oled.show()

while True:
    # 获取当前时间
    current_time = time.localtime()

    # 格式化时间字符串
    time_str = time.strftime("%Y-%m-%d %H:%M:%S", current_time)

    # 在屏幕上显示时间
    oled.text("当前时间:", 0, 0)
    oled.text(time_str, 0, 10)
    oled.show()

    # 延时1秒
    time.sleep(1)

要点解读:
导入所需的库和模块。
初始化I2C接口和OLED显示屏。
清空屏幕并显示。
循环获取当前时间,格式化为字符串,并在屏幕上显示。
延时1秒后继续循环。

案例二:使用MicroPython控制STM32H743的LED灯闪烁

import machine
import time
from machine import Pin

# 初始化LED引脚
led = Pin(2, Pin.OUT)

while True:
    # 点亮LED灯
    led.value(1)
    time.sleep(1)

    # 熄灭LED灯
    led.value(0)
    time.sleep(1)

要点解读:
导入所需的库和模块。
初始化LED引脚。
循环控制LED灯的亮灭。
延时1秒后继续循环。

案例三:使用MicroPython控制STM32H743的触摸按钮实现计数器功能

import machine
import time
from machine import Pin, TouchPad

# 初始化触摸按钮引脚
touch_button = TouchPad(Pin(0))

# 初始化计数器变量
counter = 0

while True:
    # 检测触摸按钮是否被按下
    if touch_button.is_pressed():
        # 增加计数器值
        counter += 1
        print("计数器值:", counter)

    # 延时1秒后继续循环
    time.sleep(1)

要点解读:
导入所需的库和模块。
初始化触摸按钮引脚。
初始化计数器变量。
循环检测触摸按钮是否被按下,如果按下则增加计数器值并打印。
延时1秒后继续循环。

案例四:创建触摸按钮

import machine
import lvgl as lv
import lvgl_helper

# 创建LVGL显示窗口
lv.init()
display_driver = lvgl_helper.init()
lv.scr_load(lv.obj())

# 创建触摸按钮
btn = lv.btn(lv.scr_act())
btn.align(lv.scr_act(), lv.ALIGN.CENTER, 0, 0)
label = lv.label(btn)
label.set_text("Button")

# 按钮点击事件处理函数
def btn_click_event(obj, event):
    if event == lv.EVENT.CLICKED:
        print("Button clicked!")

btn.set_event_cb(btn_click_event)

解读:
该程序使用lvgl_helper模块创建LVGL显示窗口,并初始化显示驱动。然后,使用lv.scr_load()方法加载主屏幕对象。接下来,通过lv.btn()方法创建一个触摸按钮,并使用align()方法将其居中对齐于屏幕。使用lv.label()方法在按钮上创建标签,并设置其文本为"Button"。之后,定义了一个按钮的点击事件处理函数btn_click_event(),当按钮被点击时会打印出"Button clicked!"。最后,使用set_event_cb()方法将按钮的事件回调函数设置为btn_click_event()。

案例五:按钮状态切换

import machine
import lvgl as lv
import lvgl_helper

# 创建LVGL显示窗口
lv.init()
display_driver = lvgl_helper.init()
lv.scr_load(lv.obj())

# 创建触摸按钮
btn = lv.btn(lv.scr_act())
btn.align(lv.scr_act(), lv.ALIGN.CENTER, 0, 0)
label = lv.label(btn)
label.set_text("OFF")

# 按钮点击事件处理函数
def btn_click_event(obj, event):
    if event == lv.EVENT.CLICKED:
        if label.get_text() == "OFF":
            label.set_text("ON")
            print("Button ON")
        else:
            label.set_text("OFF")
            print("Button OFF")

btn.set_event_cb(btn_click_event)

解读:
该程序与前一个程序类似,同样创建了一个触摸按钮,并设置了按钮的点击事件处理函数btn_click_event()。不同之处在于,按钮的标签初始文本为"OFF"。当按钮被点击时,通过label.get_text()方法获取标签的当前文本,如果为"OFF",则将标签文本设置为"ON",并打印"Button ON";如果为"ON",则将标签文本设置为"OFF",并打印"Button OFF"。这样实现了按钮状态的切换。

案例六:按钮样式定制

import machine
import lvgl as lv
import lvgl_helper

# 创建LVGL显示窗口
lv.init()
display_driver = lvgl_helper.init()
lv.scr_load(lv.obj())

# 创建触摸按钮
btn = lv.btn(lv.scr_act())
btn.align(lv.scr_act(), lv.ALIGN.CENTER, 0, 0)
label = lv.label(btn)
label.set_text("Button")

# 定制按钮样式
style = lv.style_t()
lv.style_copy(style, lv.style_btn.rel)
style.body.main_color = lv.color_hex(0x00FF00)
style.body.grad_color = lv.color_hex(0x00AA00)
style.body.border.color = lv.color_hex(0x000000)
style.body.border.width = 2
style.body.border.opa = lv.OPA._50
style.body.radius = lv.RADIUS.CIRCLE

btn.add_style(lv.btn.STYLE.REL, style)

解读:
该程序与前两个程序类似,同样创建了一个触摸按钮,并设置了按钮的点击事件处理函数btn_click_event()。不同之处在于,使用lv.style_t()创建了一个样式对象style,并通过lv.style_copy()方法复制了默认按钮样式。然后,通过修改style的属性实现了自定义的按钮样式,如修改主色、渐变色、边框颜色、边框宽度、边框透明度以及边框圆角等。最后,使用btn.add_style()方法将自定义样式应用到按钮上。

案例七:创建窗口和按钮

import lvgl as lv
import touchscreen

# 初始化触摸屏
touchscreen.init()

# 创建显示器
disp = lv.disp_drv_t()
lv.disp_drv_init(disp)

# 注册显示器驱动
lv.disp_drv_register(disp)

# 创建屏幕
scr = lv.obj()

# 设置屏幕为当前激活屏幕
lv.scr_load(scr)

# 创建按钮
btn = lv.btn(scr)
btn.align(scr, lv.ALIGN.CENTER, 0, 0)
btn.set_style_local_radius(lv.btn.STATE.RELEASED, lv.RADIUS.CIRCLE)

# 创建按钮标签
label = lv.label(btn)
label.set_text("Button")

# 按钮事件回调函数
def btn_event_handler(obj, event):
    if event == lv.EVENT.CLICKED:
        print("Button clicked")

# 设置按钮事件回调函数
btn.set_event_cb(btn_event_handler)

要点解读:
引入lvgl和touchscreen模块以访问GUI和触摸屏功能。
使用touchscreen.init初始化触摸屏。
创建显示器对象disp,并初始化。
注册显示器驱动。
创建屏幕对象scr。
使用lv.scr_load将屏幕设置为当前激活屏幕。
创建按钮对象btn,并将其与屏幕对齐。
使用lv.btn.set_style_local_radius设置按钮的圆角样式。
创建按钮标签对象label,并设置其文本内容。
定义按钮事件回调函数btn_event_handler,当按钮点击事件触发时执行相应的操作。
使用btn.set_event_cb设置按钮的事件回调函数。

案例八:滑块控制LED亮度

import lvgl as lv
import touchscreen

# 初始化触摸屏
touchscreen.init()

# 创建显示器
disp = lv.disp_drv_t()
lv.disp_drv_init(disp)

# 注册显示器驱动
lv.disp_drv_register(disp)

# 创建屏幕
scr = lv.obj()

# 设置屏幕为当前激活屏幕
lv.scr_load(scr)

# 创建滑块
slider = lv.slider(scr)
slider.set_range(0, 100)
slider.set_value(50, lv.ANIM.OFF)
slider.align(scr, lv.ALIGN.CENTER, 0, 0)

# 滑块值改变事件回调函数
def slider_event_handler(obj, event):
    if event == lv.EVENT.VALUE_CHANGED:
        value = slider.get_value()
        # 根据滑块值控制LED亮度
        # 例如,可以使用PWM输出调节LED亮度

# 设置滑块事件回调函数
slider.set_event_cb(slider_event_handler)

要点解读:
引入lvgl和touchscreen模块以访问GUI和触摸屏功能。
使用touchscreen.init初始化触摸屏。
创建显示器对象disp,并初始化。
注册显示器驱动。
创建屏幕对象scr。
使用lv.scr_load将屏幕设置为当前激活屏幕。
创建滑块对象slider。
使用slider.set_range设置滑块的取值范围。
使用slider.set_value设置滑块的初始值。
使用slider.align将滑块与屏幕对齐。
定义滑块值改变事件回调函数slider_event_handler,当滑块值发生改变时执行相应的操作。
使用slider.set_event_cb设置滑块的事件回调函数。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和MicroPython版本可能会导致不同的使用方法。在实际编程中,您需要根据您的硬件配置和具体需求进行调整,并进行多次实际测试。需要正确连接硬件并了解所使用的传感器和设备的规范和特性非常重要。对于涉及到硬件操作的代码,请确保在使用之前充分了解和确认所使用的引脚和电平等参数的正确性和安全性。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值