🛠 Faire clignoter la LED embarquée (elle est derrière la puce Wi-Fi !)
Objectifs
Découvrir la Raspberry Pi Pico W (RP2040 double cœur Cortex-M0+ 133 MHz + puce radio Infineon CYW43439 Wi-Fi/BT) avec le grand classique : le clignotement de la LED. Mais attention, la Pico W a une particularité unique : la LED utilisateur n'est pas sur une GPIO du RP2040, elle est câblée sur la broche WL_GPIO0 de la puce Wi-Fi CYW43439. L'exemple blink_simple du SDK ne fonctionne donc pas sur Pico W ; il faut passer par le pilote sans-fil (picow_blink dans pico-examples). Tu apprendras aussi pourquoi GP23, GP24, GP25 et GP29 ne sont pas des GPIO libres sur cette carte.
Matériel
- 1 × Raspberry Pi Pico W (réf. SCO918, ou Pico WH à headers soudés) — pas une Pico classique
- 1 × câble micro-USB data
- Pour la version C : Pico SDK 2.x avec
PICO_BOARD=pico_w; pour la version MicroPython : firmware_picow(inclut le pilote cyw43)
Code complet
// picow_blink.ino-like C SDK — la LED est sur WL_GPIO0 du CYW43439
// CMake : pico_stdlib + pico_cyw43_arch_none (pas besoin du réseau ici)
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
int main(void) {
// cyw43_arch_init alimente le CYW43439 (via GP23) et charge son firmware
if (cyw43_arch_init) {
return 1; // impossible d'initialiser la puce radio
}
while (true) {
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1); // LED ON (WL_GPIO0)
sleep_ms(250);
cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0); // LED OFF
sleep_ms(750);
}
}
// Équivalent MicroPython (firmware _picow) :
// from machine import Pin; import time
// led = Pin("LED", Pin.OUT) # alias de la broche pilotée via cyw43
// >
// # (souvent cité comme GP23) n'est pas confirmé dans la quickref rp2.
Vérification attendue
La LED verte clignote : allumée 250 ms, éteinte 750 ms. Si tu avais écrit le blink « Pico classique » en gpio_init(25), rien ne clignote — et pour cause : sur la Pico W, GP25 est consommée en interne (chip-select du SPI qui pilote le CYW43439) et la LED est ailleurs ! C'est LA leçon de ce tuto.
Erreurs fréquentes
- Réutiliser un code de Pico classique sur GP25 : sur Pico W, GP23/GP24/GP25/GP29 sont réservés par le sans-fil (power-on, SPI data/IRQ, SPI CS, SPI CLK) — la datasheet les exclut des GPIO utilisateur.
- Compiler pour la mauvaise carte : oublier
PICO_BOARD=pico_w(C SDK) ou prendre un firmware MicroPython non_picow(sans pilote cyw43, la LED et le Wi-Fi sont invisibles). - Oublier
cyw43_arch_init: sans initialisation du pilote,cyw43_arch_gpio_putne fait rien — la LED pendent sur une puce radio éteinte. - Croire la carte défecteuse parce que
blink_simplene clignote pas : c'est un comportement documenté, l'exemple officiel pour Pico W estpicow_blink. - Tensions : toute la logique est en 3,3 V non tolérants 5 V, comme sur la Pico classique.
Autres tutoriels pour cette carte
- Se connecter à un réseau Wi-Fi (station, WPA2/WPA3)
- Bouton et potentiomètre sans marcher sur le sans-fil (GPIO libres & ADC)
- Servir une page web depuis la Pico W (socket TCP + HTTP)
- Client HTTP : consommer une API depuis la Pico W
- Heure exacte via NTP : l'horloge temps réel des projets connectés
- Client MQTT : télémétrie IoT légère sur la Pico W
Exemples de code pour cette carte
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython