MicroPython 特定的库 (MicroPython-specific) - machine
以下库中提供了特定于 MicroPython 实现的功能。
- bluetooth — 低级蓝牙
- btree – 简单的 BTree 数据库
- cryptolib——加密密码
- framebuf — 帧缓冲区操作
- machine — 与硬件相关的函数
- micropython – 访问和控制 MicroPython 内部
- neopixel — WS2812 / NeoPixel LED 的控制
- network — 网络配置
- ntptime — 时间同步
- uctypes——以结构化方式访问二进制数据
machine - 与硬件相关的功能
该 machine 模块包含与特定电路板上的硬件相关的特定功能。该模块中的大多数功能允许直接和不受限制地访问和控制系统上的硬件块(如CPU,定时器,总线等)。 使用不当,可能导致故障,锁定,电路板崩溃,以及在极端情况下硬件损坏。
以下是与硬件相关的类:
- Pin – 控制 I/O 引脚
- ADC – 模数转换
- TouchPad – 触摸
- PWM – 脉冲宽度调制
- UART – 双工串行通信总线
- I2C – 双线串行协议
- SPI – 串行外设接口总线协议 (主端)
- Timer – 控制硬件定时器
- RTC – 实时时钟
- WDT – 看门狗定时器
Pin – 控制 I/O 引脚
引脚对象用于控制 I / O 引脚(也称为GPIO - 通用输入/输出)。引脚对象通常与可以驱动输出电压和读取输入电压的物理引脚相关联。 引脚类具有设置引脚模式(IN,OUT等)的方法以及获取和设置数字逻辑电平的方法。通过使用明确指定某个I / O引脚的标识符来构造引脚对象。允许的标识符形式和标识符映射到的物理引脚是特定于端口的。 标识符的可能性是整数,字符串或具有端口和引脚号的元组。
以下示例代码为针对 I/O 引脚 33 进行输出 (output) 操作。
参考代码
from machine import Pin
# create an output pin on pin #33
p0 = Pin(33, Pin.OUT)
# set the value low then high
p0.value(0)
p0.value(1)
classPin.Pin(id, mode=1, pull=1, value, drive, alt)
访问与给定相关的引脚外设(GPIO引脚) id 。如果在构建对象中给出了其他参数,则它们用于初始化引脚。 未指定的任何设置将保持其先前的状态。
参数:
- id 是强制性的,可以是任意对象。可能的值类型包括:int(内部引脚标识符),str(引脚名称)和元组([port,pin]对)。如是使用mPython,可用Pin.P(0~20),例如(Pin.P0)P0引脚提供映射为GPIO。
- mode 指定引脚模式,可以是以下之一:
- Pin.IN - 引脚配置为输入。如果将其视为输出,则引脚处于高阻态。
- Pin.OUT - 引脚配置为(正常)输出。
- Pin.OPEN_DRAIN -引脚配置为开漏输出。开漏输出以下列方式工作:如果输出值设置为0,则引脚处于低电平有效; 如果输出值为1,则引脚处于高阻态。并非所有端口都实现此模式,或某些端口可能仅在某些引脚上实现。
- Pin.ALT_OPEN_DRAIN - 引脚配置为漏极开路。
- pull 指定引脚是否连接了(弱)拉电阻,可以是以下之一:
- None - 无上拉或下拉电阻
- Pin.PULL_UP - 上拉电阻使能
- Pin.PULL_DOWN - 下拉电阻使能
- value 仅对 Pin.OUT 和 Pin.OPEN_DRAIN 模式有效,并指定初始输出引脚值,否则引脚外设的状态保持不变。
Pin.on()
设置引脚为高电平
Pin.off()
设置引脚为低电平
PWM – 脉冲宽度调制
machine.PWM(pin, freq, duty)
创建与设定引脚关联的 PWM 对象。这样就可以写该引脚上的模拟值。
- pin: 支持 PWM 的引脚 GPIO0、GPIO2、GPIO4、GPIO5、GPIO10、GPIO1219、GPIO21、GPIO22、GPIO23、GPIO2527。详见 ESP32引脚功能表.
- freq: 频率,0 < freq <= 78125 Hz,代表充电频率,数值低的话会闪烁,数值高的话高源比较稳定。
- duty: 占空比, 0 ≤ duty ≤ 0x03FF (十进制:0 ≤ duty ≤ 1023),代表亮度,数值越高,越亮。
PWM.init(freq, duty)
初始化 PWM的 freq 与 duty。
PWM.freq([freq_val])
当没有参数时,函数获得并返回PWM频率。当设置参数时,函数用来设置PWM频率,无返回值。
PWM.deinit()
关闭PWM。PWM使用完了之后,需要注销 deinit() 。
以下示例代码为针对 I/O 引脚 4 进行脉冲宽度调制操作,取得原始频率,并改为 10,暂停 5 秒,观察改变后效果,再设定 duty 为 5 ,暂停 5 秒,观察改变后效果,最后关闭PWM。
参考代码
from machine import Pin, PWM
import time
pwm = PWM(Pin(4)) # create PWM object from a pin
print(pwm.freq()) # get current frequency (default 5kHz)
time.sleep(5)
pwm.freq(10) # set PWM frequency from 1Hz to 40MHz
time.sleep(5)
print(pwm.duty()) # get current duty cycle, range 0-1023 (default 512, 50%)
pwm.duty(5) # set duty cycle from 0 to 1023 as a ratio duty/1023, (now 25%)
time.sleep(5)
pwm.deinit()
输出结果为:
5000
512
参考资料
- mPython help documentation, https://mpython.readthedocs.io/en/master/index.html
- MicroPython 文档, http://micropython.86x.net/en/latet/index-2.html
- MicroPython documentation, https://docs.micropython.org/en/latest/index.html