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是一个用于提供基本的“操作系统”服务的模块,它可以用来访问和操作文件系统,终端,内存,重置和唤醒等功能。它的主要特点是:
1、它可以使用chdir(), getcwd(), ilistdir(), listdir(), mkdir(), remove(), rmdir(), rename(), stat(), statvfs()等方法来进行文件系统的访问和操作。
2、它可以使用dupterm()方法来在类似流的对象上复制或切换MicroPython终端(REPL)。
3、它可以使用mount()和umount()方法来在虚拟文件系统中挂载或卸载不同类型的文件系统,如FAT, littlefs等。
4、它可以使用reset(), soft_reset(), bootloader(), reset_cause(), wake_reason()等方法来重置或唤醒设备,或获取重置或唤醒的原因。
5、它可以使用uname()和urandom()方法来获取有关底层机器和操作系统的信息,或生成随机字节。
6、它可以使用disable_irq(), enable_irq()等方法来禁用或启用中断请求。
7、它可以使用freq(), idle(), sleep(), lightsleep(), deepsleep()等方法来调节或查询CPU的频率,或使设备进入低功耗模式。
8、它可以使用mem8, mem16, mem32等对象来读写内存中的字节。
os模块的应用场景有:
1、用于管理和优化设备的资源和性能,例如内存,电源,中断等。
2、用于实现一些特定的功能或效果,例如闪烁灯光,播放音乐,显示图形,读写SD卡等。
3、用于学习或教授一些硬件相关的知识或技能,例如数字电路,模拟电路,信号处理,嵌入式系统等。
os模块的注意事项有:
1、os模块实现了相应CPython模块的一个子集1,并在少数情况下提供了一些特定于MicroPython的扩展234,因此不能完全兼容CPython的功能和性能。
2、os模块依赖于特定板子上的硬件特性和资源1234,不同的MicroPython板子可能有不同的可用功能和参数范围1234,需要查看具体的文档来确定支持的功能和使用方法。
3、os模块提供了对硬件的直接和不受限制的访问和控制,使用不当可能会导致设备故障,锁定,崩溃,在极端情况下还可能导致硬件损坏。使用时需要谨慎并遵循相关的规范和指南。
案例一:使用os.uname()方法获取设备信息
# 导入os模块 import os # 调用os.uname()方法,并返回一个命名元组 info = os.uname() # 打印元组中的各个字段 print('sysname:', info.sysname) # 底层系统名称 print('nodename:', info.nodename) # 网络名称 print('release:', info.release) # 底层系统版本 print('version:', info.version) # MicroPython版本和构建日期 print('machine:', info.machine) # 底层硬件标识符
案例二:使用os.listdir()方法列出当前目录下的文件
# 导入os模块 import os # 调用os.listdir()方法,并返回一个列表 files = os.listdir() # 遍历列表中的每个元素 for f in files: # 打印文件名 print(f)
案例三:使用os.mount()方法挂载FAT文件系统
# 导入os模块 import os # 导入pyb模块,用于访问板载SD卡 import pyb # 创建一个SD卡对象,连接到SPI总线 sd = pyb.SDCard() # 调用os.mount()方法,将SD卡对象挂载到'/sd'目录下,并指定为只读模式 os.mount(sd, '/sd', readonly=True) # 打印当前的文件系统配置信息 print(os.listdir('/'))