树莓派pico入坑笔记,睡眠

server/2025/2/4 16:59:36/
关于树莓派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.ppmy.cn/server/164926.html

相关文章

Linux 4.19内核中的内存管理:x86_64架构下的实现与源码解析

在现代操作系统中,内存管理是核心功能之一,它直接影响系统的性能、稳定性和多任务处理能力。Linux 内核在 x86_64 架构下,通过复杂的机制实现了高效的内存管理,涵盖了虚拟内存、分页机制、内存分配、内存映射、内存保护、缓存管理等多个方面。本文将深入探讨这些机制,并结…

mysql中in和exists的区别?

大家好,我是锋哥。今天分享关于【mysql中in和exists的区别?】面试题。希望对大家有帮助; mysql中in和exists的区别? 在 MySQL 中,IN 和 EXISTS 都是用于子查询的操作符,但它们在执行原理和适用场景上有所不…

WebSocket——netty实现websocket编码

一、前言:WebSocket 和 Netty 简介 在现代的互联网应用中,许多场景需要实时通信,比如在线聊天、实时通知、股票行情更新等。这些场景下,我们需要一种技术,让服务器能够主动向客户端推送消息。WebSocket 就是为了解决这…

list的使用,及部分功能的模拟实现(C++)

目录(文章中"节点"和"结点"是同一个意思) 1. list的介绍及使用 1.1 list的介绍 1.2 list的使用 1.2.1 list的构造 1.2.2 list iterator的使用 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list…

Linux网络 应用层协议 HTTP

概念 在互联网世界中, HTTP (HyperText Transfer Protocol ,超文本传输协议)是一个至关重要的协议。它定义了客户端(如浏览器)与服务器之间如何通信,以交换或传输超文本(如 HTML 文…

k8s二进制集群之负载均衡器高可用部署

Haproxy 和 Keepalived安装Haproxy配置文件准备Keepalived配置及健康检查启动Haproxy & Keepalived服务继续上一篇文章《K8S集群架构及主机准备》,下面介绍负载均衡器搭建过程 Haproxy 和 Keepalived安装 在负载均衡器两个主机上安装即可 apt install haproxy keepalived…

Notepad++消除生成bak文件

设置(T) ⇒ 首选项... ⇒ 备份 ⇒ 勾选 "禁用" 勾选禁用 就不会再生成bak文件了 notepad怎么修改字符集编码格式为gbk 如图所示

小程序的协同工作与发布

1.小程序API的三大分类 2.小程序管理的概念,以及成员管理两个方面 3.开发者权限说明以及如何维护项目成员 4.小程序版本