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

在这里插入图片描述
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提供了对7寸RGB显示屏的支持,下面将以专业的视角为您详细解释其主要特点、应用场景以及需要注意的事项。

主要特点:

7寸RGB显示屏支持:TKM32F499通过MicroPython环境提供了对7寸RGB显示屏的驱动能力。这种显示屏具有较大的尺寸,能够显示更多的内容,如图像、文本和数据。

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

多点触摸支持:部分7寸RGB显示屏支持多点触摸功能,使用户能够通过手指在屏幕上进行多点触控操作。这增加了交互性和用户体验,适用于需要触摸交互的应用场景。

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

应用场景:

工业控制和监控:7寸RGB显示屏适用于工业控制和监控场景。它可以显示各种工业参数、设备状态和图形界面,帮助操作员进行设备控制和监测。

智能家居控制中心:7寸RGB显示屏可以用作智能家居控制中心的显示设备。它可以显示家庭信息、设备状态和操作界面,方便用户进行家居设备的控制和管理。

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

交互式教学和培训:通过支持多点触摸功能的7寸RGB显示屏,可以用于交互式教学和培训场景。学生和参与者可以通过触摸屏幕进行互动、操作和学习。

需要注意的事项:

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

显示内容大小和布局:由于7寸RGB显示屏的尺寸较大,需要注意显示内容的大小和布局。合理安排显示内容的大小和布局,以确保显示效果的清晰和可视性。

触摸操作的校准:如果使用支持多点触摸的7寸RGB显示屏,需要进行触摸操作的校准。确保触摸的精度和准确性,提高用户体验和操作效果。

综上所述,MicroPython的达芬奇TKM32F499对7寸RGB显示屏提供了支持,具有高分辨率和清晰度、多点触摸支持、可编程性和灵活性等特点。它适用于工业控制和监控、智能家居控制中心、信息展示和广告宣传、交互式教学和培训等应用场景。在使用7寸RGB显示屏时,需要注意电源供应、显示内容大小和布局以及触摸操作的校准等事项,以确保显示效果和性能的良好表现。

案例1:显示文本

from machine import I2C, Pin
import ssd1306

i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

def display_text():
    oled.fill(0)
    oled.text("Hello, TKM32F499!", 0, 0)
    oled.show()

display_text()

要点解读:
首先,我们需要导入所需的库,包括machine、ssd1306和Pin。
然后,我们创建一个I2C对象,用于与显示屏进行通信。这里我们使用SCL为5,SDA为4的引脚。
接下来,我们创建一个SSD1306_I2C对象,指定显示屏的宽度、高度和I2C接口。
定义一个display_text函数,用于在屏幕上显示文本。在这个函数中,我们首先清空屏幕,然后使用text方法将文本绘制到屏幕上,最后调用show方法更新显示。
最后,调用display_text函数来显示文本。

案例2:显示图片

from machine import I2C, Pin
import ssd1306
from PIL import Image
import framebuf

i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)

def display_image():
    img = Image.open("image.bmp")
    fb = framebuf.FrameBuffer(img.width, img.height, img.mode)
    fb.blit(img, 0, 0)
    oled.blit(fb, 0, 0)
    oled.show()

display_image()

要点解读:
首先,我们需要导入所需的库,包括machine、ssd1306、PIL(Python Imaging Library)和framebuf。
然后,我们创建一个I2C对象,用于与显示屏进行通信。这里我们使用SCL为5,SDA为4的引脚。
接下来,我们创建一个SSD1306_I2C对象,指定显示屏的宽度、高度和I2C接口。
定义一个display_image函数,用于在屏幕上显示图片。在这个函数中,我们首先打开一张图片,然后创建一个framebuf对象,将图片数据存储在其中。接着,我们将framebuf对象绘制到屏幕上,最后调用show方法更新显示。
最后,调用display_image函数来显示图片。

案例3:显示动画

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

i2c = I2C(scl=Pin(5), sda=Pin(4))
oled = ssd1306.SSD1306_I2C(128, 64, i2c)
pwm = PWM(Pin(3), freq=500)

def display_animation():
    for i in range(10):
        oled.fill(0)
        oled.text("Loading", 0, 0)
        oled.show()
        time.sleep(1)
        oled.fill(0)
        oled.text("Loading.", 0, 0)
        oled.show()
        time.sleep(1)
        oled.fill(0)
        oled.text("Loading..", 0, 0)
        oled.show()
        time.sleep(1)
        oled.fill(0)
        oled.text("Loading...", 0, 0)
        oled.show()
        time.sleep(1)

display_animation()

要点解读:
首先,我们需要导入所需的库,包括machine、ssd1306、time和PWM。
然后,我们创建一个I2C对象,用于与显示屏进行通信。这里我们使用SCL为5,SDA为4的引脚。
接下来,我们创建一个SSD1306_I2C对象,指定显示屏的宽度、高度和I2C接口。同时,我们创建一个PWM对象,用于控制LED灯的亮度。
定义一个display_animation函数,用于在屏幕上显示动画。在这个函数中,我们使用一个循环来依次显示四个不同的加载状态。每次显示后,我们调用time.sleep(1)让程序暂停1秒,以便观察动画效果。
最后,调用display_animation函数来显示动画。

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

import machine
import time

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

while True:
    # 读取RGB显示屏数据
    data = rgb_display.read()
    if data is not None:
        print("读取到的数据:", data)
    else:
        print("无法读取数据")

    # 延时1秒
    time.sleep(1)

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

    # 延时1秒
    time.sleep(1)

    # 发送数据
    if rgb_display.send_data(data)print("发送数据成功")
    else,打印错误信息。

    # 延时1秒
    time.sleep(1)

    # 接收数据
    receive_data()
    if receive_data is not None:
        print("接收到的数据:", receive_data)
    else:
        print("无法接收数据")

    # 延时1秒
    time.sleep(1)

    # 读取RGB显示屏数据
    try:
        data = rgb_display.read()
        if data is not None:
            print("读取到的数据:", data)
    except Exception as e:
        print("读取数据失败:", e)

    # 延时1秒
    time.sleep(1)

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

    # 延时1秒
    time.sleep(1)

    # 发送数据
    send_data("Hello World")
    time.sleep(1)

要点解读:
使用ds库的DS48X类创建RGB显示屏对象。
使用read()方法读取RGB显示屏数据。
如果读取成功,打印接收到的数据;否则打印错误信息。
延时1秒
控制RGB显示屏开关状态
如果 rgb_display.switch(): print(“RGB显示屏已关闭”) else: print(“RGB显示屏已打开”)
延时1秒
发送数据
如果 rgb_display.send_data(data): print(“发送数据成功”) else,打印错误信息。
延时1秒
接收数据
如果 receive_data is not None: print(“接收到的数据:”, receive_data) else: print(“无法接收数据”)
延时1秒
读取RGB显示屏数据
如果 rgb_display.read() is not None: print(“读取到数据:”, data) else: print(“无法读取数据”)
延时1秒
控制RGB显示屏开关状态
如果 rgb_display.switch(): print(“RGB显示屏已关闭”) else: print(“RGB显示屏已打开”)

案例5:显示单个颜色

from machine import Pin  
import wsgi_rgb_b101  
  
# 初始化RGB显示屏  
rgb = wsgi_rgb_b101.init_color(0, 0, 0)  # 参数为RGB显示屏的引脚号  
  
# 设置颜色为红色  
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显示屏,init_color()函数的参数为RGB显示屏的引脚号。
接着,我们使用rgb.set_color()函数将颜色设置为红色。
我们使用utime.sleep()函数使程序暂停5秒钟,以便我们能够观察到红色。
最后,我们关闭了RGB显示屏以释放资源。

案例6:显示图片

from machine import Pin  
import wsgi_rgb_b101  
import utime  
import uimage  
  
# 初始化RGB显示屏  
rgb = wsgi_rgb_b101.init_color(0, 0, 0)  # 参数为RGB显示屏的引脚号  
  
# 从SD卡加载图片  
sd = utime.open("/sd/example.bmp", "rb")  # 请确保将此路径更改为实际的SD卡路径  
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显示屏以释放资源。

案例7:显示滚动文本

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

案例8:显示图像

import lcd

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

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

# 刷新屏幕
lcd.flush()

要点解读:
导入lcd模块。
初始化显示屏,使用lcd.init()函数。
设置显示屏的旋转方向,使用lcd.rotation()函数。参数2表示逆时针旋转180度。
加载图像并显示,使用lcd.Image()创建图像对象,然后使用lcd.display()函数显示图像。
使用lcd.flush()函数刷新屏幕,将图像显示在屏幕上。

案例9:绘制实时图形

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 > 600:
        x = 0

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

案例10:触摸屏交互

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()函数刷新屏幕,将触摸点位置信息显示在屏幕上。
以上是几个在达芬奇TKM32F499 7寸RGB显示屏上使用MicroPython的实际应用程序参考代码案例。这些案例涵盖了显示图像、实时动画和触摸屏交互等功能。

请注意,以上案例只是为了拓展思路,可能存在错误或不适用的情况。不同的硬件平台、使用场景和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、付费专栏及课程。

余额充值