当前位置: 首页 > article >正文

树莓派pico入坑笔记,睡眠

关于树莓派pico和circuitpython的更多玩法,请看树莓派pico专栏

关于在 CircuitPython 中使用警报和浅/深度睡眠的更多信息,请参阅此学习指南。

树莓派pico支持浅睡眠和深度睡眠,其中深度睡眠唤醒后将从boot.py开始运行

支持按时间唤醒和引脚唤醒以及触摸唤醒,几种方式可以同时使用

参数

alarm.pin – 当引脚状态改变时触发警报。

  • PinAlarm


alarm.time – 当指定时间到达时触发警报。

  • TimeAlarm


alarm.touch – 检测到触摸时触发警报。

  • TouchAlarm

alarm.wake_alarm: circuitpython_typing.Alarm | None

最近触发的警报。如果 CircuitPython 处于睡眠状态,唤醒它的警报。如果自上次硬重置或软重启以来没有发生警报,则值为 None

方法

alarm.light_sleep_until_alarms(*alarms: circuitpython_typing.Alarm) → circuitpython_typing.Alarm
进入轻度睡眠,直到其中一个闹钟唤醒。返回引起醒来的闹钟,作为 alarm.wake_alarm 使用。

alarm.exit_and_deep_sleep_until_alarms(*alarms: circuitpython_typing.Alarmpreserve_dios: Sequence[digitalio.DigitalInOut] = ()) → None
退出程序并进入深度睡眠,直到被其中一个警报唤醒。此函数不返回。
当唤醒时,微控制器将重新启动并从头开始运行。 boot.py code.py
重启后,将可用与唤醒原因相同的警报作为 alarm.wake_alarm 。其类型和/或属性可能不完全对应原始警报。对于基于时间的警报,目前创建一个 alarm.time.TimeAlarm() 。
如果没有指定警报,微控制器将进入深度睡眠状态,直到复位。

示例代码

import alarm
import time
import board
import digitalio


# 创建引脚警报,当引脚状态从高到低变化时触发
pin_alarm = alarm.pin.PinAlarm(pin=board.BUTTON, value=False ,edge=True  , pull=True)
while True :

# 创建时间警报,5秒后触发
    time_alarm = alarm.time.TimeAlarm(monotonic_time=time.monotonic() + 5)
# 进入睡眠模式,等待警报触发
    alarm.light_sleep_until_alarms(time_alarm,pin_alarm)

# 警报触发后,设备被唤醒
    if alarm.wake_alarm:
        print("设备被警报唤醒")
        if isinstance(alarm.wake_alarm, alarm.time.TimeAlarm):
            print("时间警报触发,value:%s"%(alarm.wake_alarm))
        elif isinstance(alarm.wake_alarm, alarm.pin.PinAlarm):
            print("引脚警报触发,引脚状态:", digitalio.DigitalInOut(board.BUTTON).value)
    else:
        print("设备未被警报唤醒,可能是从硬重置或软重启启动的")
    print(time.monotonic())

效果

关于功耗

当使用 TimeAlarm 时,它实际上会损失一点深度睡眠性能。这是因为 RP2040 休眠模式实际上根本不支持外部时钟源下的 RTC,因此深度睡眠实际上是非常极端的浅睡眠版本,而不是一个独立模式。

当避免使用 TimeAlarm 时,Raspberry Pi Pico 开发板在深度睡眠状态下可以达到低于 2mA 的功耗

当添加时间闹钟时,电流上升至 7mA。

​RP2040 的轻睡眠模式,虽然效率不如深度睡眠水平,但仍然是一种有用的节能方式,功耗降低超过三分之一。


http://www.kler.cn/a/531270.html

相关文章:

  • C++哈希表深度解析:从原理到实现,全面掌握高效键值对存储
  • 一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI
  • Android 开发:新的一年,新的征程
  • DeepSeek Janus-Pro:多模态AI模型的突破与创新
  • Kafka SASL/SCRAM介绍
  • AI(计算机视觉)自学路线
  • go-zero学习笔记(三)
  • 院校联合以项目驱动联合培养医工计算机AI人才路径探析
  • 【Linux网络编程】:守护进程,前台进程,后台进程
  • C++哈希表深度解析:从原理到实现,全面掌握高效键值对存储
  • Mac M1 Comfyui 使用MMAudio遇到的问题解决?
  • 【C++】B2122 单词翻转
  • 【C++篇】位图与布隆过滤器
  • 毫秒级响应的VoIP中的系统组合推荐
  • 【DeepSeek背后的技术】系列一:混合专家模型(MoE)
  • 从零开始实现一个双向循环链表:C语言实战
  • Java多线程——对象的组合
  • FPGA|例化生成的PLL功能IP核
  • 为什么在Rust中要用Struct和Enum组织数据?
  • MySQL锁类型(详解)
  • React+Cesium基础教程(003):加载3D建筑物和创建标签
  • 利用deepseek参与软件测试 基本架构如何 又该在什么环节接入deepseek
  • Pathformer3D: A 3D Scanpath Transformer for 360° Images(浅看)
  • Simula语言的物联网
  • pycharm 中的 Mark Directory As 的作用是什么?
  • C++11新特性之constexpr