【雕爷学编程】MicroPython手册之 Teensy 4.1 SD卡

在这里插入图片描述
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进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。
在这里插入图片描述
Teensy 4.1是一款基于ARM Cortex-M7的高性能开发板,具有以下特点:

1、处理器:Teensy 4.1使用了恩智浦的i.MX RT1060处理器,它是一款交叉处理器,具有微控制器的功能,速度与微型计算机相当。它的运行频率高达600 MHz,可提供高达3000 DMIPS的性能,以及浮点运算单元和加密加速器。
2、内存:Teensy 4.1配备了1024 KB的RAM(其中512 KB是紧密耦合的),8 MB的Flash(其中64 KB用于恢复和EEPROM模拟),以及两个位置可以选择添加更多的QSPI内存芯片。
3、I/O引脚:Teensy 4.1共有55个数字输入/输出引脚,其中35个支持PWM输出,18个支持模拟输入。它还提供了8个串口,3个SPI端口,3个I2C端口,2个I2S/TDM数字音频端口,3个CAN总线(其中一个支持CAN FD),以及一个SDIO(4位数据)原生SD卡端口12。
4、以太网:Teensy 4.1包含了一个以太网控制器和一个以太网PHY芯片(DP83825),支持10/100 Mbit的速度。连接以太网电缆只需要一个RJ45磁插孔套件。
5、USB主机:Teensy 4.1提供了一个USB主机端口,支持480 Mbit/sec的速度。它可以连接USB设备,如键盘、鼠标、MIDI设备等。
6、RTC:Teensy 4.1支持实时时钟(RTC),可以通过连接一个3V纽扣电池来保持日期和时间。
7、LED:Teensy 4.1有一个内置的GPIO指示灯LED,连接在引脚13上。

在这里插入图片描述
MicroPython的Teensy 4.1 SD卡是一种用于存储和读取数据的外部存储设备。

主要特点:

大容量存储:Teensy 4.1 SD卡支持高容量存储,可以容纳大量的数据。它可以提供数GB至数TB的存储空间,适合存储大型文件、多媒体数据等。
快速数据传输:SD卡接口通常支持高速数据传输,可以实现快速的读写操作。Teensy 4.1 SD卡支持高速SPI总线传输,可以提供高速的数据读写性能。
可移动性:SD卡是一种可移动存储设备,可以方便地从一个设备移动到另一个设备。这使得数据的共享和传输更加灵活和便捷。
可靠性和耐用性:SD卡通常具有良好的可靠性和耐用性,可以在各种环境条件下长时间使用。它们可以承受震动、温度变化和湿度等不利因素,并保持数据的完整性和可靠性。

应用场景:

数据存储和备份:Teensy 4.1 SD卡适用于需要大容量存储和备份数据的应用。例如,可以将传感器数据、实验数据、日志文件等存储在SD卡中,以便后续分析和处理。
多媒体存储:由于SD卡具有大容量和快速数据传输的特点,它们常用于存储和播放多媒体文件,如音频、视频、图像等。可以将音乐、影片、照片等存储在SD卡中,通过Teensy 4.1读取和播放。
数据交换和共享:SD卡的可移动性使其成为数据交换和共享的理想选择。可以将数据存储在SD卡中,并轻松地将其插入其他设备,如电脑、平板电脑等,进行数据传输和共享。
嵌入式系统存储:SD卡常用于嵌入式系统中,作为存储程序代码、配置文件和其他数据的介质。通过Teensy 4.1 SD卡,可以方便地加载和执行程序,实现嵌入式系统的功能。

需要注意的事项:

SD卡格式化:在使用SD卡之前,需要将其格式化为适当的文件系统,如FAT32。确保正确格式化SD卡,以便与Teensy 4.1兼容并正确读写数据。
电源供应:SD卡通常需要额外的电源供应。在使用Teensy 4.1 SD卡时,确保为SD卡提供足够的电源,以确保其正常工作。
数据安全性:考虑到SD卡的可移动性,需要注意数据的安全性和保护。在移动SD卡时,确保数据的备份和保护,避免数据丢失或泄露的风险。

总结:
MicroPython的Teensy 4.1 SD卡是一种用于存储和读取数据的外部存储设备,具有大容量存储、快速数据传输、可移动性以及可靠性和耐用性等特点。它适用于数据存储和备份、多媒体存储、数据交换和共享以及嵌入式系统存储等应用场景。在使用Teensy 4.1 SD卡时,需要注意正确格式化SD卡、提供足够的电源供应以及保护数据安全性。这样可以确保SD卡的正常工作和数据的可靠性。

在这里插入图片描述

案例一:SD卡初始化

from machine import Pin, SPI
import time

# 定义SD卡引脚
cs_pin = Pin(10, Pin.OUT)
dc_pin = Pin(13, Pin.OUT)
sd_pin = Pin(19, Pin.IN)

# 初始化SPI总线
spi = SPI(1, baudrate=40000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))

# 初始化SD卡
sd = spi.open(cs=Pin(10), mode=0b00)

要点解读:这个程序首先导入了Pin和SPI类,然后定义了SD卡的CS、DC和SD引脚。接着,使用这些引脚初始化了一个SPI总线对象。最后,使用SPI对象的open()方法初始化SD卡。

案例二:写入文件到SD卡

from machine import Pin, SPI
import time

# 定义SD卡引脚
cs_pin = Pin(10, Pin.OUT)
dc_pin = Pin(13, Pin.OUT)
sd_pin = Pin(19, Pin.IN)

# 初始化SPI总线
spi = SPI(1, baudrate=40000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))

# 打开SD卡
sd = spi.open(cs=Pin(10), mode=0b00)

# 要写入的数据
data = [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]

# 将数据写入文件
with open('test.txt', 'w') as f:
    f.write(''.join(chr(x) for x in data))

# 关闭SD卡
sd.close()

要点解读:这个程序与第一个案例类似,首先导入了Pin和SPI类,然后定义了SD卡的CS、DC和SD引脚。接着,使用这些引脚初始化了一个SPI总线对象。然后,使用SPI对象的open()方法打开SD卡。接下来,程序将要写入的数据存储在一个列表中,并使用Python内置的文件操作函数将这些数据写入名为’test.txt’的文件中。最后,程序关闭了SD卡。

案例三:从SD卡读取文件内容

from machine import Pin, SPI
import time

# 定义SD卡引脚
cs_pin = Pin(10, Pin.OUT)
dc_pin = Pin(13, Pin.OUT)
sd_pin = Pin(19, Pin.IN)

# 初始化SPI总线
spi = SPI(1, baudrate=40000000, polarity=0, phase=0, sck=Pin(18), mosi=Pin(23), miso=Pin(19))

# 打开SD卡
sd = spi.open(cs=Pin(10), mode=0b00)

# 读取文件内容
with open('test.txt', 'r') as f:
    content = f.read()

# 打印文件内容
print(content)

# 关闭SD卡
sd.close()

要点解读:这个程序与第二个案例类似,首先导入了Pin和SPI类,然后定义了SD卡的CS、DC和SD引脚。接着,使用这些引脚初始化了一个SPI总线对象。然后,使用SPI对象的open()方法打开SD卡。接下来,程序使用Python内置的文件操作函数读取名为’test.txt’的文件的内容,并将其存储在一个变量中。最后,程序打印出文件的内容,并关闭了SD卡。

案例四:读取SD卡文件

import os
import sdcard

sd = sdcard.SDCard(SPI, cs=Pin(4))  

os.mount(sd, '/sd')

with open('/sd/data.txt') as f:
  print(f.read())

该示例挂载SD卡,并读取data.txt文件的内容。注释:使用os和sdcard模块来访问SD卡。

案例五:向SD卡写入数据

importuos

uos.mount(sd,'/sd') 

with open('/sd/log.txt','a') as f:
  f.write('Log data') 

该示例打开log.txt文件,并向其追加写入数据。注释:使用uos可以像操作本地文件一样写SD卡。

案例六:播放SD卡音乐

import audio

sd = sdcard.SDCard(SPI, cs=Pin(4))
uos.mount(sd, '/sd')

audio.player('/sd/music.mp3')

该示例播放SD卡中的音乐文件。注释:调用audio模块的player函数可以播放音乐。综上所述,Teensy 4.1通过SD卡接口与MicroPython的文件系统支持,可以方便地读写文件,展开更多扩展应用。

案例七:读取SD卡中的文件

import os  
import machine  
import sdcard  
import uos  
  
class SDCardReader:  
    def __init__(self, spi, cs):  
        self.spi = spi  
        self.cs = cs  
        self.sdcard = sdcard.SDCard(spi, cs)  
        uos.VfsFat.mkfs(self.sdcard)  # 格式化SD卡为FAT文件系统  
        self.vfs = uos.VfsFat(self.sdcard)  # 挂载SD卡为虚拟文件系统  
          
    def read_file(self, file_path):  
        with open(file_path, 'r') as f:  
            content = f.read()  
        return content

要点解读:此代码定义了一个SDCardReader类,用于读取SD卡中的文件。在类的初始化函数中,定义了用于控制SPI总线的spi对象和SD卡的片选信号cs引脚。在read_file方法中,实现了打开指定路径的文件并读取其内容的功能。注意,这里使用了uos模块中的VfsFat类来格式化SD卡为FAT文件系统,并挂载SD卡为虚拟文件系统,以便能够使用类似于在普通操作系统中的文件读写方式来操作SD卡。在实际应用中,可以根据需要修改和扩展此类,例如添加写入文件、删除文件、列出文件列表等方法。

案例八:写入文件到SD卡

import os  
import machine  
import sdcard  
import uos  
  
class SDCardWriter:  
    def __init__(self, spi, cs):  
        self.spi = spi  
        self.cs = cs  
        self.sdcard = sdcard.SDCard(spi, cs)  
        uos.VfsFat.mkfs(self.sdcard)  # 格式化SD卡为FAT文件系统  
        self.vfs = uos.VfsFat(self.sdcard)  # 挂载SD卡为虚拟文件系统  
          
    def write_file(self, file_path, content):  
        with open(file_path, 'w') as f:  
            f.write(content)

要点解读:此代码定义了一个SDCardWriter类,用于写入文件到SD卡。在类的初始化函数中,定义了用于控制SPI总线的spi对象和SD卡的片选信号cs引脚。在write_file方法中,实现了创建指定路径的文件并写入内容的功能。注意,这里使用了uos模块中的VfsFat类来格式化SD卡为FAT文件系统,并挂载SD卡为虚拟文件系统,以便能够使用类似于在普通操作系统中的文件读写方式来操作SD卡。在实际应用中,可以根据需要修改和扩展此类,例如添加读取文件、删除文件、列出文件列表等方法。

案例九:备份数据到SD卡

import os  
import machine  
import sdcard  
import uos  
import json  
  
class DataBackupper:  
    def __init__(self, spi, cs, data):  
        self.spi = spi  
        self.cs = cs  
        self.sdcard = sdcard.SDCard(spi, cs)  
        uos.VfsFat.mkfs(self.sdcard)  # 格式化SD卡为FAT文件系统  
        self.vfs = uos.VfsFat(self.sdcard)  # 挂载SD卡为虚拟文件系统  
        self.data = data  # 要备份的数据,可以是任何数据类型,例如字典、列表等  
          
    def backup(self, file_path):  
        with open(file_path, 'w') as f:  
            json.dump(self.data, f)  # 将数据以JSON格式写入文件

要点解读:此代码定义了一个DataBackupper类,用于备份数据到SD卡。在类的初始化函数中,定义了用于控制SPI总线的spi对象和SD卡的片选信号cs引脚,以及要备份的数据。在backup方法中,实现了将数据以JSON格式写入指定路径的文件的功能。注意,这里使用了uos模块中的VfsFat类来格式化SD卡为FAT文件系统,并挂载SD卡为虚拟文件系统,以便能够使用类似于在普通操作系统中的文件读写方式来操作SD卡。同时,使用了json模块来将数据以JSON格式写入文件。在实际应用中,可以根据需要修改和扩展此类,例如添加恢复数据、加密数据等功能。

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

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值