移远QuecPython(基于EC600s)开发物联网应用(五) micropython标准库

一. uos - 基本系统服务

导入模块

import uos

1. 获取当前路径

uos.getcwd()

2. 列出目录文件

uos.listdir( [dir] )

没有参数列出当前目录文件,否则列出给定目录的文件。dir为可选参数,表示目录名,默认为 ‘/’ 目录。

3. 改变当前目录

uos.chdir(path)

4. 创建一个新的目录/文件

uos.mkdir(path)

创建一个新的目录。path表示准备创建的目录名。

5. 重命名目录/文件

uos.rename(old_path, new_path)

重命名文件。old_path表示旧文件或目录名,new_path表示新文件或目录名。

6. 删除指定目录

uos.rmdir(path)

7. 删除文件

uos.remove(path)

8. 文件/目录 三元组(或四元组)迭代器

uos.ilistdir( [dir] )

dir为可选参数,表示目录名,没有参数时,默认列出当前目录,有参数时,则列出dir参数指定的目录。
该函数返回一个迭代器,该迭代器会生成所列出条目对应的三元组(或者四元组,对EC600S来说是四元组)。

三元组(或四元组)结构(name, type, inode[, size]):

  • name 是条目的名称,字符串类型,如果dir是字节对象,则名称为字节;
  • type 是条目的类型,整型数,0x4000表示目录,0x8000表示常规文件;
  • 是一个与文件的索引节点相对应的整数,对于没有这种概念的文件系统来说,可能为0;
  • 一些平台可能会返回一个4元组,其中包含条目的size。对于文件条目,size表示文件大小的整数,如果未知,则为-1。对于目录项,其含义目前尚未定义。

例如:

import uos

print(uos.getcwd())

for item in uos.ilistdir():
  print(item)

9. 获取文件或目录的状态

uos.stat(path)

获取文件或目录的状态。path表示文件或目录名。返回值是一个元组,返回值形式为:

(mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime)

mode – inode保护模式
ino – inode节点号
dev – inode驻留的设备
nlink – inode的链接数
uid – 所有者的用户ID
gid – 所有者的组ID
size – 文件大小,单位字节
atime – 上次访问的时间
mtime – 最后一次修改的时间
ctime – 操作系统报告的“ctime”,在某些系统上是最新的元数据更改的时间,在其它系统上是创建时间,详细信息参见平台文档

这个我在EC600S上打印的数据不对, 没深究

10. 获取文件系统状态信息

uos.statvfs(path)

path表示文件或目录名。返回一个包含文件系统信息的元组

(f_bsize, f_frsize, f_blocks, f_bfree, f_bavail, f_files, f_ffree, f_favail, f_flag, f_namemax)

f_bsize – 文件系统块大小,单位字节
f_frsize – 分栈大小,单位字节
f_blocks – 文件系统数据块总数
f_bfree – 可用块数
f_bavai – 非超级用户可获取的块数
f_files – 文件结点总数
f_ffree – 可用文件结点数
f_favail – 超级用户的可用文件结点数
f_flag – 挂载标记
f_namemax – 最大文件长度,单位字节

11. 获取关于底层信息或其操作系统的信息

uos.uname()

获取关于底层信息或其操作系统的信息。返回一个元组,形式为:
(sysname, nodename, release, version, machine)

  • sysname – 底层系统的名称,string类型
  • nodename – 网络名称(可以与 sysname 相同) ,string类型
  • release – 底层系统的版本,string类型
  • version – MicroPython版本和构建日期,string类型
  • machine – 底层硬件(如主板、CPU)的标识符,string类型

12. 随机bytes

返回具有n个随机字节的bytes对象,只要有可能,它就会由硬件随机数生成器生成。

uos.urandom(n)

我不知道这是干啥用的

二. ubinascii 进制与转换模块

导入模块

import ubinascii

1. 编码base64数据

ubinascii.b2a_base64(data)

以base64格式编码二进制数据,返回编码数据。后面跟换行符,作为 bytes 对象。

2. 解码base64编码的数据

ubinascii.a2b_base64(data)

解码base64编码的数据,会自动忽略输入中的无效字符,返回 bytes 对象。

3. 将二进制数据转换为十六进制字符串表示

ubinascii.hexlify(data, [sep])

指定了第二个参数sep,它将用于分隔两个十六进制数

4. 将十六进制形式的字符串转换成二进制形式的字符串表示

ubinascii.unhexlify(data)

三. random 随机模块

导入模块

import urandom

1. 随机0 到 1 之间的浮点数

urandom.random()

2. 随机生成一个 start 到 end 之间的整数

urandom.randint(start, end)

3. 随机生成 start 到 end 间并且递增为 step 的正整数

urandom.randrange(start, end, step)
#例如: 取1~100间的偶数
urandom.randrange(0, 100, 2)

4. 随机生成 start 到 end 范围内的浮点数

urandom.uniform(start, end)

5. 随机取数

urandom.choice(obj)

随机取 obj 中的元素, obj是一个容器

6. 随机产生一个在n bits范围内的数。

urandom.getrandbits(n)
#例如:
urandom.getrandbits(8)  #取8位二进制位范围内的数 (返回结构默认十进制)

7. 随机数种子

urandom模块使用Mersenne Twister算法来计算生成随机数。这是一个确定性算法,可以通过random.seed()函数修改初始化种子.

简单来说,用了随机数种子后, 同一段代码每次随机都是确定的随机值

import urandom
urandom.seed(20)
for i in range(3):
    print(urandom.random())

四. math 数学运算

导入模块

import math
常亮 说明
math.e 数学常量 e
math.pi 圆周率
方法 说明
math.ceil(x) 向上取整
math.floor(x) 向下取整
math.trunc(x) 返回x的整数部分
math.fmod(x, y) 返回x/y的余数,返回值为浮点数
math.modf(x) 返回由x的小数部分和整数部分组成的元组。
math.fabs(x) 绝对值
math.isfinite(x) 判断 x 是否为有限数,是则返回True,否则返回False。
math.isinf(x) 判断x是否是正无穷大或负无穷大,则返回True,否则返回False。
math.isnan(x) x是不是数字,返回True,否则返回False。
math.sqrt(x) 返回数字x的平方根,返回值为浮点数
math.pow(x, y) 返回x的y次方,返回值是浮点数。
math.degrees(x) 将弧度转换为角度,返回值为浮点数
math.radians(x) 将角度转换为弧度,返回值为浮点数
math.sin(x) 返回x弧度的正弦值,数值在 -1 到 1 之间
math.cos(x) 返回x弧度的余弦值,数值在 -1 到 1 之间
math.tan(x) 返回 x 弧度的正切值,数值在 -1 到 1 之间,为浮点数
math.asin(x) 返回x的反正弦弧度值,返回值为浮点数。x是-1~1之间的数,包括-1和1
math.acos(x) 返回x的反余弦弧度值,返回值为浮点数。x是-1~1之间的数,包括-1和1
math.atan(x) 返回x的反正切弧度值,返回值为浮点数
math.atan2(x, y) 返回给定的 X 及 Y 坐标值的反正切值,返回值为浮点数
math.log(x) 返回x的自然对数,x > 0,小于0会报错
math.copysign(x, y) 把y的正负号加到x前面,可以使用0,返回值为浮点数。
math.ldexp(x, exp) math.ldexp()方法返回给定数字x和i的x * (2 ** i),这是math.frexp()的反函数

五. ujson - JSON编码和解码

ujson 模块实现在Python数据对象和JSON数据格式之间进行转换的功能。

import ujson

1. ujson.dump(obj, stream)

将 obj 数据对象转化成 JSON字符串,将其写入到给定的 stream 中

2. ujson.dumps(dict)

将 dict 类型的数据转换成JSON字符串

3. ujson.load(stream)

解析给定的数据 stream,将其解释为JSON字符串并反序列化成Python对象。

4. ujson.loads(str)

解析JSON字符串并返回obj对象

六. utime - 与时间相关功能

utime 模块用于获取当前时间和日期、测量时间间隔和延迟。

import utime

1. utime.localtime([secs]) 时间戳转时间元组

该函数用来将一个以秒表示的时间转换为一个元组,元组包含了了年、月、日、时、分、秒、星期、一年中第几天;如果没有给定参数sec,则使用RTC时间。返回值形式如下:

(year, month, mday, hour, minute, second, weekday, yearday)

  • year :年份,int型
  • month :月份,1~12,int型
  • mday :日,当月多少号,1~31,int型
  • hour :小时,0~23,int型
  • minute :分钟,0~59,int型
  • second :秒,0~59,int型
  • weekday :星期,周一到周日是0~6,int型
  • yearday :一年中的第多少天,int型

2. utime.mktime(datetime) 时间元组转时间戳

该函数作用与locatime()相反,它将一个存放在元组中的时间转换为以秒计的时间戳

3. utime.sleep(seconds) /utime.sleep_us(us) 休眠给定的时间

注意:sleep()函数的调用会导致程序休眠阻塞。

4. utime.time()

返回自纪元以来的秒数(以整数形式)。如果未设置RTC,则此函数返回自特定于端口的参考时间点以来的秒数(对于不具有电池后备RTC的嵌入式板,通常是由于加电或复位)。如果要开发可移植的MicroPython应用程序,则不应依赖此功能提供高于秒的精度。如果需要更高的精度,请使用 ticks_ms()和ticks_us()函数,如果需要日历时间,则 localtime()不带参数会更好。

4. utime.ticks_ms() / utime.ticks_us()

返回不断递增的毫秒/微秒计数器,在某些值后会重新计数(未指定)。计数值本身无特定意义,只适合用在 ticks_diff()函数中。

5 . utime.ticks_cpu()

和 ticks_ms/ticks_us 类似,具有更高精度 (使用 CPU 时钟)。

6. utime.ticks_diff(ticks1, ticks2)

计算两次调用 ticks_ms(), ticks_us(),或 ticks_cpu()之间的时间。因为这些函数的计数值可能会回绕,所以不能直接相减,需要使用 ticks_diff() 函数。“旧” 时间需要在 “新” 时间之前,否则结果无法确定。这个函数不要用在计算很长的时间 (因为 ticks_*() 函数会回绕,通常周期不是很长)。通常用法是在带超时的轮询事件中调用。

七. sys 模块

sys 模块中提供了与QuecPython运行环境有关的函数和变量

import sys
参数 说明
sys.implementation 当前microPython版本信息
sys.byteorder 字节顺序 (‘little’ - 小端, ‘big’ - 大端)
sys.maxsize 本机整数类型可以在当前平台上保留的最大值,如果它小于平台最大值,则为MicroPython整数类型表示的最大值
sys.argv 当前程序启动的可变参数列表。
sys.modules 已载入模块的字典
sys.platform MicroPython运行的平台
sys.version MicroPython 语言版本,字符串格式。
sys.version_info MicroPython 语言版本,整数元组格式。
sys.stdin 标准输入(默认是USB虚拟串口,可选其他串口)
sys.stdout 标准输出(默认是USB虚拟串口,可选其他串口)
方法 说明
sys.exit(retval=0) 使用给定的参数退出当前程序。与此同时,该函数会引发SystemExit退出。如果给定了参数,则将其值作为参数赋值给SystemExit
sys.print_exception(exc, file=sys.stdout) 打印异常到文件对象,默认是 sys.stdout,即输出异常信息的标准输出。

八. uhashlib - 哈希算法

实现二进制数据散列算法,目前支持sha256,sha1,MD5。

import uhashlib

1. 创建哈希对象

hash_obj = uhashlib.sha256(bytes)
hash_obj = uhashlib.sha1(bytes)
hash_obj = uhashlib.md5(bytes)

2. 更多的bytes数据加到散列

hash_obj .update(bytes)

3. 返回加密后字节类型的数据

返回通过哈希传递的所有数据的散列,数据为字节类型。调用此方法后,无法再将更多的数据送入散列

hash_obj .digest()
import uhashlib
import ubinascii

hash_obj  = uhashlib.sha256()  # 创建hash对象
hash_obj.update(b"QuecPython")
res = hash_obj.digest()
# b"\x1e\xc6gq\xb3\xa9\xac>\xa4\xc4O\x00\x9eTW\x97\xd4.\x9e}Bo\xff\x82u\x89Th\xfe'\xc6\xcd"
# 转成十六进制表示
hex_msg = ubinascii.hexlify(res)
# b'1ec66771b3a9ac3ea4c44f009e545797d42e9e7d426fff8275895468fe27c6cd'

九. _thread - 多线程

_thread 模块提供创建新线程的方法,并提供互斥锁, 关于他的用法, 后续会有专门的介绍

你可能感兴趣的:(移远QuecPython(基于EC600s)开发物联网应用(五) micropython标准库)