手把手教你写可复用的 Pico 空闲模式代码,附功耗优化技巧

在以下示例中,我们在循环中调用 machine.idle() 函数,使 CPU 进入空闲模式,降低功耗,通过配合外部中断,可以在有外部事件发生时,快速唤醒 CPU 进行处理。

这里,在风雅一号板-通用兼容扩展板上我们使用树莓派 Pico 的 GP22 引脚连接按键 USERKEY,设置 GP22 为下边沿触发,按键按下即可唤醒 CPU,可以在我们风雅一号板-通用兼容扩展板中看到,用户按键 USERKEY 在不按下时通过上拉电阻设置为高电平:

1.PNG

而当按下按键时为低电平,因此设置为下边沿触发:

2.PNG

以下代码可以在我们提供的资料包中 elegance-devkit v1\Demo\55 Machine_Idle 文件夹找到。

示例代码如下:

# Python env   : MicroPython v1.23.0
# -*- coding: utf-8 -*-        
# @Time    : 2024/8/23 下午2:31   
# @Author  : 李清水            
# @File    : main.py       
# @Description : 低功耗类实验,使用machine.idle()方法进入空闲模式

# ======================================== 导入相关模块 ========================================

# 导入硬件模块
import machine
# 导入时间相关模块
import time

# ======================================== 全局变量 ============================================

# ======================================== 功能函数 ============================================

# 定义外部中断处理函数
def button_handler(pin: machine.Pin) -> None:
    """
​    外部中断处理函数,按下按键后翻转 LED 状态并打印信息。

​    Args:
​        pin (machine.Pin): 触发中断的按键实例。

​    Returns:
​        None

​    Raises:
​        None
​    """
​    ​# 声明全局变量
    global led

    # LED灯翻转
    led.toggle()

    # 打印调试信息
    print("Button pressed!")

# ======================================== 自定义类 ============================================

# ======================================== 初始化配置 ==========================================

# 上电延时3s
time.sleep(3)
# 打印调试信息
print("FreakStudio : Using irq to wake up Pico of idle mode")

# 创建一个LED对象
led = machine.Pin(25, machine.Pin.OUT)
# 设置 GPIO22 为输入,并使能上拉电阻
button_pin = machine.Pin(22, machine.Pin.IN, machine.Pin.PULL_UP)
# 配置外部中断
button_pin.irq(trigger=machine.Pin.IRQ_FALLING, handler=button_handler)

# ========================================  主程序  ===========================================

# 主程序循环
while True:
    # 在循环中调用 machine.idle() 函数,降低 CPU 功耗
    machine.idle()

    # 打印消息以指示主循环正在运行
    print("System is idling...")

    # 为了避免打印过于频繁,可以加一个延时
    time.sleep(1)

烧录代码,连接远程终端,输出如下:

3.png

mmexport1782381148734.gif

可以看到,当我们按下按键时,外部中断将 CPU 唤醒,LED 灯亮灭反转,同时终端输出调试信息。

下面我们使用 USB 功率计连接到风雅一号板-通用兼容扩展板树莓派 Pico 的 USB 接口,对比两个模式下功耗:

5.png

posted @ 2026-09-02 18:37  FreakStudio  阅读(7)  评论(0)    收藏  举报