🛠 Sommeil profond et réveil programmé ou sur broche
Objectifs
Alimenter la Pico 2 W sur batterie impose de dormir : endormir le RP2350 entre deux releves, le reveiller a heure fixe par les alarmes materielles (1 timer + 4 alarmes) ou sur un front GPIO, et mesurer le gain. Attention : le CYW43 doit eteindre sa partie radio, et les courants spécifiques Pico 2 W (radio comprise) ne sont pas publies par la datasheet.
Matériel
- Pico 2 W alimentee par VSYS (batterie LiPo via le pattern chargeur documente)
- Bouton sur GP15 pour le réveil par front
- pico-sdk (header pico/sleep.h)
Code complet
// main.c - cycle : réveil -> 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");
}
}
Vérification attendue
La carte imprime Releve toutes les 30 secondes en mode alarme, et immediatement quand on appuie sur GP15 en mode réveil GPIO. Un amperemetre en série avec la batterie montre une chute nette du courant pendant le sommeil (ordres de grandeur P1.x du Pico 2 : 148-233 microamperes, radio eteinte).
Erreurs fréquentes
- Oublier de mettre les DEUX coeurs au repos (sleep_run_when_both_cores sur RP2350) : la carte ne dort jamais vraiment.
- Laisser le CYW43 alimente et connecte au Wi-Fi : la radio consomme en beaconing, eteindre cyw43_arch avant de dormir.
- Lire le VSYS (GP29) au réveil pendant que la radio reprend : la ligne est partagée avec le SPI du CYW43, donner la priorité avec cyw43_thread_enter/exit.
- Attendre printf en dormant : la console série est coupe, preparer un flag imprime au réveil.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython