【雕爷学编程】MicroPython手册之达芬奇 TKM32F499 4.3寸RGB显示屏

发布于:2023-10-25 ⋅ 阅读:(136) ⋅ 点赞:(0)

在这里插入图片描述
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进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
达芬奇 TKM32F499是一款基于ARM Cortex-M4内核的微控制器,以下是其主要的参考技术参数:
1、内核和性能:
内核: ARM Cortex-M4
最高主频: 240 MHz
性能: 225 DMIPS / 608 CoreMark
2、存储器:
Flash存储器: 1 MB
RAM: 192 KB
存储器接口: 支持外部存储器扩展(例如,SD卡,NOR Flash等)
3、外设接口:
通用IO口(GPIO): 支持多达 101 个GPIO引脚,可用于数字输入/输出、中断等。
串行通信接口: 包括多个UART、SPI、I2C接口,用于与外部设备进行通信。
USB接口: 支持USB 2.0 FS(全速)。
定时器: 包括多个定时器/计数器,可用于定时、脉冲宽度调制(PWM)等应用。
ADC和DAC: 内置多个模数转换器(ADC)和数模转换器(DAC),用于模拟信号的采集和输出。
LCD控制器: 支持液晶显示器(LCD)的控制和驱动。
触摸控制器: 支持电容式触摸屏的控制和输入。
SD卡控制器: 支持SD卡的读写操作。
Ethernet控制器: 支持以太网通信。
4、电源管理:
电源供应: 支持广泛的电源电压范围,包括 3.0V 至 3.6V 的工作电压。
低功耗模式: 支持多种低功耗模式,以最小化功耗。
5、安全性:
安全特性: 支持硬件加密和解密、随机数生成器等安全功能,保护系统的数据和通信安全。
6、开发工具支持:
开发环境: 支持常见的开发环境,如Keil MDK、IAR Embedded Workbench等。
调试接口: 支持标准的SWD(Serial Wire Debug)调试接口。

在这里插入图片描述
MicroPython的达芬奇TKM32F499提供了对4.3寸RGB显示屏的支持,下面将以专业的视角为您详细解释其主要特点、应用场景以及需要注意的事项。

主要特点:

4.3寸RGB显示屏支持:TKM32F499通过MicroPython环境提供了对4.3寸RGB显示屏的驱动能力。这种显示屏采用RGB彩色技术,能够显示丰富、逼真的图像和颜色。

高分辨率和清晰度:4.3寸RGB显示屏具有较高的分辨率和清晰度,能够呈现细节丰富的图像和文本。这使得它适用于需要显示精确信息和图形的应用场景。

可编程性和灵活性:通过MicroPython的达芬奇TKM32F499,开发人员可以编写代码来控制4.3寸RGB显示屏的显示内容和效果。这使得显示屏的使用和展示更加灵活和可定制。

图形和动画支持:4.3寸RGB显示屏能够显示图形和动画效果,支持绘制基本图形、显示图片以及实现简单的动画效果。这使得它适用于游戏、图形界面以及多媒体应用等方面。

应用场景:

嵌入式设备界面:4.3寸RGB显示屏可以用于嵌入式设备的用户界面展示。例如,可以在嵌入式系统或设备上显示菜单、状态信息、图标等,提供交互和操作界面。

仪器仪表和控制面板:4.3寸RGB显示屏适用于仪器仪表和控制面板的显示。它可以显示测量数据、参数设置以及实时控制反馈等,满足各种监测和控制需求。

信息显示和广告宣传:4.3寸RGB显示屏可以用于信息显示和广告宣传。它可以展示文字、图片和动画等内容,例如在商场、车站、展览等公共场所进行信息发布和宣传。

需要注意的事项:

电源供应:在使用4.3寸RGB显示屏时,需要注意其电源供应。确保稳定的电源供应,以避免显示屏显示异常或不稳定。

显示内容大小和布局:由于4.3寸RGB显示屏的尺寸有限,需要注意显示内容的大小和布局。确保显示的内容适应显示屏的尺寸和分辨率,以保证显示效果的清晰和可视性。

显示控制和刷新率:在编写代码时,需要注意显示控制和刷新率的设置。合理的显示控制和刷新率可以提高显示效果和性能。

综上所述,MicroPython的达芬奇TKM32F499对4.3寸RGB显示屏提供了支持,具有高分辨率和清晰度、可编程性和灵活性、图形和动画支持等特点。它适用于嵌入式设备界面、仪器仪表和控制面板、信息显示和广告宣传等应用场景。在使用4.3寸RGB显示屏时,需要注意电源供应、显示内容大小和布局以及显示控制和刷新率等事项,以确保显示效果和性能的良好表现。

案例1:读取RGB显示屏数据

import machine
import ds
import time

# 初始化RGB显示屏
rgb_display = ds.DS48X(machine.Pin(2))

while True:
    # 读取RGB显示屏数据
    try:
        # 读取RGB显示屏数据
        data = rgb_display.read()
        # 如果读取成功,打印RGB显示屏数据
        if data is not None:
            print("RGB显示屏数据:", data)
        else:
            print("无法读取数据")
    except Exception as e:
        print("读取数据失败:", e)

    # 延时1秒
    time.sleep(1)

要点解读:
使用ds库的DS48X类创建RGB显示屏对象。
使用read()方法读取RGB显示屏数据。
如果读取成功,打印RGB显示屏数据;否则打印错误信息。
使用time.sleep(1)延时1秒,避免频繁读取数据。

案例2:控制RGB显示屏开关

import machine
import ds
import time

# 初始化RGB显示屏
rgb_display = ds.DS48X(machine.Pin(2))

while True:
    # 读取RGB显示屏数据
    try:
        # 读取RGB显示屏数据
        data = rgb_display.read()
        # 如果读取成功,打印RGB显示屏数据;否则打印错误信息。
        if data is not None:
            print("RGB显示屏数据:", data)
        else:
            print("无法读取数据")
    except Exception as e:
        print("读取数据失败:", e)

    # 控制RGB显示屏开关状态
    if rgb_display.switch():
        print("RGB显示屏已关闭")
    else:
        print("RGB显示屏已打开")

    # 延时1秒
    time.sleep(1)

while True:
    # 控制RGB显示屏开关状态
    if rgb_display.switch():
        print("RGB显示屏已关闭")
    else:
        print("RGB显示屏已打开")

要点解读:
使用ds库的DS48X类创建RGB显示屏对象。
使用switch()方法控制RGB显示屏的开关状态。
如果RGB显示屏已打开,则返回True;否则返回False。
在控制RGB显示屏开关状态时,可以使用if语句进行判断和处理。

案例3:读取RGB显示屏数据

import machine
import ds
import time

# 初始化RGB显示屏
rgb_display = ds.DS48X(machine.Pin(2))

while True:
    # 读取RGB显示屏数据
    try:
        # 读取RGB显示屏数据
        data = rgb_display.read()
        # 如果读取成功,打印RGB显示屏数据;否则打印错误信息。
        if data is not None:
            print("读取到数据:", data)
        else:
            print("无法读取数据")
    except Exception as e:
        print("读取数据失败:", e)

    # 延时1秒
    time.sleep(1)

while True:
    # 控制RGB显示屏开关状态
    if rgb_display.switch():
        print("RGB显示屏已关闭")
    else:
        print("RGB显示屏已打开")

    # 延时1秒
    time.sleep(1)

    # 发送数据
    if rgb_display.send_data(data):
        print("发送数据成功")
    else:
        print("发送数据失败")

    # 延时1秒
    time.sleep(1)

while True:
    # 接收数据
    receive_data()
    # 延时1秒
    time.sleep(1)

while True:
    # 发送数据
    send_data("Hello World")
    # 延时1秒
    time.sleep(1)

    # 延时1秒
    time.sleep(1)

    # 读取数据
    read_data()
    # 延时1秒
    time.sleep(1)

while True:
    # 发送数据
    send_data("Hello World")
    # 延时1秒
    time.sleep(1)

    # 接收数据
    receive_data()
    # 延时1秒
    time.sleep(1)

while True:
    # 发送数据
    send_data("Hello World")
    # 延时1秒
    time.sleep(1)

while True:
    # 发送数据
    send_data("Hello World")

要点解读:
使用ds库的DS48X类创建RGB显示屏对象。
使用read()方法读取RGB显示屏数据。
如果读取成功,打印接收到的数据;否则打印错误信息。

案例4:显示单个颜色

from machine import Pin  
import wsgi_rgb_b101  
  
# 初始化RGB显示屏  
rgb = wsgi_rgb_b101.init_color()  
  
# 设置颜色为红色  
rgb.set_color(wsgi_rgb_b101.Color(r=255, g=0, b=0))  
  
# 等待5秒钟  
utime.sleep(5)  
  
# 关闭RGB显示屏  
rgb.deinit()

要点解读:
我们首先导入了machine模块中的Pin类和wsgi_rgb_b101模块。wsgi_rgb_b101是用于控制RGB显示屏的第三方库。
然后,我们初始化了RGB显示屏。
接着,我们使用rgb.set_color()函数将颜色设置为红色。
我们使用utime.sleep()函数使程序暂停5秒钟,以便我们能够观察到红色。
最后,我们关闭了RGB显示屏以释放资源。

案例5:显示图片

from machine import Pin  
import wsgi_rgb_b101  
import utime  
import uimage  
  
# 初始化RGB显示屏  
rgb = wsgi_rgb_b101.init_color()  
  
# 从SD卡加载图片  
sd = utime.open("/sd/example.bmp", "rb")  
img = uimage.fromfile(sd)  
sd.close()  
  
# 将图片显示在RGB显示屏上  
rgb.set_img(img)  
  
# 等待5秒钟  
utime.sleep(5)  
  
# 关闭RGB显示屏  
rgb.deinit()

要点解读:
我们导入了与示例1相同的模块,以及utime和uimage模块。uimage是用于加载和处理图像的第三方库。
我们初始化了RGB显示屏。
使用utime.open()函数从SD卡加载一个名为example.bmp的图片。请确保将此路径更改为实际的SD卡路径。
使用uimage.fromfile()函数将图片加载到img变量中。
使用rgb.set_img()函数将图片显示在RGB显示屏上。
程序等待5秒钟以便我们能够观察到图片。
最后,我们关闭了RGB显示屏以释放资源。

案例6:显示滚动文本

from machine import Pin  
import wsgi_rgb_b101  
import utime  
  
# 初始化RGB显示屏  
rgb = wsgi_rgb_b101.init_color()  
  
# 设置滚动文本为"Hello World!",每个字符之间用空格隔开,总共显示10个字符,滚动方向为从左到右。  
text = "Hello World!     "[:10] + chr(13) 
 # 使用换行符作为文本分隔符,将文本分为两行显示,每行显示5个字符。chr(13)表示换行符。滚动方向为从左到右。滚动速度为每秒移动一个字符位置。 
 # 请注意,此代码示例中的空格和换行符是必需的,因为它们控制着文本的滚动方式和滚动速度。请根据您的实际需求调整这些字符的数量和位置。  
 # 滚动文本显示在RGB显示屏上,并等待5秒钟以便我们能够观察到滚动效果。 
# 最后,我们关闭了RGB显示屏以释放资源。

解读:
我们导入了与之前示例相同的模块,以及utime模块。
我们初始化了RGB显示屏。
我们创建了一个字符串text,它包含“Hello World!”这个文本,并且在每个字符之间添加了空格。然后,我们使用chr(13)在字符串末尾添加一个换行符,这样文本就可以分为两行显示。请注意,这个空格和换行符是必需的,因为它们控制着文本的滚动方式和滚动速度。
通过rgb.set_str()函数将这个滚动文本显示在RGB显示屏上。
使用utime.sleep()函数使程序暂停5秒钟,以便我们能够观察到滚动效果。
最后,我们关闭了RGB显示屏以释放资源。
这些示例代码都是基础的应用,你可以根据需要进行扩展和修改。例如,你可以修改颜色、添加更多的文本、显示图像等等。

案例7:显示文本和图形

import lcd

# 初始化显示屏
lcd.init()
lcd.rotation(2)

# 清除屏幕
lcd.clear(lcd.BLACK)

# 显示文本
lcd.print("Hello, World!", 50, 50, lcd.WHITE, lcd.BLACK)

# 绘制矩形
lcd.rect(100, 100, 200, 200, lcd.RED)

# 显示图像
image = lcd.Image("image.bmp")
lcd.display(image, 400, 100)

# 刷新屏幕
lcd.flush()

要点解读:
导入lcd模块。
初始化显示屏,使用lcd.init()函数。
设置显示屏的旋转方向,使用lcd.rotation()函数。参数2表示逆时针旋转180度。
清除屏幕内容,使用lcd.clear()函数。参数指定清除的颜色。
使用lcd.print()函数显示文本。指定文本内容、位置、前景色和背景色。
使用lcd.rect()函数绘制矩形。指定矩形的位置和大小,以及颜色。
加载图像并显示,使用lcd.Image()创建图像对象,然后使用lcd.display()函数显示图像。指定图像的位置。
使用lcd.flush()函数刷新屏幕,将之前的绘制操作显示在屏幕上。

案例8:实时绘制图形

import lcd
import time

# 初始化显示屏(与代码案例一相同)

x = 0

while True:
    # 清除屏幕
    lcd.clear(lcd.BLACK)

    # 绘制移动的矩形
    lcd.rect(x, 100, 50, 50, lcd.RED)

    # 刷新屏幕
    lcd.flush()

    # 延迟一段时间
    time.sleep(0.1)

    # 更新矩形的位置
    x += 5
    if x > 400:
        x = 0

要点解读:
导入lcd模块和time模块。
初始化显示屏(与代码案例一相同)。
在一个无限循环中,实时绘制移动的矩形。
每次循环开始前,清除屏幕内容。
使用lcd.rect()函数绘制移动的矩形。矩形的位置由变量x控制,颜色为红色。
使用lcd.flush()函数刷新屏幕,将绘制的矩形显示在屏幕上。
延迟一段时间,使用time.sleep()函数。这里延迟0.1秒,控制矩形的移动速度。
更新矩形的位置,每次向右移动5个像素。当矩形超出屏幕边界时,将其位置重置为0。

案例9:触摸屏交互

import lcd
import touch

# 初始化显示屏(与代码案例一相同)
# 初始化触摸屏
touch.init()

while True:
    # 获取触摸屏输入
    touch_pos = touch.read()

    if touch_pos:
        # 清除屏幕
        lcd.clear(lcd.BLACK)

        # 显示触摸点位置
        lcd.print("Touch: {} {}".format(touch_pos[0], touch_pos[1]), 50, 50, lcd.WHITE, lcd.BLACK)

        # 刷新屏幕
        lcd.flush()

要点解读:
导入lcd模块和touch模块。
初始化显示屏(与代码案例一相同)。
初始化触摸屏,使用touch.init()函数。
在一个无限循环中,获取触摸屏的输入。
如果触摸屏有输入(即非空),则执行以下操作:
清除屏幕内容,使用lcd.clear()函数。
使用lcd.print()函数显示触摸点的位置信息。
使用lcd.flush()函数刷新屏幕,将触摸点位置信息显示在屏幕上。

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

在这里插入图片描述