Python time.sleep_ms 函数
上次修改时间:2025 年 4 月 11 日
本综合指南探讨了 Python 的 time.sleep_ms 函数,该函数会暂停执行指定毫秒数。我们将介绍基本用法、定时操作以及使用微控制器的实际示例。
基本定义
time.sleep_ms 函数会暂停程序执行指定的毫秒数。它通常在 MicroPython 和其他嵌入式 Python 实现中可用。
主要特点:毫秒精度、提供非阻塞替代方案,并且对于硬件项目中的定时控制非常有用。与 time.sleep 不同,它采用整数毫秒而不是浮点秒。
基本延迟示例
time.sleep_ms 最简单的用法是在毫秒内创建延迟。此示例显示了不同延迟持续时间的基本用法。
import time
print("Starting...")
time.sleep_ms(500) # Delay for 500 milliseconds
print("Half second passed")
time.sleep_ms(1000) # Delay for 1 second
print("One second passed")
time.sleep_ms(2000) # Delay for 2 seconds
print("Two seconds passed")
此示例演示了打印语句之间的简单延迟。该函数接受一个整数参数,表示暂停执行的毫秒数。
请注意,在嵌入式环境中,使用 sleep_ms 比使用 sleep 将秒转换为毫秒更精确。
闪烁 LED 示例
time.sleep_ms 通常用于硬件项目中来控制定时。此示例显示了一个 LED 闪烁模式。
from machine import Pin
import time
led = Pin(2, Pin.OUT) # Configure GPIO2 as output
while True:
led.value(1) # Turn LED on
time.sleep_ms(500) # Wait 500ms
led.value(0) # Turn LED off
time.sleep_ms(500) # Wait 500ms
这将创建一个具有 500 毫秒间隔的可见闪烁模式。定时以毫秒为单位精确控制闪烁速率。
对于带有内置 LED 的 MicroPython 板,这无需额外的硬件即可提供即时的视觉反馈。
按钮去抖
time.sleep_ms 通过在检测后添加延迟来帮助机械按钮去抖。此示例显示了简单的去抖逻辑。
from machine import Pin
import time
button = Pin(0, Pin.IN, Pin.PULL_UP) # Configure GPIO0 as input
while True:
if button.value() == 0: # Button pressed
time.sleep_ms(50) # Debounce delay
if button.value() == 0: # Still pressed
print("Button pressed!")
while button.value() == 0: # Wait for release
time.sleep_ms(10)
初始延迟会滤除机械抖动。第二次检查会在抖动期后确认真正的按下。
典型的去抖时间范围为 10-50 毫秒,具体取决于开关特性。
非阻塞延迟
此示例演示了使用带有时间戳的 time.sleep_ms 进行的非阻塞延迟,允许其他代码在等待期间运行。
import time
last_print = 0
print_interval = 1000 # 1 second
while True:
current_time = time.ticks_ms()
if time.ticks_diff(current_time, last_print) >= print_interval:
print("Regular message every second")
last_print = current_time
# Other tasks can run here
# while waiting for the interval
此示例没有使用 sleep_ms 进行阻塞,而是使用 ticks_ms 和 ticks_diff 检查经过的时间。
这种模式对于需要同时执行多个任务的响应式应用程序至关重要。
脉冲宽度调制 (PWM)
time.sleep_ms 可以创建简单的 PWM 信号,用于控制 LED 亮度或电机速度。此示例显示了手动 PWM。
from machine import Pin
import time
led = Pin(2, Pin.OUT)
duty_cycle = 30 # 30% brightness
while True:
# On time
led.value(1)
time.sleep_ms(duty_cycle)
# Off time
led.value(0)
time.sleep_ms(100 - duty_cycle)
占空比通过改变开/关比率来控制亮度。这将创建一个具有可调占空比的 100Hz PWM 信号。
为了获得更好的性能,请在可用时使用硬件 PWM 而不是软件定时。
定时传感器读数
time.sleep_ms 帮助间隔传感器读数以防止过载。此示例显示了定时 DHT22 传感器读数。
import dht
from machine import Pin
import time
sensor = dht.DHT22(Pin(4))
read_interval = 2000 # 2 seconds between reads
while True:
try:
sensor.measure()
temp = sensor.temperature()
hum = sensor.humidity()
print(f"Temp: {temp}°C, Humidity: {hum}%")
except Exception as e:
print("Sensor read error:", e)
time.sleep_ms(read_interval)
延迟确保了传感器读数之间的正确定时。许多传感器需要测量之间的最小间隔。
错误处理很重要,因为传感器可能会在读取期间发生故障,尤其是在嘈杂的环境中。
最佳实践
- 精度: 对于毫秒延迟,sleep_ms 比 sleep 更精确
- 阻塞: 对于复杂的应用程序,请考虑非阻塞方法
- 省电: 对于电池供电的设备,请使用 deepsleep 代替
- 传感器定时: 遵守传感器的最小延迟要求
- 替代方案: 对于关键的定时需求,请使用硬件定时器
资料来源
作者
列出所有 Python 教程。