【雕爷学编程】MicroPython手册之 pyboard 特定端口库 pyb.rng()

在这里插入图片描述

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进入了微控制器领域,是一项重要的创新,既降低了编程门槛,又提供了良好的硬件控制能力。非常适合各类物联网和智能硬件的开发。

在这里插入图片描述

pyboard是一个紧凑而强大的电子开发板,运行MicroPython。它通过USB连接到您的PC,为您提供一个USB闪存驱动器来保存Python脚本,以及用于即时编程的串行Python提示符(REPL)。需要微型 USB 电缆。适用于 Windows、Mac 和 Linux。

MicroPython是对Python(版本3.4)编程语言的完全重写,因此它适合并在微控制器上运行。它包括许多优化,因此它可以高效运行并使用很少的 RAM。

MicroPython在pyboard上运行裸机,本质上是一个Python操作系统。内置 pyb 模块包含用于控制板上可用外设的函数和类,例如 UART、I2C、SPI、ADC 和 DAC。观看此视频,了解 pyboard 的概述。

在这里插入图片描述
pyb.rng()函数是一个用于生成随机数的函数,它利用电路板上的硬件随机数发生器(RNG)产生一个30位的无符号整数。该函数不需要任何参数,只需要在导入了pyb模块后调用它即可。如果成功,则返回一个0到1073741823之间的整数,如果失败,则引发OSError异常。

pyb.rng()函数的主要特点是:

它是一个用于生成随机数的函数,它利用电路板上的硬件随机数发生器(RNG)产生一个30位的无符号整数。
它不需要任何参数,只需要在导入了pyb模块后调用它即可。
它如果成功,则返回一个0到1073741823之间的整数,如果失败,则引发OSError异常。

pyb.rng()函数的应用场景有:

案例1:在需要生成随机数据或模拟随机事件的场合,可以通过pyb.rng()产生随机数,从而实现一些有趣或有用的功能。例如::

# main.py
import pyb
import time
leds = [pyb.LED(i) for i in range(1, 5)] # 创建四个LED对象
while True: # 无限循环
    n = pyb.rng() % 4 # 生成一个0到3之间的随机数
    leds[n].toggle() # 切换第n个LED的状态
    time.sleep(0.5) # 延时0.5秒

案例2:在需要加密或解密数据的场合,可以通过pyb.rng()产生随机数,从而实现一些简单或复杂的加密算法。例如::

# main.py
import pyb
import ustruct

def xor_encrypt(data, key): # 定义一个异或加密函数
    result = bytearray(len(data)) # 创建一个字节数组存储结果
    for i in range(len(data)): # 遍历数据中的每个字节
        result[i] = data[i] ^ key[i % len(key)] # 将数据和密钥按位异或,并存入结果中
    return result # 返回结果

def xor_decrypt(data, key): # 定义一个异或解密函数
    return xor_encrypt(data, key) # 异或加密和解密是对称的,直接调用加密函数即可

data = b'Hello MicroPython!' # 定义要加密的数据
key = ustruct.pack('I', pyb.rng()) # 生成一个32位的随机数,并打包成字节串作为密钥
encrypted = xor_encrypt(data, key) # 加密数据
print(encrypted) # 打印加密后的数据
decrypted = xor_decrypt(encrypted, key) # 解密数据
print(decrypted) # 打印解密后的数据

案例3:在需要生成随机密码或验证码的场合,可以通过pyb.rng()产生随机数,从而实现一些安全或方便的功:。例如:

# main.py
import pyb

def generate_password(length): # 定义一个生成密码的函数
    chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' # 定义密码中可能出现的字符集合
    password = '' # 创建一个空字符串存储密码
    for i in range(length): # 根据指定的长度循环生成字符
        n = pyb.rng() % len(chars) # 生成一个0到字符集合长度之间的随机数
        password += chars[n] # 将对应位置的字符添加到密码中
    return password # 返回密码

password = generate_password(8) # 生成一个8位的密码
print(password) # 打印密码

pyb.rng()函数的需注意事项有:

在使用pyb.rng()时,需要注意其返回值是一个30位的无符号整数,如果需要其他范围或类型的随机数,需要进行一些转换或处理。
在使用pyb.rng()时,需要注意其可能会受到电路板的硬件或软件状态的影响,因此可能不是完全随机或均匀分布的。
在使用pyb.rng()时,需要注意其可能会消耗一些电路板的资源或时间,因此需要合理地控制调用频率和次数。

案例4:随机数生成:

import pyb

# 生成一个随机数
random_number = pyb.rng()

在这个例子中,我们使用pyb.rng()函数生成一个随机数。这可以用于各种需要随机性的应用,例如密码生成、游戏中的随机事件等。

案例5:随机延迟::

import pyb

# 生成一个随机延迟时间
delay_time = pyb.rng() % 1000
pyb.delay(delay_time)

在这个例子中,我们使用pyb.rng()函数生成一个随机数,并将其用作延迟时间。这可以用于在程序中引入随机的延迟,增加一些变化和趣味性。

案例6:随机LED闪烁::

import pyb

# 随机选择一个LED灯进行闪烁
led_number = pyb.rng() % 4
led = pyb.LED(led_number)
led.toggle()

在这个例子中,我们使用pyb.rng()函数生成一个随机数,并将其用作选择LED灯的编号。然后我们通过toggle()函数来随机闪烁一个LED灯,给予一个有趣的效果。

案例7:生成随机数

import pyb

for i in range(10):
  print(pyb.rng()) # 打印10个0-65535之间的随机数

案例8:随机播放音乐

import pyb, os

files = os.listdir('/music')
rnd = pyb.rng() % len(files)
play_music(files[rnd]) # 随机播放音乐文件

案例9:生成随机密:

import pyb

chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
password = ''
for i in range(8):
  password += chars[pyb.rng() % len(chars)]

print(password) # 随机生成8字符密码

这些例子展示了如何用pyb.rng()生成各种随机数,用于随机抽样、加密、游戏等场景中。该函数利用硬件随机数生成器。

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

驴友花雕

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

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

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

打赏作者

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

抵扣说明:

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

余额充值