【雕爷学编程】MicroPython手册之内置模块 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的内置模块os提供了一些基本的操作系统服务,包括文件系统的访问和管理。其中,os.mount(fsobj, mount_point, *, readonly=False)是一个用于挂载文件系统的函数。它的主要特点、应用场景,以及需注意事项如下:

主要特点:os.mount(fsobj, mount_point, *, readonly=False)接受三个参数:fsobj是一个实现了os.AbstractBlockDev协议的文件系统对象;mount_point是一个字符串,表示要挂载文件系统的路径;readonly是一个可选的布尔值,表示是否以只读模式挂载文件系统。如果mount_point已经被其他文件系统挂载,或者mount_point不是一个有效的路径,或者fsobj不是一个有效的文件系统对象,那么os.mount(fsobj, mount_point, *, readonly=False)会抛出一个异常。

应用场景:os.mount(fsobj, mount_point, *, readonly=False)可以用于在文件系统中挂载不同类型和来源的文件系统。例如,可以用os.mount(fsobj, mount_point, *, readonly=False)将一个SD卡上的FAT文件系统挂载到/sd目录下,或者将一个自定义的块设备上的Littlefs文件系统挂载到/flash目录下。

需注意事项:在使用os.mount(fsobj, mount_point, *, readonly=False)之前,需要导入该模块,使用import os语句。在使用os.mount(fsobj, mount_point, *, readonly=False)时,需要注意可能会影响文件系统的性能和兼容性,因为不同类型和来源的文件系统可能有不同的特性和限制。另外,os.mount(fsobj, mount_point, *, readonly=False)在不同的平台上可能有不同的实现和支持。因此,在使用os.mount(fsobj, mount_point, *, readonly=False)时,最好先检查平台的特性和限制。

以下是MicroPython的内置模块os.mount(fsobj, mount_point, *, readonly=False)的几个实际运用程序案例:

案例一:在MicroPython板子上将一个SD卡上的FAT文件系统挂载到/sd目录下,并打印出其状态信息。代码如下:

import os
import machine
import sdcard
import statvfs

# 创建一个SD卡对象
sd = sdcard.SDCard(machine.SPI(1), machine.Pin(15))

# 创建一个FAT文件系统对象
vfs = os.VfsFat(sd)

# 将FAT文件系统挂载到/sd目录下
os.mount(vfs, '/sd')

# 获取/sd目录下的文件系统状态信息
st = statvfs.statvfs('/sd')

# 打印文件系统状态信息
print('The status of /sd is:')
print('Block size:', st[0], 'bytes')
print('Fragment size:', st[1], 'bytes')
print('Total blocks:', st[2])
print('Free blocks:', st[3])
print('Available blocks:', st[4])
print('Total inodes:', st[5])
print('Free inodes:', st[6])
print('Available inodes:', st[7])
print('Flags:', st[8])
print('Maximum file name length:', st[9])

案例二:在MicroPython板子上将一个自定义的块设备上的Littlefs文件系统挂载到/flash目录下,并创建一个名为’test.txt’的文件。代码如下:

import os
import machine
import littlefs

# 创建一个自定义的块设备对象(假设有256个扇区,每个扇区4096字节)
bdev = littlefs.CustomBlockDevice(256, 4096)

# 创建一个Littlefs文件系统对象
vfs = os.VfsLfs2(bdev)

# 将Littlefs文件系统挂载到/flash目录下
os.mount(vfs, '/flash')

# 在/flash目录下创建一个名为'test.txt'的文件
f = open('/flash/test.txt', 'w')

# 写入一些内容
f.write('Hello, Littlefs!\n')

# 关闭文件
f.close()

案例三:在MicroPython板子上将一个RAM上的FAT文件系统挂载到/ram目录下,并以只读模式打开一个名为’readme.txt’的文件。代码如下:

import os
import machine
import ramdisk

# 创建一个RAM上的FAT文件系统对象(假设有64个扇区,每个扇区512字节)
vfs = ramdisk.RamDisk(64, 512)

# 将RAM上的FAT文件系统挂载到/ram目录下
os.mount(vfs, '/ram')

# 在/ram目录下以只读模式打开一个名为'readme.txt'的文件
f = open('/ram/readme.txt', 'r')

# 读取文件内容
content = f.read()

# 打印文件内容
print(content)

# 关闭文件
f.close()

案例四:挂载SD卡:

import machine
import uos
import sdcard
import mount

# 初始化SD卡
spi = machine.SPI(1, baudrate=10000000, polarity=0, phase=0)
sd = sdcard.SDCard(spi, machine.Pin(4))
uos.mount(sd, "/sd")

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

# 卸载SD卡
uos.umount("/sd")

在这个例子中,我们使用machine模块的SPI类初始化SD卡,并使用sdcard模块的SDCard类将其与SPI接口连接起来。然后,我们使用mount模块的mount函数将SD卡挂载到文件系统的指定路径上(在这个例子中是"/sd")。接下来,我们在SD卡上创建一个文件并写入一些内容。最后,我们使用uos模块的umount函数卸载SD卡。

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

import uos
import network
import mount

# 连接到WiFi网络
wifi = network.WLAN(network.STA_IF)
wifi.active(True)
wifi.connect("my_wifi_network", "my_wifi_password")

# 等待WiFi连接成功
while not wifi.isconnected():
    pass

# 获取网络文件系统的IP地址
ip_address = wifi.ifconfig()[0]

# 挂载网络文件系统
uos.mount("smb://" + ip_address + "/shared_folder", "/mnt")

# 在网络文件系统上读取文件
with open("/mnt/data.txt", "r") as file:
    content = file.read()

# 打印文件内容
print(content)

# 卸载网络文件系统
uos.umount("/mnt")

在这个例子中,我们使用network模块的WLAN类连接到WiFi网络,并等待连接成功。然后,我们使用wifi.ifconfig()函数获取网络文件系统的IP地址。接下来,我们使用mount模块的mount函数将网络文件系统挂载到文件系统的指定路径上(在这个例子中是"/mnt")。然后,我们在网络文件系统上读取一个文件并打印出其内容。最后,我们使用uos模块的umount函数卸载网络文件系统。

案例六:挂载闪存芯片:

import machine
import uos
import flashbdev
import mount

# 初始化闪存芯片
flash = machine.SPI(0, baudrate=10000000, polarity=0, phase=0)
flash_cdev = flashbdev.FlashBdev(flash)

# 挂载闪存芯片
uos.mount(flash_cdev, "/flash")

# 在闪存芯片上创建文件
with open("/flash/data.txt", "w") as file:
    file.write("Hello, Flash chip!")

# 卸载闪存芯片
uos.umount("/flash")

在这个例子中,我们使用machine模块的SPI类初始化闪存芯片,并使用flashbdev模块的FlashBdev类将其与SPI接口连接起来。然后,我们使用mount模块的mount函数将闪存芯片挂载到文件系统的指定路径上(在这个例子中是"/flash")。接下来,我们在闪存芯片上创建一个文件并写入一些内容。最后,我们使用uos模块的umount函数卸载闪存芯片。

案例七:挂载外部Flash存储器

import uos

# 挂载外部Flash存储器到指定路径
uos.mount("SPIFLASH", "/flash")

在这个例子中,我们使用 uos.mount() 函数将外部 Flash 存储器挂载到指定的路径 “/flash”。这样,外部 Flash 存储器中的文件系统就可以在 MicroPython 设备上访问和操作了。

案例八:卸载已挂载的文件系统

import uos

# 卸载已挂载的文件系统
uos.umount("/sd")

在这个例子中,我们使用 uos.umount() 函数卸载指定路径下挂载的文件系统,如上例中的 “/sd”。这样,文件系统将从 MicroPython 设备中移除,无法再进行访问和操作。

这些案例展示了 uos 模块中的 mount 函数的实际应用,包括挂载 SD 卡、挂载外部 Flash 存储器以及卸载已挂载的文件系统。通过使用 mount 函数,你可以在 MicroPython 设备上方便地挂载和卸载外部存储设备的文件系统,从而实现对外部存储设备的读写操作。请注意,在使用 mount 函数时,请确保设备支持所需的存储设备类型,并根据实际需求进行适当的路径设置和操作。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_41659040/article/details/132787293