🛠 Bouton et potentiomètre sans marcher sur le sans-fil (GPIO libres & ADC)
Objectifs
La Pico W hérite de toute la partie microcontrôleur du RP2040 : 2× UART, 2× SPI, 2× I²C, 16 canaux PWM, ADC SAR 12 bits 500 ksps, 8 machines PIO… Mais le sans-fil a mangé une partie du brochage : seules GP0–GP22 et GP26–GP28 sont librement utilisables (26 pastilles, dont 3 entrées analogiques). Ce tuto t'apprend à câbler un bouton et un potentiomètre sans jamais toucher aux broches réservées, et à lire l'ADC correctement sur une carte qui a ses pièges.
Matériel
- 1 × Raspberry Pi Pico W + câble micro-USB data
- 1 × bouton poussoir (GP2 → GND, pull-up interne)
- 1 × potentiomètre 10 kΩ : extrémités sur 3V3 et GND, curseur sur GP26 (ADC0)
- Console série USB 115200 bauds
- Rappel tensions : 3,3 V fixes, pas de tolérance 5 V
Code complet
# gpio_adc.py — bouton GP2 + potentiomètre GP26/ADC0 (MicroPython Pico W)
from machine import Pin, ADC
import time
btn = Pin(2, Pin.IN, Pin.PULL_UP) # bouton GP2 -> GND, actif à 0
pot = ADC(26) # GP26 = ADC0 (GP26..GP28 seules
# entrées ADC sorties sur la Pico W)
while True:
raw = pot.read_u16 # 16 bits MicroPython (0..65535)
mv = raw * 3300 // 65535
état = 'APPUIE' if not btn.value else 'repos'
print(f'adc={raw:5d} ~{mv} mV bouton={état}')
time.sleep_ms(200)
# > NE PAS UTILISER : GP23 (power-on radio), GP24 (SPI data/IRQ),
# GP25 (SPI CS), GP29 (SPI CLK radio, partagé ADC3=VSYS/3).
Vérification attendue
En tournant le potentiomètre, la valeur suit 0 → 65535 et les mV calculés suivent 0 → 3,3 V ; l'appui sur le bouton bascule l'état affiché. Deux pièges ADC documentés dans la datasheet Pico W : (1) ADC_VREF est filtrée depuis le 3V3 via une résistance de 200 Ω, ce qui crée un offset inhérent d'environ 30 mV ; (2) la lecture VSYS/3 (ADC3) est corrompue pendant les transactions SPI du Wi-Fi — et GP29 est justement l'horloge SPI du CYW43439, donc ne compte pas dessus avec le radio actif.
Erreurs fréquentes
- Recoller un blindage ou un boîtier métallique sur le bord de carte : la zone keep-out antenne (14 × 9 mm) doit rester dégagée, sinon le Wi-Fi rame même si le GPIO marche.
- Utiliser GP25 « comme sur la Pico » : ici c'est le chip-select du SPI radio — ton code « fonctionne » en apparence et casse le Wi-Fi.
- Mesurer plus de 3,3 V sur une broche : l'ADC ne tolère pas plus que son alimentation ; de plus GP26–GP29 ont une diode inverse interne vers le rail 3,3 V : injecter du courant carte éteinte alimente le rail par erreur (back-powering).
- Oublier l'offset ADC d'environ 30 mV : pour de la mesure fine, soustrais la lecture d'un canal à la masse, ou alimente ADC_VREF par une référence externe propre.
- Confondre broche physique et numéro GPx : on code toujours GPx, pas le rang du connecteur.
Autres tutoriels pour cette carte
- Faire clignoter la LED embarquée (elle est derrière la puce Wi-Fi !)
- Se connecter à un réseau Wi-Fi (station, WPA2/WPA3)
- 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