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的内置模块stat提供了一些用于处理文件状态的常量和函数。它的主要特点、应用场景,以及需注意事项如下:
主要特点:stat模块定义了一些常量,如stat.S_IFDIR, stat.S_IFREG等,用于表示文件的类型。stat模块还定义了一些函数,如stat.stat(path), stat.fstat(fd)等,用于获取文件的状态信息。文件的状态信息是一个元组,包含了文件的大小,修改时间,权限等属性。stat模块还提供了一些辅助函数,如stat.S_ISDIR(mode), stat.S_ISREG(mode)等,用于判断文件的类型。
应用场景:stat模块可以用于在文件系统中获取和处理文件的状态信息。例如,可以用stat模块判断一个路径是一个目录还是一个文件,或者获取一个文件的大小或修改时间等。
需注意事项:在使用stat模块之前,需要导入该模块,使用import stat语句。在使用stat模块的函数之前,需要确保文件或路径是存在的。否则,会抛出一个异常。另外,stat模块在不同的平台上可能有不同的实现和支持。因此,在使用stat模块时,最好先检查平台的特性和限制1。
以下是MicroPython的内置模块stat的几个实际运用程序案例:
案例一:在MicroPython板子上获取一个名为’test.txt’的文件的大小和修改时间。代码如下:
import os import stat import time # 定义要获取状态信息的文件路径 path = 'test.txt' # 获取文件的状态信息 st = os.stat(path) # 获取文件的大小(字节) size = st[6] # 获取文件的修改时间(秒) mtime = st[8] # 格式化修改时间为字符串 mtime_str = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(mtime)) # 打印文件的大小和修改时间 print('The size of', path, 'is', size, 'bytes') print('The last modified time of', path, 'is', mtime_str)
案例二:在MicroPython板子上判断一个名为’temp’的路径是一个目录还是一个文件。代码如下:
import os import stat # 定义要判断类型的路径 path = 'temp' # 获取路径的状态信息 st = os.stat(path) # 获取路径的类型(mode) mode = st[0] # 判断路径是否是一个目录 if stat.S_ISDIR(mode): print(path, 'is a directory') # 判断路径是否是一个文件 elif stat.S_ISREG(mode): print(path, 'is a file') # 其他情况 else: print(path, 'is neither a directory nor a file')
案例三:在MicroPython板子上修改一个名为’image.jpg’的文件的权限,使其只能被所有者读写。代码如下:
import os import stat # 定义要修改权限的文件路径 path = 'image.jpg' # 获取文件的状态信息 st = os.stat(path) # 获取文件的当前权限(mode) mode = st[0] # 计算新的权限(只保留所有者读写位) new_mode = mode & (stat.S_IRUSR | stat.S_IWUSR) # 修改文件的权限 os.chmod(path, new_mode) # 打印修改后的权限 print('The new mode of', path, 'is', oct(new_mode))
案例四:获取文件信息:
import os import stat # 定义文件路径 file_path = "/home/pi/documents/file.txt" # 获取文件信息 file_stat = os.stat(file_path) # 打印文件信息 print("文件大小:", file_stat.st_size, "字节") print("最后修改时间:", file_stat.st_mtime) print("最后访问时间:", file_stat.st_atime) print("文件权限:", stat.filemode(file_stat.st_mode))
在这个例子中,我们使用os模块的stat函数获取指定文件的信息。我们定义了文件路径,然后使用os.stat函数获取文件的stat对象。通过访问stat对象的属性,我们可以获取文件的大小(以字节为单位)、最后修改时间、最后访问时间以及文件权限。我们使用stat.filemode函数将权限值转换为可读形式,并打印出文件信息。
案例五:检查文件是否为目录:
import os # 定义路径 path = "/home/pi/documents" # 检查路径是否为目录 if os.path.isdir(path): print("该路径是一个目录") else: print("该路径不是一个目录")
在这个例子中,我们使用os模块的isdir函数检查指定路径是否为目录。我们定义了路径,然后使用os.path.isdir函数检查该路径。如果路径是一个目录,我们打印出"该路径是一个目录"的消息。如果路径不是一个目录,我们打印出"该路径不是一个目录"的消息。
案例六:检查文件是否为普通文件:
import os # 定义路径 path = "/home/pi/documents/file.txt" # 检查路径是否为普通文件 if os.path.isfile(path): print("该路径是一个普通文件") else: print("该路径不是一个普通文件")
在这个例子中,我们使用os模块的isfile函数检查指定路径是否为普通文件。我们定义了路径,然后使用os.path.isfile函数检查该路径。如果路径是一个普通文件,我们打印出"该路径是一个普通文件"的消息。如果路径不是一个普通文件,我们打印出"该路径不是一个普通文件"的消息。
案例七:获取文件的大小、创建时间和修改时间
import uos # 获取文件 "data.txt" 的状态信息 file_stat = uos.stat("data.txt") # 提取文件大小 file_size = file_stat[6] print("文件大小:", file_size, "字节") # 提取文件的创建时间和修改时间 create_time = file_stat[8] modify_time = file_stat[9] print("创建时间:", create_time) print("修改时间:", modify_time)
这个例子使用 uos.stat() 函数获取文件 “data.txt” 的状态信息,并从返回的元组中提取文件的大小、创建时间和修改时间。
案例八: 检查文件是否为目录
import uos # 检查文件 "data" 是否为目录 file_stat = uos.stat("data") is_directory = file_stat[0] & 0x4000 # 目录的标志位为 0x4000 if is_directory: print("文件是一个目录") else: print("文件不是一个目录")
在这个例子中,我们使用 uos.stat() 函数获取文件 “data” 的状态信息,并通过检查返回的标志位来确定该文件是否为目录。
案例九:获取文件的访问权限
import uos # 获取文件 "script.py" 的访问权限 file_stat = uos.stat("script.py") access_permissions = file_stat[0] & 0o777 # 通过掩码提取访问权限 print("访问权限:", oct(access_permissions))
在这个例子中,我们使用 uos.stat() 函数获取文件 “script.py” 的状态信息,并通过掩码方式提取文件的访问权限。返回的访问权限是一个八进制数值,可以使用 oct() 函数将其转换为八进制表示。
这些案例展示了 uos.stat() 函数的实际应用,包括获取文件的大小、创建时间和修改时间、检查文件是否为目录以及获取文件的访问权限。通过使用 stat 函数,你可以在 MicroPython 设备上方便地获取文件的状态信息,并根据需要进行进一步的处理和判断。请注意,在使用 stat 函数时,请确保有足够的权限和合理的路径设置,并根据实际需求进行适当的调整和处理。