当前位置:   article > 正文

【雕爷学编程】MicroPython手册之麦哲伦 STM32H743 4.3寸MCU显示屏(电容触摸)_micpython st7355 bmp

micpython st7355 bmp

在这里插入图片描述
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开发板配备了一款4.3寸的MCU显示屏,具备电容触摸功能。下面将以专业的视角为您详细解释其主要特点、应用场景以及需要注意的事项。

主要特点:

4.3寸显示屏:这款MCU显示屏拥有4.3寸的屏幕尺寸,提供了较大的显示区域,适合显示图形界面、文本和图像等信息。

电容触摸:该显示屏集成了电容触摸功能,能够实现触摸输入的交互操作。通过使用触摸手势,用户可以与显示屏进行交互,如滑动、点击和缩放等。

高分辨率:这款MCU显示屏具备较高的分辨率,可以显示清晰细腻的图像和文本。高分辨率的显示效果增强了用户体验,使得信息展示更加精确和逼真。

显示控制:麦哲伦STM32H743开发板的MCU显示屏配备了显示控制功能,可以通过MicroPython编程进行屏幕内容的控制和更新,包括绘制图形、显示文本、切换界面等。

应用场景:

嵌入式系统:这款MCU显示屏适用于各种嵌入式系统的用户界面显示。它可以用于智能家居控制面板、工业控制设备、自动化系统等领域,提供直观的用户界面和交互体验。

移动设备:由于4.3寸的屏幕尺寸和电容触摸功能,这款MCU显示屏也可以用于移动设备,如便携式医疗设备、手持测量仪器等。用户可以通过触摸屏幕进行操作和数据输入。

信息终端:MCU显示屏可以作为信息终端,用于显示实时数据、监控信息、天气预报等。它可以应用于公共交通站点、商场导览、智能家居中的信息显示等场景。

需要注意的事项:

电源供应:在使用MCU显示屏时,需要确保为其提供稳定和适当的电源供应。电源电压和电流应符合设备规格,以避免电源问题对显示屏造成损坏或不稳定的情况。

触摸校准:如果使用电容触摸功能,需要进行触摸校准操作,以确保触摸位置的准确性和精度。触摸校准可以在系统启动时或特定事件触发时进行。

显示优化:为了提供更好的显示效果和用户体验,可以对显示内容进行优化。这包括使用适当的字体和图标、优化布局和颜色选择等,以确保信息的清晰度和可读性。

综上所述,MicroPython的麦哲伦STM32H743开发板配备的4.3寸MCU显示屏具备电容触摸功能,具有较大的显示区域和高分辨率。它适用于嵌入式系统、移动设备和信息终端等应用场景。在使用时需要注意电源供应、触摸校准和显示优化等事项,以确保显示屏的稳定性和良好的用户体验。

案例1:读取显示屏数据

from machine import CAN
import time

# 初始化CAN总线和接收器
can = CAN(Pin(4), Pin(5))

def read_display_data():
    while True:
        # 发送读取命令
        can.send_msg(0x123, b'\x01')
        # 等待数据准备
        time.sleep(1)
        # 读取数据
        data = bytearray(8)
        while not can.recv_into_buf(data, 0x123):
            pass
        return data

while True:
    # 读取显示屏数据并打印
    data = read_display_data()
    print("Display Data:", data)
    time.sleep(1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

要点解读:
使用machine.CAN模块初始化CAN总线和接收器。
定义read_display_data函数,用于读取显示屏数据。
在主循环中,不断调用read_display_data函数读取显示屏数据并打印。

案例2:显示文本和图像

import machine
import ili9341
import time
from micropython import const

# 定义显示屏尺寸
WIDTH = const(320)
HEIGHT = const(480)

# 初始化SPI总线和显示屏对象
spi = machine.SPI(1)
display = ili9341.ILI9341(spi, cs=machine.Pin(0), dc=machine.Pin(1), rst=machine.Pin(2))

# 清空屏幕
display.fill(ili9341.BLACK)

# 显示文本和图像
display.text("Hello, World!", 10, 10, ili9341.WHITE)
display.line(10, 30, 310, 30, ili9341.RED)
display.rect(50, 50, 220, 220, ili9341.GREEN)
display.circle(160, 240, 100, ili9341.BLUE)

# 更新显示内容
display.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

解读:
该程序使用ili9341模块控制麦哲伦开发板上的4.3寸MCU显示屏(电容触摸)。首先,通过创建SPI对象初始化SPI总线,并创建ili9341.ILI9341对象来控制显示屏。接下来,使用display.fill()方法将屏幕填充为黑色。然后,使用display.text()方法显示文本“Hello, World!”,display.line()方法绘制一条红色直线,display.rect()方法绘制一个绿色矩形,display.circle()方法绘制一个蓝色圆形。最后,通过display.show()方法更新显示内容。

案例3:电容触摸输入

import machine
import ili9341
import time
from micropython import const

# 定义显示屏尺寸
WIDTH = const(320)
HEIGHT = const(480)

# 初始化SPI总线和显示屏对象
spi = machine.SPI(1)
display = ili9341.ILI9341(spi, cs=machine.Pin(0), dc=machine.Pin(1), rst=machine.Pin(2))

# 清空屏幕
display.fill(ili9341.BLACK)

# 电容触摸输入
while True:
    touch = display.get_touch()
    if touch:
        x, y = touch
        display.circle(x, y, 5, ili9341.WHITE)
        display.show()
        time.sleep(0.1)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

解读:
该程序使用ili9341模块控制麦哲伦开发板上的4.3寸MCU显示屏(电容触摸)。首先,通过创建SPI对象初始化SPI总线,并创建ili9341.ILI9341对象来控制显示屏。接下来,使用display.fill()方法将屏幕填充为黑色。然后,在主循环中使用display.get_touch()方法获取触摸输入。如果有触摸输入存在,将获取到的坐标作为参数传递给display.circle()方法,绘制一个白色的小圆点。最后,通过display.show()方法更新显示内容,并使用time.sleep()方法添加延迟以避免频繁刷新。

案例4:显示图片

import machine
import ili9341
from micropython import const

# 定义显示屏尺寸
WIDTH = const(320)
HEIGHT = const(480)

# 初始化SPI总线和显示屏对象
spi = machine.SPI(1)
display = ili9341.ILI9341(spi, cs=machine.Pin(0), dc=machine.Pin(1), rst=machine.Pin(2))

# 清空屏幕
display.fill(ili9341.BLACK)

# 显示图片
image = ili9341.ILI9341Image("image.bmp")
display.blit(image, 0, 0)

# 更新显示内容
display.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

解读:
该程序使用ili9341模块控制麦哲伦开发板上的4.3寸MCU显示屏(电容触摸)。首先,通过创建SPI对象初始化SPI总线,并创建ili9341.ILI9341对象来控制显示屏。接下来,使用display.fill()方法将屏幕填充为黑色。然后,使用ili9341.ILI9341Image()方法创建一个显示图像的对象,将图像文件名作为参数传递给该方法。然后,使用display.blit()方法将图像绘制在显示屏上的指定位置。最后,通过display.show()方法更新显示内容。

案例5:显示文本和图像

import machine
import ili9341

# 初始化SPI总线和显示屏对象
spi = machine.SPI(1, baudrate=40000000, polarity=1, phase=1)
display = ili9341.ILI9341(spi, cs=machine.Pin('PD13'), dc=machine.Pin('PD12'))

# 设置字体和颜色
font = display.FONT_DefaultSmall
color = ili9341.WHITE

# 清除屏幕并显示文本和图像
display.erase()
display.set_font(font)
display.set_color(color)
display.text((10, 10), "Hello, MicroPython!", font, color)
display.image(0, 30, 'image.bmp')
display.update()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

要点解读:
引入machine和ili9341模块以访问SPI接口和显示屏驱动。
使用machine.SPI初始化SPI总线对象。
创建ili9341.ILI9341对象,指定SPI总线、片选引脚和数据/命令引脚。
使用erase方法清除屏幕上的内容。
使用set_font方法设置显示文本的字体。
使用set_color方法设置文本和图像的颜色。
使用text方法显示文本在指定位置。
使用image方法显示图像在指定位置。
使用update方法更新显示屏。

案例6::电容触摸输入

import machine
import ili9341
import xpt2046

# 初始化SPI总线和显示屏对象
spi_display = machine.SPI(1, baudrate=40000000, polarity=1, phase=1)
display = ili9341.ILI9341(spi_display, cs=machine.Pin('PD13'), dc=machine.Pin('PD12'))

# 初始化SPI总线和触摸屏对象
spi_touch = machine.SPI(3, baudrate=2000000, polarity=0, phase=0)
touch = xpt2046.XPT2046(spi_touch, cs=machine.Pin('PE4'), int_pin=machine.Pin('PE5'))

while True:
    # 获取触摸坐标
    touch_data = touch.get_touch()
    if touch_data:
        x, y = touch_data
        print("Touch position:", x, y)
        
        # 在触摸位置显示点
        display.pixel(x, y, ili9341.RED)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

要点解读:
引入machine、ili9341和xpt2046模块以访问SPI接口、显示屏驱动和触摸屏驱动。
使用machine.SPI初始化SPI总线对象。
创建ili9341.ILI9341对象,指定SPI总线、片选引脚和数据/命令引脚,用于显示屏。
创建xpt2046.XPT2046对象,指定SPI总线、片选引脚和中断引脚,用于触摸屏。
在无限循环中,使用get_touch方法获取触摸坐标。
如果有触摸数据,将坐标打印出来,并在显示屏上显示一个红色的点。

案例7:显示图像和触摸交互

import machine
import ili9341
import xpt2046

# 初始化SPI总线和显示屏对象
spi_display = machine.SPI(1, baudrate=40000000, polarity=1, phase=1)
display = ili9341.ILI9341(spi_display, cs=machine.Pin('PD13'), dc=machine.Pin('PD12'))

# 初始化SPI总线和触摸屏对象
spi_touch = machine.SPI(3, baudrate=2000000, polarity=0, phase=0)
touch = xpt2046.XPT2046(spi_touch, cs=machine.Pin('PE4'), int_pin=machine.Pin('PE5'))

# 加载图像
image = ili9341.load_image('image.bmp')

# 触摸坐标偏移量
offset_x = 0
offset_y = 0

while True:
    # 获取触摸坐标
    touch_data = touch.get_touch()
    if touch_data:
        x, y = touch_data
        print("Touch position:", x, y)
        
        # 计算偏移量
        offset_x += x
        offset_y += y
        
        # 在触摸位置显示图像
        display.blit(image, x - offset_x, y - offset_y)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

要点解读:
引入machine、ili9341和xpt2046模块以访问SPI接口、显示屏驱动和触摸屏驱动。
使用machine.SPI初始化SPI总线对象。
创建ili9341.ILI9341对象,指定SPI总线、片选引脚和数据/命令引脚,用于显示屏。
创建xpt2046.XPT2046对象,指定SPI总线、片选引脚和中断引脚,用于触摸屏。
使用ili9341.load_image加载图像文件。
在无限循环中,使用get_touch方法获取触摸坐标。
如果有触摸数据,将坐标打印出来。
计算偏移量,用于实现图像的拖动效果。
使用blit方法在触摸位置显示图像,通过调整偏移量实现图像的位置变化。
这个程序展示了一个简单的图像显示和触摸交互的应用。当你触摸屏幕时,图像会跟随触摸位置移动。你可以根据需要对程序进行修改和扩展,添加更多的交互功能,例如点击事件、按钮控制等。

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

在这里插入图片描述

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号