【雕爷学编程】MicroPython手册之内置模块 uname

在这里插入图片描述

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的内置模块uname是一个用于获取系统信息的模块,它实现了CPython模块的一个子集,但也有一些特殊的特点和限制。本文将从以下几个方面介绍uname模块的主要特点、应用场景,以及需注意事项,并给出几个实际运用程序案例。

主要特点

1、uname模块提供了一个uname函数,用于返回一个元组(可能是一个命名元组),包含有关底层机器和/或其操作系统的信息。该元组有五个字段,按以下顺序排列,每个字段都是一个字符串:
sysname – 底层系统的名称
nodename – 网络名称(可以与sysname相同)
release – 底层系统的版本
version – MicroPython版本和构建日期
machine – 底层硬件的标识符(例如板、CPU)
2、uname模块使用的系统信息语法是CPython os模块的一个子集,也是POSIX标准系统信息的一个子集。支持的函数和方法有:uname。不支持的有:getloadavg、getlogin、getpid、getppid等。

应用场景

1、uname模块可以用于获取和显示系统信息,例如在启动或调试时打印系统名称、版本、硬件等。
2、uname模块可以用于根据不同的系统信息进行条件判断或分支选择,例如根据不同的硬件或操作系统执行不同的代码或功能。
3、uname模块可以用于与其他模块或函数配合使用,例如根据系统信息生成随机数或哈希值等。

需注意事项

1、uname模块的功能和性能可能因不同的端口而异,因此在开发可移植的MicroPython应用程序时,应该尽量避免依赖特定的系统信息语法或结果。
2、uname模块在编译和执行系统信息操作时可能会消耗较少的内存和时间,因此在处理简单或常规的系统信息时,不需要特别优化代码和资源管理。
3、uname模块在编译和执行系统信息操作时不太可能遇到异常情况,因为系统信息通常是固定或稳定的。如果遇到OSError或ValueError异常,并给出错误信息,应该使用try-except语句来捕获并处理这些异常。

实际运用程序案例

案例一:使用uname模块打印系统信息

import uname

# 使用uname函数获取系统信息
info = uname.uname()

# 打印各个字段的值
print('系统名称:', info.sysname)
print('网络名称:', info.nodename)
print('系统版本:', info.release)
print('MicroPython版本:', info.version)
print('硬件标识符:', info.machine)

案例二:使用uname模块根据不同的硬件执行不同的代码

import machine
import uname

# 使用uname函数获取硬件标识符
machine_id = uname.uname().machine

# 根据不同的硬件标识符执行不同的代码
if machine_id == 'ESP32 module with ESP32':
    # 如果是ESP32芯片,则创建一个LED对象,连接到引脚2,并闪烁它
    led = machine.Pin(2, machine.Pin.OUT)
    while True:
        led.value(not led.value())
        time.sleep(0.5)
elif machine_id == 'PYBv1.1 with STM32F405RG':
    # 如果是PyBoard板,则创建一个LED对象,连接到引脚X1,并闪烁它
    led = machine.Pin('X1', machine.Pin.OUT)
    while True:
        led.value(not led.value())
        time.sleep(0.5)
else:
    # 否则,打印不支持的硬件信息
    print('Unsupported hardware:', machine_id)

案例三:使用uname模块与uhashlib模块配合使用,根据系统信息生成哈希值

import uhashlib
import ubinascii
import uname

# 使用uname函数获取系统信息
info = uname.uname()

# 将系统信息的各个字段连接成一个字符串
data = info.sysname + info.nodename + info.release + info.version + info.machine

# 使用uhashlib模块计算字符串的SHA256哈希值,并转换为十六进制格式
hasher = uhashlib.sha256(data.encode())
hash_value = ubinascii.hexlify(hasher.digest()).decode()

# 打印哈希值
print('Hash value:', hash_value)

案例四:获取系统版本信息:

import uname

# 获取系统版本信息
version = uname.version()
print("System Version:", version)

在这个示例中,我们使用uname模块的version()函数获取系统的版本信息,并将其打印出来。这可以帮助我们了解当前运行的系统版本。

案例五:获取硬件平台信息:

import uname

# 获取硬件平台信息
platform = uname.platform()
print("Hardware Platform:", platform)

在这个示例中,我们使用uname模块的platform()函数获取硬件平台的信息,并将其打印出来。这可以帮助我们确定当前运行的硬件平台类型。

案例六:获取系统节点名称:

import uname

# 获取系统节点名称
node = uname.node()
print("System Node Name:", node)

在这个示例中,我们使用uname模块的node()函数获取系统的节点名称,并将其打印出来。节点名称通常用于标识网络上的设备,可以帮助我们在网络环境中唯一标识设备。这些实际运用程序案例展示了使用MicroPython内置模块uname获取系统和硬件信息的功能。通过使用uname模块,我们可以获取系统版本信息、硬件平台信息以及系统节点名称等信息。这些信息对于识别和调试特定硬件和系统环境非常有用。

案例七:显示设备的系统信息

import uname

# 获取系统信息
sys_info = uname.uname()

# 打印系统信息
print("操作系统:", sys_info.sysname)
print("版本号:", sys_info.release)
print("硬件平台:", sys_info.machine)

这个例子展示了如何使用 uname.uname() 函数来获取设备的系统信息。通过调用该函数,我们可以获得一个 sys_info 对象,其中包含了操作系统的名称、版本号和硬件平台信息。然后,我们可以打印这些信息,用于显示设备的系统信息。

案例八: 根据硬件平台选择不同的代码路径

import uname

# 获取硬件平台信息
hardware = uname.uname().machine

if hardware == "esp32":
    # ESP32 硬件平台特定的代码路径
    import esp32
    # 执行 ESP32 相关的操作
    esp32.foo()
elif hardware == "pyboard":
    # Pyboard 硬件平台特定的代码路径
    import pyb
    # 执行 Pyboard 相关的操作
    pyb.bar()
else:
    # 默认代码路径
    # 执行通用操作
    baz()

在这个例子中,我们使用 uname.uname().machine 获取设备的硬件平台信息,并将其存储在 hardware 变量中。然后,我们可以根据硬件平台的不同选择不同的代码路径。在示例中,我们根据硬件平台是 ESP32 还是 Pyboard,导入相应的硬件模块(esp32 或 pyb),并执行特定于该硬件平台的操作。如果硬件平台不是已知的平台,我们可以执行通用的操作。

案例九:动态调整程序行为以适应不同的操作系统

import uname

# 获取操作系统名称
os_name = uname.uname().sysname

if os_name == "linux":
    # Linux 操作系统下的特定代码路径
    # 执行 Linux 相关的操作
    linux_func()
elif os_name == "micropython":
    # MicroPython 操作系统下的特定代码路径
    # 执行 MicroPython 相关的操作
    micropython_func()
else:
    # 其他操作系统下的默认代码路径
    # 执行默认操作
    default_func()

在这个例子中,我们使用 uname.uname().sysname 获取设备的操作系统名称,并将其存储在 os_name 变量中。然后,我们根据操作系统的不同选择不同的代码路径。在示例中,我们根据操作系统是 Linux 还是 MicroPython,执行相应的操作。如果操作系统不是已知的操作系统,我们可以执行默认的操作。

这些案例展示了 uname 模块的实际应用,包括显示设备的系统信息、根据硬件平台选择不同的代码路径以及动态调整程序行为以适应不同的操作系统。通过使用 uname 模块,你可以根据设备的系统和硬件信息来编写更具适应性和可移植性的代码。请注意,在使用 uname 模块时,需要根据具体的应用场景和需求进行适当的调整和处理。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值