¿Qué es MicroPython? Comandos básicos, REPL y primeros programas
¿Qué es MicroPython y en qué se diferencia de Python? REPL, machine.Pin, PWM, ADC, I2C, ticks_ms, main.py, Thonny, mpremote, mip y firmware para Pico y ESP32.
MicroPython es una reimplementación pequeña y rápida del lenguaje Python 3 para microcontroladores. Cuando instalas MicroPython en una placa como la Raspberry Pi Pico o el ESP32, la placa ejecuta el código Python por sí misma: escribes un comando sin compilar nada y ves cómo el LED se enciende al instante. Si aprendiste Python en clase o en tu ordenador, con la misma sintaxis puedes leer pines, mover motores, tomar datos de sensores y conectarte al Wi-Fi.
En esta guía aprenderás en qué se diferencia MicroPython del Python normal, el REPL que te permite hablar con la placa al momento y los módulos que más usarás, es decir machine.Pin, PWM, ADC e I2C, con código de ejemplo. Después verás la diferencia entre time.sleep y ticks_ms, los archivos main.py y boot.py que se ejecutan al arrancar, cómo subir archivos con Thonny y mpremote, cómo añadir bibliotecas con mip y cómo grabar el firmware en la Pico y el ESP32. En la última sección comparamos MicroPython y Arduino C++ cara a cara.

¿Qué es MicroPython y en qué se diferencia de Python?
MicroPython es un proyecto de código abierto que Damien George inició en 2013 para una placa pequeña y que hoy es compatible con decenas de microcontroladores. El firmware que grabas en la placa contiene el intérprete de Python, los módulos básicos y un pequeño sistema de archivos. Tu código se convierte primero en bytecode dentro de la placa y luego el intérprete ejecuta ese bytecode paso a paso. Como es imposible meter todo el Python de tu ordenador en unos cientos de KB de RAM, el lenguaje es el mismo, pero la mayoría de las bibliotecas están recortadas o directamente no existen. A cambio se ha añadido algo que el Python de escritorio no tiene: el módulo machine, que da acceso directo al hardware.
| Tema | Python (ordenador) | MicroPython (placa) |
|---|---|---|
| Dónde se ejecuta | Un ordenador con gigabytes de RAM | Un microcontrolador con cientos de KB de RAM |
| Biblioteca estándar | Muy amplia: datetime, threading, urllib... | Un subconjunto pequeño: time, os, json, re, struct, random, math... |
| Paquetes | numpy, pandas y miles más con pip | Sin numpy ni pandas; paquetes de micropython-lib con mip |
| Acceso al hardware | Ninguno, necesita bibliotecas extra | Módulo machine: Pin, PWM, ADC, I2C, SPI, UART, Timer |
| Números decimales | 64 bits (unos 15 dígitos) | 32 bits en la Pico y el ESP32 (unos 7 dígitos) |
| Tiempo | time.time(), datetime | time.sleep_ms(), time.ticks_ms(), machine.RTC |
| Inicio del programa | Lo ejecutas desde la línea de comandos | boot.py y main.py se ejecutan solos al arrancar |
Placas que ejecutan MicroPython
| Placa | Archivo de firmware | RAM total | Nota |
|---|---|---|---|
| Raspberry Pi Pico (RP2040) | RPI_PICO (.uf2) | 264 KB | La placa más fácil para empezar |
| Raspberry Pi Pico W | RPI_PICO_W (.uf2) | 264 KB | Módulo network para el Wi-Fi; el firmware de la Pico normal no activa el Wi-Fi aquí |
| Raspberry Pi Pico 2 (RP2350) | RPI_PICO2 (.uf2) | 520 KB | Más rápida y con más memoria |
| ESP32 (WROOM) | ESP32_GENERIC (.bin) | 520 KB (el Wi-Fi usa una parte) | Wi-Fi y Bluetooth; mucha más memoria en los modelos con PSRAM |
| ESP8266 (NodeMCU, Wemos D1 Mini) | ESP8266_GENERIC (.bin) | Unos 80 KB | Funciona, pero la memoria es escasa; para proyectos nuevos elige un ESP32 |
| Arduino Uno (ATmega328P) | No hay | 2 KB | No puede ejecutar MicroPython; se programa en C++ |
Grabar el firmware de MicroPython en la Pico y el ESP32
- Pico: Mantén pulsado el botón BOOTSEL de la placa mientras conectas el cable USB y luego suéltalo. En el ordenador aparece una unidad llamada RPI-RP2 (RP2350 en la Pico 2).
- Descarga de la página oficial de MicroPython el archivo .uf2 adecuado para tu placa (RPI_PICO para la Pico, RPI_PICO_W para la Pico W) y arrástralo a esa unidad.
- Al terminar la copia, la placa se reinicia sola y la unidad desaparece; MicroPython ya está instalado. En Thonny, elige MicroPython (Raspberry Pi Pico) en Herramientas > Opciones > Intérprete.
- ESP32: Si tienes Python instalado en el ordenador, escribe pip install esptool en la línea de comandos. Conecta la placa y averigua su puerto (por ejemplo COM3 en Windows, /dev/ttyUSB0 en Linux).
- Borra primero la flash: esptool.py --chip esp32 --port COM3 erase_flash. Si la placa no conecta, mantén pulsado el botón BOOT mientras se ejecuta el comando.
- Graba el firmware: esptool.py --chip esp32 --port COM3 --baud 460800 write_flash -z 0x1000 ESP32_GENERIC-....bin. En el ESP32-S3 y el ESP32-C3 la dirección es 0x0. La opción Install or update MicroPython (esptool) de Thonny hace lo mismo desde una ventana.
El REPL: hablar con la placa al instante
El REPL (Read-Eval-Print Loop) es la línea de comandos que la placa te abre por el puerto serie. El símbolo >>> que ves en la ventana Shell de la parte inferior de Thonny indica que el REPL te está esperando. Si escribes 1 + 1, la placa lo calcula y devuelve 2; si escribes from machine import Pin y después Pin("LED", Pin.OUT).value(1), el LED de la Pico se enciende en ese mismo instante. No hay forma más rápida que el REPL para leer el valor de un sensor, comprobar si un pin está bien conectado o descubrir cómo funciona una biblioteca, sin esperar a compilar y cargar.
| Atajo o comando | Qué hace |
|---|---|
| Ctrl+C | Detiene el programa en ejecución (KeyboardInterrupt) y vuelve al REPL |
| Ctrl+D | Reinicio por software (soft reset); boot.py y main.py se ejecutan de nuevo |
| Ctrl+E | Modo pegar: pegas código largo sin estropear la sangría y lo ejecutas con Ctrl+D |
| Tab | Autocompletado; escribe machine. y pulsa Tab para ver todo lo que contiene el módulo |
| help("modules") | Lista todos los módulos del firmware |
| import gc; gc.mem_free() | Muestra en bytes la RAM libre para tu programa |
| import os; os.listdir() | Lista los archivos de la placa |
Primer programa y su equivalente en Arduino C++
1# İlk program: dahili LED'i yakıp söndür / First program: blink the onboard LED
2from machine import Pin
3import time
4
5led = Pin("LED", Pin.OUT) # Pico ve Pico W; ESP32'de Pin(2, Pin.OUT) / Pico and Pico W; Pin(2, Pin.OUT) on ESP32
6
7while True:
8 led.value(1) # yak / on
9 time.sleep(0.5) # saniye cinsinden / in seconds
10 led.value(0) # söndür / off
11 time.sleep(0.5)1// Aynı program Arduino C++ ile / The same program in Arduino C++
2void setup() {
3 pinMode(LED_BUILTIN, OUTPUT);
4}
5
6void loop() {
7 digitalWrite(LED_BUILTIN, HIGH);
8 delay(500); // milisaniye cinsinden / in milliseconds
9 digitalWrite(LED_BUILTIN, LOW);
10 delay(500);
11}Los dos programas hacen lo mismo, pero su estructura es distinta. En MicroPython no hay setup() ni loop(): el archivo se ejecuta una vez de arriba abajo y el bucle infinito lo montas tú con while True:. En lugar de llaves y punto y coma se usa la sangría; todas las líneas dentro del bucle deben tener la misma sangría (normalmente 4 espacios). La espera también usa otra unidad: time.sleep(0.5) recibe segundos y el delay(500) de Arduino, milisegundos. En MicroPython usas time.sleep_ms() para milisegundos y time.sleep_us() para microsegundos. Las bases del lado de Arduino están en Fundamentos de programación con Arduino.
machine.Pin: entradas y salidas digitales
| MicroPython | Equivalente en Arduino C++ | Descripción |
|---|---|---|
| led = Pin(15, Pin.OUT) | pinMode(15, OUTPUT) | Configura el pin como salida |
| led.value(1) o led.on() | digitalWrite(15, HIGH) | Pone el pin en HIGH; value(0) u off() lo pone en LOW |
| buton = Pin(14, Pin.IN, Pin.PULL_UP) | pinMode(14, INPUT_PULLUP) | Entrada con resistencia pull-up interna |
| buton.value() | digitalRead(14) | Devuelve 0 o 1 |
| led.toggle() | digitalWrite(15, !digitalRead(15)) | Invierte el estado; existe en la Pico, en el ESP32 usa value(not led.value()) |
| buton.irq(trigger=Pin.IRQ_FALLING, handler=f) | attachInterrupt(..., f, FALLING) | Llama a la función f cuando cambia el pin |
time.sleep y ticks_ms: medir el tiempo sin bloquear
time.sleep() deja la placa totalmente en espera; mientras tanto no se lee ningún botón ni se consulta ningún sensor. Para llevar varias tareas a la vez usas el equivalente en MicroPython de la técnica millis() de Arduino: time.ticks_ms() da los milisegundos desde el arranque y time.ticks_diff(nuevo, viejo) calcula la diferencia entre dos instantes. Es importante obtener la diferencia con ticks_diff y no con una resta normal; el contador vuelve a empezar al llegar a cierto valor y en ese momento la resta da un resultado erróneo. El código siguiente hace parpadear el LED sin bloquear mientras atiende un botón mediante una interrupción (IRQ); cada pulsación cambia la velocidad del parpadeo.
1# delay kullanmadan iki iş: LED yanıp söner, buton kesmeyle modu değiştirir
2# Two jobs without blocking: the LED blinks, a button interrupt switches the mode
3from machine import Pin
4import time
5
6led = Pin(15, Pin.OUT) # LED + 220 Ω, GP15
7buton = Pin(14, Pin.IN, Pin.PULL_UP) # buton GP14 ile GND arasında / button between GP14 and GND
8
9hizli = False
10son_basma = 0
11son_degisim = time.ticks_ms()
12
13def buton_kesme(pin): # kesme fonksiyonu kısa olmalı / keep the handler short
14 global hizli, son_basma
15 simdi = time.ticks_ms()
16 if time.ticks_diff(simdi, son_basma) > 200: # 200 ms debounce / 200 ms debounce
17 son_basma = simdi
18 hizli = not hizli
19
20buton.irq(trigger=Pin.IRQ_FALLING, handler=buton_kesme) # basınca HIGH'dan LOW'a iner / goes HIGH to LOW when pressed
21
22while True:
23 aralik = 100 if hizli else 500
24 if time.ticks_diff(time.ticks_ms(), son_degisim) >= aralik: # taşmaya karşı güvenli / safe against wrap-around
25 son_degisim = time.ticks_ms()
26 led.value(not led.value())
27 # burada başka işler yapılabilir / other work can run herePWM: brillo, servos y sonido
1# PWM: LED parlaklığı ve servo açısı / PWM: LED brightness and servo angle
2from machine import Pin, PWM
3import time
4
5led = PWM(Pin(15))
6led.freq(1000) # 1 kHz: titreme görünmez / no visible flicker
7
8for d in range(0, 65536, 2048): # duty_u16: 0 (kapalı) ... 65535 (tam) / 0 (off) ... 65535 (full)
9 led.duty_u16(d)
10 time.sleep_ms(20)
11led.duty_u16(0)
12
13servo = PWM(Pin(16))
14servo.freq(50) # servolar 50 Hz (20 ms) ister / servos expect 50 Hz (20 ms)
15
16def servo_aci(derece):
17 us = 500 + derece * 2000 // 180 # 0° = 0,5 ms, 180° = 2,5 ms; servona göre ayarla / tune for your servo
18 servo.duty_ns(us * 1000)
19
20for a in (0, 90, 180, 90):
21 servo_aci(a)
22 time.sleep(1)El objeto PWM enciende y apaga un pin muy rápido para ajustar una potencia media. freq() fija cuántas veces por segundo se repite y duty_u16() cuánto tiempo permanece encendido el pin, con un número entre 0 y 65535; 32768 equivale a un 50 % aproximadamente. Esta escala da pasos mucho más finos que el rango 0–255 de analogWrite en Arduino. Los servos esperan una señal de 50 Hz y un ancho de pulso de entre 0,5 y 2,5 ms; duty_ns() indica la duración del pulso directamente en nanosegundos y simplifica mucho el código del servo. También puedes tocar notas dando distintos valores de freq() a un zumbador pasivo. El ciclo de trabajo y la frecuencia se explican a fondo en Qué es PWM.
ADC: lectura analógica
1# ADC: potansiyometre ve Pico'nun dahili sıcaklık sensörü
2# ADC: a potentiometer and the Pico's internal temperature sensor
3from machine import ADC, Pin
4import time
5
6pot = ADC(Pin(26)) # GP26 = ADC0; ESP32'de ADC(Pin(34)) / ADC(Pin(34)) on ESP32
7yonga = ADC(4) # 4. kanal: dahili sıcaklık / channel 4: internal temperature
8
9def ortalama(adc, n=16): # gürültüyü azalt / reduce noise
10 toplam = 0
11 for _ in range(n):
12 toplam += adc.read_u16()
13 return toplam // n
14
15while True:
16 ham = ortalama(pot) # 0-65535 (12 bit ölçüm 16 bite ölçeklenir) / 12-bit reading scaled to 16 bits
17 volt = ham * 3.3 / 65535
18 v_t = ortalama(yonga) * 3.3 / 65535
19 derece = 27 - (v_t - 0.706) / 0.001721 # RP2040 veri sayfasındaki formül / formula from the RP2040 datasheet
20 print("Pot: {} ({:.2f} V) Yonga / chip: {:.1f} C".format(ham, volt, derece))
21 time.sleep(1)read_u16() devuelve un valor entre 0 y 65535 en todas las placas, así que el mismo código funciona en la Pico y en el ESP32. El ADC de la Pico es en realidad de 12 bits y la lectura se escala a 16 bits. La Pico tiene tres pines analógicos accesibles: GP26 (ADC0), GP27 (ADC1) y GP28 (ADC2); el cuarto canal es el sensor de temperatura interno del chip y mide la temperatura del chip, no la de la habitación. En el ESP32 necesitas adc.atten(ADC.ATTN_11DB) para leer todo el rango de 0–3,3 V, y los pines ADC2 no se pueden usar con el Wi-Fi activo, así que elige los pines ADC1 entre GPIO 32 y 39. La media de 16 lecturas del código reduce bastante el ruido del ADC. Conceptos como resolución y tensión de referencia están en Qué es un ADC.
I2C: conectar sensores y pantallas
1# I2C: hattı tara ve SSD1306 OLED'e yaz / I2C: scan the bus and write to an SSD1306 OLED
2from machine import Pin, I2C
3import ssd1306 # önce: mpremote mip install ssd1306 / first: mpremote mip install ssd1306
4
5i2c = I2C(0, sda=Pin(4), scl=Pin(5), freq=400000) # Pico; ESP32'de I2C(0, sda=Pin(21), scl=Pin(22))
6adresler = i2c.scan()
7print("Bulunan / found:", [hex(a) for a in adresler]) # OLED genelde 0x3c / OLED is usually 0x3c
8
9if 0x3C in adresler:
10 oled = ssd1306.SSD1306_I2C(128, 64, i2c)
11 oled.fill(0)
12 oled.text("MicroPython", 0, 0)
13 oled.text("I2C: " + hex(adresler[0]), 0, 16)
14 oled.show()I2C(0, sda=..., scl=...) inicia la unidad I2C por hardware en los pines que elijas y scan() devuelve una lista con las direcciones de todos los dispositivos que responden en el bus. Si un sensor no funciona, este escaneo es lo primero que debes hacer: una lista vacía indica un problema de cableado, y una dirección distinta de la esperada se corrige en el código. En la Pico los pines que puede usar cada unidad I2C son fijos; por ejemplo, para I2C0 funcionan los pares GP0-GP1, GP4-GP5 o GP8-GP9, y si eliges un par incorrecto recibes un ValueError. En el ESP32 el I2C se puede asignar a casi cualquier pin. Los detalles de la pantalla están en Pantalla OLED y el protocolo en Qué es I2C.
main.py y boot.py: el código que se ejecuta al arrancar
Cuando pulsas Ejecutar en Thonny, el código solo corre en ese momento sin guardarse en la placa; al desconectar el USB desaparece. Para que tu código se ejecute solo cada vez que arranque la placa, debes guardar el archivo en la placa con el nombre main.py. Al arrancar se ejecuta primero boot.py y después main.py. boot.py sirve para preparativos que se hacen una vez, como conectar al Wi-Fi o ajustar el reloj; el firmware del ESP32 crea este archivo por sí mismo, mientras que en la Pico normalmente no existe. Tu programa principal siempre va en main.py. Puedes traer a main.py funciones de otros archivos con import y guardar mediciones en el sistema de archivos de la placa con open().
1# main.py: kart her açıldığında otomatik çalışır / runs automatically every time the board starts
2import time
3from machine import Pin
4
5time.sleep(3) # Ctrl+C ile durdurmak için güvenlik payı / a safety window for Ctrl+C
6led = Pin("LED", Pin.OUT)
7sayac = 0
8
9try:
10 while True:
11 sayac += 1
12 led.value(sayac % 2)
13 print("Calisiyor / running", sayac)
14 time.sleep(1)
15except KeyboardInterrupt: # Thonny'de Stop ya da Ctrl+C / Stop in Thonny or Ctrl+C
16 led.value(0)
17 print("Durduruldu / stopped")Subir archivos: Thonny y mpremote
Si estás empezando, Thonny es el camino más fácil: escribe tu código, elige Archivo > Guardar como, selecciona Raspberry Pi Pico o MicroPython device en la ventana que se abre y llama al archivo main.py. Si abres Ver > Archivos verás lado a lado los archivos del ordenador y de la placa, y podrás copiarlos de uno a otro con el botón derecho. Para quienes prefieren la línea de comandos y usan un editor como VS Code, la herramienta oficial es mpremote; se instala con pip install mpremote y se conecta sola a la primera placa con MicroPython que encuentra.
| Comando de mpremote | Qué hace |
|---|---|
| mpremote | Se conecta a la primera placa que encuentra y abre el REPL (salir: Ctrl+X) |
| mpremote ls | Lista los archivos de la placa |
| mpremote cp main.py :main.py | Copia un archivo del ordenador a la placa; los dos puntos (:) indican la placa |
| mpremote run test.py | Ejecuta el archivo sin guardarlo en la placa y muestra su salida |
| mpremote mip install ssd1306 | Descarga la biblioteca con la conexión del ordenador y la instala en la carpeta /lib de la placa |
| mpremote reset | Reinicia la placa |
| mpremote connect COM3 ls | Se conecta a la placa de un puerto concreto (en macOS y Linux, por ejemplo /dev/ttyACM0) |
Añadir bibliotecas: mip
En MicroPython no hay pip; en su lugar se usa el pequeño gestor de paquetes mip. En una placa que puede conectarse a internet, como la Pico W o el ESP32, primero te conectas al Wi-Fi y luego escribes import mip y mip.install("ssd1306") en el REPL; el paquete se descarga del repositorio oficial micropython-lib y se coloca en la carpeta /lib de la placa. También puedes instalar un driver de GitHub con mip.install("github:usuario/repositorio"). Para una Pico sin Wi-Fi, haz lo mismo desde el ordenador con el comando mpremote mip install o con el menú Herramientas > Gestionar paquetes de Thonny. Copiar a la placa un driver de un solo archivo (por ejemplo un .py escrito para un sensor) también sirve; mientras el archivo esté en la raíz o en /lib, lo cargas con import. Los pasos para conectar al Wi-Fi están en Wi-Fi con la Pico W.
¿MicroPython o Arduino C++?
| Característica | MicroPython | Arduino C++ |
|---|---|---|
| Lenguaje | Sintaxis de Python 3 | C++ y el núcleo de Arduino |
| Cómo se ejecuta | Un intérprete en la placa ejecuta bytecode | Se compila a código máquina en el ordenador |
| Ciclo de prueba | Inmediato en el REPL; guardar tarda 1–2 segundos | Compilar y cargar en cada cambio, 10–60 segundos |
| Velocidad | Los bucles en Python puro son de 10 a 100 veces más lentos | Velocidad nativa |
| Temporización | El recolector de basura hace pausas breves de vez en cuando | Predecible hasta el microsegundo |
| Sistema de archivos | Sí: main.py, archivos de datos y de ajustes | No; necesita EEPROM o una biblioteca extra |
| Bibliotecas | micropython-lib y drivers de la comunidad | El enorme ecosistema de bibliotecas de Arduino |
| Placas | Pico, ESP32, ESP8266 | Casi todas, incluidas Uno, Nano y Mega |
| Mensajes de error | Mensaje claro con número de línea durante la ejecución | Errores de compilación; durante la ejecución, seguimiento con Serial.print |
| Ideal para | Aprender, probar rápido, Wi-Fi y manejo de datos | Temporización precisa, placas con poca memoria, muchas bibliotecas listas |
En la práctica decide tu proyecto. Leer un sensor y enviarlo por Wi-Fi, servir una página web o manejar una pantalla se resuelve en MicroPython con menos líneas y más rápido. Generar señales con precisión de microsegundos, actualizar cientos de LED a gran velocidad o tener solo una placa pequeña como el Uno inclina la balanza hacia C++. Puedes acelerar una función lenta con el decorador @micropython.native y reducir las pausas del recolector de basura evitando crear listas y cadenas nuevas dentro de los bucles. Para elegir placa, consulta también ¿Arduino o ESP32?.
Errores frecuentes y soluciones
| Error o síntoma | Causa | Solución |
|---|---|---|
| ImportError: no module named 'ssd1306' | La biblioteca no está en la placa | Instálala con mip o mpremote mip, o copia el archivo .py a la placa |
| IndentationError | Sangría incoherente, espacios y tabulaciones mezclados | Usa 4 espacios en todo el archivo; Thonny lo hace por ti |
| OSError: [Errno 5] EIO (I2C) | El dispositivo no responde: cableado, dirección o alimentación | Comprueba la dirección con scan(), revisa SDA y SCL |
| ValueError: bad SCL pin | Los pines elegidos no pertenecen a esa unidad I2C | Elige el par correcto de I2C0 o I2C1 en el pinout de la Pico |
| El código funciona en Thonny pero no al desconectar el USB | El archivo no se guardó en la placa como main.py | Con Guardar como, guárdalo en la placa como main.py |
| MemoryError: memory allocation failed | RAM llena: una lista grande, un texto largo o un búfer enorme | Procesa los datos por partes, llama a gc.collect(), usa bytearray |
| Thonny: Device is busy or does not respond | main.py está en un bucle sin pausa u otro programa usa el puerto | Stop o Ctrl+C, cierra el otro programa y, si hace falta, borra la flash |
MicroPython es el camino más corto al mundo de los microcontroladores si ya sabes Python: ves el resultado en cuanto pruebas un pin en el REPL y con unas pocas líneas lees un sensor y te conectas al Wi-Fi. Cuando domines los módulos básicos, la idea de main.py y la temporización sin bloqueo con ticks_ms, tus proyectos crecerán deprisa. En la app BlueGrays encontrarás proyectos con la Raspberry Pi Pico de LED, semáforo, botones y PWM, con esquemas de conexión y código MicroPython paso a paso.
Preguntas frecuentes
¿Qué es MicroPython?
MicroPython es una versión pequeña del lenguaje Python 3 pensada para microcontroladores. Gracias al firmware grabado en la placa, placas como la Raspberry Pi Pico y el ESP32 ejecutan código Python directamente; con el módulo machine accedes a los pines, al PWM, al ADC y al I2C.
¿MicroPython es lo mismo que Python?
La sintaxis es la misma, pero MicroPython es un subconjunto reducido del Python de escritorio. No tiene bibliotecas grandes como numpy y pandas, la biblioteca estándar es más pequeña y los números decimales son de 32 bits en la Pico y el ESP32. A cambio, añade el módulo machine para acceder directamente al hardware.
¿Qué es mejor, MicroPython o Arduino?
Depende de tu objetivo. MicroPython es más cómodo para aprender, hacer pruebas rápidas y proyectos que envían datos por Wi-Fi; Arduino C++ es más rápido, tiene una temporización más precisa y ofrece muchas más bibliotecas listas. La Pico y el ESP32 se pueden programar de las dos maneras.
¿MicroPython funciona en un Arduino Uno?
No. El chip ATmega328P del Arduino Uno solo tiene 2 KB de RAM y 32 KB de flash, y el intérprete de MicroPython no cabe. Si quieres usar MicroPython, elige una placa más potente como la Raspberry Pi Pico o el ESP32.
¿Cómo se instala una biblioteca en MicroPython?
En una placa conectada a internet, escribe import mip y mip.install("nombre_paquete") en el REPL. En placas sin Wi-Fi haces lo mismo desde el ordenador con el comando mpremote mip install nombre_paquete o con el gestor de paquetes de Thonny. Copiar a la placa drivers de un solo archivo también funciona.
¿Cómo guardar el código de forma permanente en la Pico?
En Thonny, elige Raspberry Pi Pico en Archivo > Guardar como y llama al archivo main.py. Cada vez que la placa arranca, primero se ejecuta boot.py y después main.py por sí solo; aunque desconectes el USB del ordenador y lo enchufes a otra fuente de 5 V, el programa sigue funcionando.
Proyectos para hacer después de leer esto
Ver todos los proyectos
Parpadeo LED Integrado Raspberry Pi Pico (Pico y Pico W)
¡El proyecto de apertura de la serie Raspberry Pi Pico! Hacemos parpadear el LED verde integrado para verificar que la placa funciona — un experimento clásico "Hello World". SIN componentes externos, solo Pico y cable USB. El código está escrito en MicroPython (el lenguaje oficialmente respaldado por la Raspberry Pi Foundation). Aprende la clase machine.Pin, el modo Pin.OUT, los métodos led.on()/off() y time.sleep() en Thonny IDE. Sigue cada cambio en vivo en l

Encendido de un LED externo con la Raspberry Pi Pico (placa de pruebas)
El siguiente paso tras el LED integrado de Pico: conectar un LED externo a la placa de pruebas y controlarlo a través del pin GP14. Con este proyecto aprenderás a utilizar cualquier pin GPIO de uso general del Pico como salida, la polaridad del LED (patilla larga = ánodo/+, patilla corta = cátodo/–) y por qué es imprescindible utilizar una resistencia limitadora de corriente (220 Ω). Si no colocas la resistencia, el LED recibirá una corriente excesiva y podría quemarse. El circuito es muy sencil

Raspberry Pi Pico Dos LEDs alternos (Flip-Flop)
El siguiente paso después del LED único en el Pico: dos LEDs parpadean alternativamente en un patrón flip-flop clásico. Dos LEDs de diferentes colores (rojo en GP14, verde en GP13) intercambian estados cada 500ms. Pin.toggle() de MicroPython hace el código corto. Base de semáforos, luces de policía.

Simulador de Semáforo Raspberry Pi Pico (3 LEDs Secuenciales)
Simulamos un semáforo real con LEDs rojo, amarillo y verde. Verde 4 seg "pase", amarillo 1,5 seg "prepárese", rojo 3 seg "detenga" y rojo+amarillo 1 seg "arranque" (patrón europeo). Aprende definición de función, lógica de máquina de estados y sincronización multi-GPIO. Circuito simple: 3 LEDs en GP11/GP12/GP13.

Raspberry Pi Pico LED Controlado por Botón (Push)
¡Primer proyecto de entrada con Pico — lectura de botón! LED se enciende mientras el botón está presionado. Aprende Pin.IN, Pin.PULL_UP y button.value(). GP14 LED, GP2 botón con PULL_UP interno. Presionado = 0, liberado = 1 — estándar.

Raspberry Pi Pico Botón Debounce: IRQ vs Software Polling
¿Una pulsación y el código cuenta 3-4? ¡Es contact bounce! Compara 2 métodos de conteo en Serial: polling RAW (captura bounce, cuenta mal) vs IRQ + software debounce (preciso). Aprende física del bounce, software debounce, Pin.irq() interrupt, IRQ_FALLING trigger, ISR handlers, seguridad de variables globales en ISR.

Raspberry Pi Pico PWM LED Fade (Efecto Respiración)
¡El LED ya no solo parpadea — respira! Con el PWM (modulación por ancho de pulso) del Raspberry Pi Pico, el brillo sube y baja lentamente. Aprende la clase machine.PWM, duty_u16() (brillo de 16 bits 0–65535), la frecuencia PWM, bucles range() y salida tipo analógica. Base para mezcla de color RGB, control de motores, servos y buzzer.

Raspberry Pi Pico LED RGB Ciclo de Colores (PWM de 3 Canales)
¡Un LED, millones de colores! Un LED RGB contiene 3 LEDs: rojo, verde y azul. Con un canal PWM del Pico para cada uno, los colores se mezclan: rojo + verde = amarillo, verde + azul = cian, los tres = blanco. El LED recorre 8 colores. Aprende múltiples canales PWM, funciones (def), mezcla RGB, conversión de 8 a 16 bits (x257) y cátodo común vs ánodo común.
Más artículos
App BlueGrays
Monta este circuito paso a paso en tu teléfono
Esquema, código y lista de piezas en una sola pantalla. Más de 200 proyectos de Arduino, ESP32 y Pico listos para montar.
Escanea con tu teléfono
Apunta la cámara al código y se abrirá la tienda de apps de tu teléfono.
o ábrela en la tienda

