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的内置模块sys是一个用于提供系统特定的变量和函数的模块,它可以用来访问和操作与解释器相关的信息和功能。它的主要特点是:
它可以使用exit()方法终止当前程序,并指定一个退出码。
它可以使用atexit()方法注册一个在程序终止时调用的函数。
它可以使用print_exception()方法打印异常和回溯信息到一个类似文件的对象。
它可以使用settrace()方法启用字节码执行的跟踪。
它可以使用argv变量获取当前程序启动时的参数列表。
它可以使用byteorder变量获取系统的字节顺序(“little"或"big”)。
它可以使用implementation变量获取有关当前Python实现的信息,如名称,版本,机器等。
它可以使用maxsize变量获取本机整数类型或MicroPython整数类型能够表示的最大值。
它可以使用modules变量获取已加载模块的字典。
它可以使用path变量获取用于搜索导入模块的可变目录列表。
它可以使用platform变量获取MicroPython运行的平台,如操作系统或板子的标识符。
它可以使用stderr, stdin, stdout变量获取标准错误,输入,输出流对象。
它可以使用version变量获取此实现符合的Python语言版本,作为字符串。
它可以使用version_info变量获取此实现符合的Python语言版本,作为整数元组。
sys模块的应用场景有:
1、用于管理和优化程序的运行和性能,例如终止程序,注册终止函数,打印异常信息等。
2、用于实现一些特定的功能或效果,例如跟踪字节码执行,处理命令行参数,切换标准流等。
3、用于学习或教授一些系统相关的知识或技能,例如字节序,实现信息,平台区分等。
sys模块的注意事项有:
1、sys模块实现了CPython模块的一个子集,并且在一些情况下提供了一些特定于MicroPython的扩展,因此不能完全兼容CPython的功能和性能。
2、sys模块依赖于特定板子上的硬件特性和资源,不同的MicroPython板子可能有不同的可用功能和参数范围,需要查看具体的文档来确定支持的功能和使用方法。
3、sys模块提供了对解释器相关的变量和函数的访问和控制,使用不当可能会导致程序错误,崩溃或无法运行。使用时需要谨慎并遵循相关的规范和指南。
以下是MicroPython的内置模块sys几个实际运用程序案例:
案例一:使用sys.exit()方法终止程序
# 导入sys模块
import sys
# 打印一条消息
print('This is a test program.')
# 调用sys.exit()方法,并指定退出码为1
sys.exit(1)
# 这条语句不会执行
print('This will not be printed.')
案例二:使用sys.argv变量处理命令行参数
# 导入sys模块
import sys
# 打印参数个数
print('Number of arguments:', len(sys.argv))
# 打印参数列表
print('Arguments:', sys.argv)
# 遍历每个参数
for i, arg in enumerate(sys.argv):
# 打印参数索引和值
print('Argument', i, ':', arg)
案例三:使用sys.platform变量区分不同的平台
# 导入sys模块
import sys
# 获取平台标识符
platform = sys.platform
# 根据不同的平台执行不同的操作
if platform == 'linux':
# 如果是Linux系统,打印一条消息
print('Running on Linux.')
elif platform == 'pyboard':
# 如果是Pyboard板子,导入pyb模块并闪烁LED
import pyb
led = pyb.LED(1)
led.toggle()
else:
# 如果是其他平台,抛出一个异常
raise Exception('Unknown platform.')
案例四:获取命令行参数:
import sys
# 获取命令行参数列表
args = sys.argv
# 打印命令行参数
print("Command line arguments:", args)
在这个示例中,我们使用sys模块获取命令行参数。sys.argv是一个包含命令行参数的列表,其中第一个元素是脚本名称,后续元素是传递给脚本的参数。我们可以使用sys.argv来访问和处理命令行参数。在这里,我们打印出命令行参数列表。
案例五:强制退出程序:
import sys
# 模拟程序发生错误
error_occurred = True
# 如果发生错误,退出程序
if error_occurred:
print("An error occurred. Exiting...")
sys.exit(1)
# 程序正常执行的代码
print("Program continues...")
在这个示例中,我们使用sys模块的exit()函数来强制退出程序。在这里,我们模拟程序发生错误的情况。如果error_occurred变量为True,则打印错误消息并调用sys.exit(1)来退出程序。退出函数的参数可以指定退出状态码,通常非零状态码表示程序异常退出。如果没有发生错误,程序将继续执行后续代码。
案例六:获取Python解释器的版本信息:
import sys
# 获取Python解释器的版本信息
version_info = sys.version_info
print("Python version:", sys.version)
print("Python version info:", version_info)
在这个示例中,我们使用sys模块获取Python解释器的版本信息。sys.version返回一个字符串,表示Python解释器的版本号。sys.version_info是一个命名元组,包含了Python解释器的版本信息的详细分量。在这里,我们打印出Python解释器的版本号和版本信息。这些实际运用程序案例展示了使用MicroPython内置模块sys的功能。通过使用sys模块,可以获取命令行参数,强制退出程序,以及获取Python解释器的版本信息等。这些功能在处理命令行输入、错误处理和版本控制等场景中非常有用。
案例七:获取命令行参数
import sys
# 获取命令行参数
args = sys.argv
# 打印命令行参数
print("命令行参数:", args)
在这个例子中,我们使用 sys.argv 来获取命令行参数。sys.argv 是一个包含命令行参数的列表,其中第一个元素是脚本的名称,后续元素是传递给脚本的参数。我们将命令行参数打印出来。
案例八:终止程序的执行
import sys
# 发生错误时终止程序
def error_func():
print("发生错误,程序终止")
sys.exit(1)
# 调用错误函数
error_func()
# 程序继续执行,但不会执行到这里
print("这行代码不会被执行")
在这个例子中,我们使用 sys.exit() 函数终止程序的执行。在 error_func() 函数中,我们打印一个错误消息,并调用 sys.exit(1) 来终止程序的执行,并指定退出码为 1。当 sys.exit() 被调用时,程序将立即停止执行,并返回到操作系统。
案例九:获取解释器的版本信息
import sys
# 获取解释器的版本信息
version_info = sys.implementation.version
# 打印解释器的版本信息
print("解释器版本:", version_info)
在这个例子中,我们使用 sys.implementation.version 获取解释器的版本信息。version_info 是一个包含主要版本号、次要版本号和微版本号的元组。我们将解释器的版本信息打印出来。
这些示例展示了 sys 模块在 MicroPython 中的实际应用。你可以根据自己的需求进行修改和扩展。