🛠 Bouton et potentiomètre sans marcher sur le sans-fil (GPIO libres & ADC)
Objetivos
La Pico W hereda toda la parte de microcontrolador del RP2040: 2× UART, 2× SPI, 2× I²C, 16 canales PWM, ADC SAR de 12 bits a 500 ksps, 8 máquinas PIO… Pero la parte inalámbrica ha consumido parte del cableado: solo GP0–GP22 y GP26–GP28 son libremente utilizables (26 pines, de los cuales 3 son entradas analógicas). Este tutorial te enseña a conectar un botón y un potenciómetro sin tocar nunca los pines reservados, y a leer correctamente el ADC en una placa que tiene sus trampas.
Material
- 1 × Raspberry Pi Pico W + cable micro-USB de datos
- 1 × botón pulsador (GP2 → GND, pull-up interno)
- 1 × potenciómetro de 10 kΩ: extremos en 3V3 y GND, cursor en GP26 (ADC0)
- Consola serie USB a 115200 baudios
- Recordatorio de tensiones: 3,3 V fijos, sin tolerancia a 5 V
Código completo
# 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
etat = 'APPUIE' if not btn.value else 'repos'
print(f'adc={raw:5d} ~{mv} mV bouton={etat}')
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).
Verificación esperada
Al girar el potenciómetro, el valor sigue de 0 → 65535 y los mV calculados siguen de 0 → 3,3 V; la pulsación del botón cambia el estado mostrado. Dos trampas del ADC documentadas en la hoja de datos de la Pico W: (1) ADC_VREF está filtrada desde 3V3 mediante una resistencia de 200 Ω, lo que crea un offset inherente de aproximadamente 30 mV; (2) la lectura de VSYS/3 (ADC3) se corrompe durante las transacciones SPI del Wi-Fi — y GP29 es precisamente el reloj SPI del CYW43439, así que no cuentes con ello con la radio activa.
Errores frecuentes
- Volver a colocar una pantalla o una carcasa metálica en el borde de la placa: la zona de exclusión de la antena (14 × 9 mm) debe permanecer despejada, de lo contrario el Wi-Fi irá lento aunque el GPIO funcione.
- Usar GP25 «como en la Pico»: aquí es el chip-select del SPI de la radio — tu código «funciona» aparentemente y rompe el Wi-Fi.
- Medir más de 3,3 V en un pin: el ADC no tolera más que su alimentación; además, GP26–GP29 tienen un diodo inverso interno hacia el rail de 3,3 V: inyectar corriente con la placa apagada alimenta el rail por error (back-powering).
- Olvidar el offset del ADC de aproximadamente 30 mV: para mediciones precisas, resta la lectura de un canal a la masa, o alimenta ADC_VREF con una referencia externa limpia.
- Confundir el pin físico con el número GPx: siempre se programa GPx, no la posición en el conector.
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython