🛠 Sommeil profond et réveil programmé ou sur broche
Objetivos
Alimentar la Pico 2 W con batería obliga a dormir: poner en reposo el RP2350 entre dos lecturas, despertarlo a una hora fija mediante alarmas de hardware (1 temporizador + 4 alarmas) o mediante un flanco GPIO, y medir la ganancia. Atención: el CYW43 debe apagar su parte de radio, y las corrientes específicas de la Pico 2 W (incluida la radio) no están publicadas en la hoja de datos.
Material
- Pico 2 W alimentada por VSYS (batería LiPo mediante el patrón de carga documentado)
- Botón en GP15 para el despertar por flanco
- pico-sdk (cabecera pico/sleep.h)
Código completo
// main.c - cycle : reveil -> releve -> dormant -> alarme 30 s plus tard
#include "pico/stdlib.h"
#include "pico/sleep.h"
#define BOUTON_REVEIL 15
int main(void) {
stdio_init_all;
sleep_init_runsleep_and_sleep_mode(
SLEEP_MODE_DORMANT,
WAKE_ON_GPIO | WAKE_ON_ALARM_0 | WAKE_ON_RP2350_DORMANT_WAKEUP_SOURCE_GPIO);
gpio_init(BOUTON_REVEIL);
gpio_set_dir(BOUTON_REVEIL, GPIO_IN);
gpio_pull_up(BOUTON_REVEIL);
while (true) {
printf("Releve : je travaille\n"); // tache utile ici
sleep_run_when_both_cores; // les deux coeurs doivent dormir
sleep_goto_dormant_until_timer_alarm_absolute(
make_timeout_time_ms(30000)); // ou : bouton sur GP15
printf("Reveille !\n");
}
}
Verificación esperada
La placa imprime Lectura cada 30 segundos en modo alarma, e inmediatamente cuando se pulsa GP15 en modo despertar por GPIO. Un amperímetro en serie con la batería muestra una caída neta de la corriente durante el sueño (órdenes de magnitud del Pico 2: 148-233 microamperios, radio apagada).
Errores frecuentes
> NO VERIFICADO: corriente exacta del Pico 2 W en reposo, incluido el CYW43 — no publicada; medir en su propio montaje.
- Olvidar poner en reposo los DOS núcleos (sleep_run_when_both_cores en RP2350): la placa nunca duerme realmente.
- Dejar el CYW43 alimentado y conectado a Wi-Fi: la radio consume en modo beaconing, apagar cyw43_arch antes de dormir.
- Leer VSYS (GP29) al despertar mientras la radio se reactiva: la línea está compartida con el SPI del CYW43, dar prioridad mediante cyw43_thread_enter/exit.
- Esperar printf durante el sueño: la consola serie está cortada, preparar una bandera que se imprima al despertar.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython