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()生成各种随机数,用于随机抽样、加密、游戏等场景中。该函数利用硬件随机数生成器。