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 教程。