【雕爷学编程】MicroPython手册之文件系统操作函数 uos.mount() - 挂载文件系统

在这里插入图片描述

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进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述

MicroPython的uos.mount()是一个用于将文件系统对象挂载到虚拟文件系统(VFS)中的位置的函数,它接受三个参数:fsobj、mount_point和readonly。

它的主要特点有:

fsobj可以是一个具有mount()方法或一个块设备的VFS对象,如果它是一个块设备,则自动检测文件系统类型,如果没有识别出文件系统,则会引发异常。
mount_point可以是’/‘,将fsobj挂载在根目录,也可以是’/',将fsobj挂载在根目录下的子目录。
readonly是一个布尔值,如果为True,则文件系统以只读方式挂载。

它的应用场景有:

在MicroPython启动时,将内置的或外部的存储设备(如闪存、SD卡等)挂载到VFS中,以便访问文件和目录。
在运行时,动态地将不同类型的文件系统(如FAT、littlefs等)挂载到VFS中,以实现灵活的文件管理。
在需要保护文件系统不被修改的情况下,将文件系统以只读方式挂载到VFS中。

它的注意事项有:

在挂载过程中,会调用fsobj上的mount()方法,在卸载过程中,会调用fsobj上的umount()方法。
如果mount_point已经被挂载,则会引发OSError (EPERM)异常。
如果未找到mount_point,则会引发OSError (EINVAL)异常。

以下是MicroPython的uos.mount()几个实际运用程序案例:

案例1:在MicroPython启动时,将内置的闪存设备(假设为bdev)挂载到根目录::

import uos
uos.mount(bdev, '/')

案例2:在运行时,将SD卡设备(假设为sd)上的FAT文件系统挂载到’/sd’子目录::

import uos
from machine import SD
sd = SD()
vfs = uos.VfsFat(sd)
uos.mount(vfs, '/sd')

案例3:在运行时,将SPI闪存设备(假设为spi)上的littlefs v2 文件系统以只读方式挂载到’/spi’子目录::

import uos
from machine import SPIFlash
spi = SPIFlash()
vfs = uos.VfsLfs2(spi)
uos.mount(vfs, '/spi', readonly=True)

案例4:挂载SD卡文件系统:

import uos
import machine
import sdcard

# 初始化SD卡
spi = machine.SPI(1)
sd = sdcard.SDCard(spi, machine.Pin(15))
uos.mount(sd, '/sd')

# 在SD卡上创建文件
with open('/sd/data.txt', 'w') as file:
    file.write('Hello, SD card!')

在这个示例中,我们使用uos.mount()函数挂载了一个连接到SPI总线的SD卡文件系统。首先,我们初始化了SD卡并创建了一个SD卡对象。然后,我们调用uos.mount()函数将SD卡文件系统挂载到指定的挂载点/sd上。最后,我们在SD卡上创建了一个文件data.txt并写入内容。

案例5:挂载Flash文件系统:

import uos
import flashbdev

# 初始化Flash文件系统
uos.VfsFat.mkfs(flashbdev.bdev)
uos.mount(flashbdev.bdev, '/flash')

# 在Flash上创建文件
with open('/flash/config.txt', 'w') as file:
    file.write('Flash configuration')

在这个示例中,我们使用uos.mount()函数挂载了MicroPython固件中的Flash文件系统。首先,我们通过调用uos.VfsFat.mkfs()函数创建了一个FAT文件系统在Flash上。然后,我们调用uos.mount()函数将Flash文件系统挂载到指定的挂载点/flash上。最后,我们在Flash上创建了一个文件config.txt并写入内容。

案例6:挂载网络文件系统::

import uos
import network

# 连接到Wi-Fi网络

ssid = 'Your_SSID'
password = 'Your_Password'

sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(ssid, password)

while not sta_if.isconnected():
    pass

# 挂载网络文件系统
uos.mount(network.WLAN(network.STA_IF), '/network')

# 在网络文件系统上创建文件
with open('/network/data.txt', 'w') as file:
    file.write('Hello, network!')

在这个示例中,我们首先连接到Wi-Fi网络。然后,我们调用uos.mount()函数将网络接口对象network.WLAN(network.STA_IF)挂载为网络文件系统。我们将网络文件系统挂载到指定的挂载点/network上。最后,我们在网络文件系统上创建了一个文件data.txt并写入内容。

案例7:挂载SD卡文件系统

import uos

# 挂载SD卡文件系统
sdcard_path = "/sd"
uos.mount(machine.SDCard(), sdcard_path)

在这个例子中,我们使用 uos.mount() 函数将 SD 卡文件系统挂载到指定的路径上。我们使用 machine.SDCard() 创建一个 SD 卡对象,并将其作为参数传递给 uos.mount() 函数,同时指定挂载路径为 sdcard_path。

案例8:挂载SPI Flash文件系统

import uos
from machine import SPI, Pin

# 挂载SPI Flash文件系统
flash_path = "/flash"
spi = SPI(1, baudrate=10000000, polarity=0, phase=0)  # 设置SPI参数
cs = Pin(5, Pin.OUT)  # 指定芯片选择引脚
uos.mount(spi, flash_path)

在这个例子中,我们使用 uos.mount() 函数将 SPI Flash 文件系统挂载到指定的路径上。我们首先使用 SPI() 函数设置 SPI 的参数,包括时钟速率、极性和相位等。然后,我们使用 Pin() 函数指定芯片选择引脚。最后,我们将 SPI 对象和挂载路径作为参数传递给 uos.mount() 函数。

案例9:挂载网络文件系统(如FTP服务器:

import uos
import network

# 连接到WiFi网络
wifi_ssid = "your_wifi_ssid"
wifi_password = "your_wifi_password"
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect(wifi_ssid, wifi_password)
while not sta_if.isconnected():
    pass

# 挂载FTP服务器文件系统
ftp_path = "/ftp"
ftp_host = "ftp.example.com"
ftp_user = "ftp_username"
ftp_password = "ftp_password"
ftp = network.FTP()
ftp.connect(ftp_host)
ftp.login(ftp_user, ftp_password)
uos.mount(ftp, ftp_path)

在这个例子中,我们首先连接到 WiFi 网络,确保设备可以访问网络。然后,我们创建一个 FTP 对象,并使用 connect() 和 login() 方法连接到 FTP 服务器,并进行身份验证。最后,我们使用 uos.mount() 函数将 FTP 服务器的文件系统挂载到指定的路径上。

这些实际运用程序案例展示了如何使用MicroPython的uos.mount()函数挂载不同类型的文件系统,包括SD卡文件系统、Flash文件系统和网络文件系统。通过挂载文件系统,我们可以在MicroPython中访问和操作外部存储设备、Flash存储器以及网络共享资源。请注意,具体的挂载方法和参数可能因硬件和文件系统类型而有所不同,请根据实际情况进行调整。

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值