05/04/2026
En el fascinante universo de la programación de microcontroladores, MicroPython ha emergido como una herramienta poderosa y accesible. Su capacidad para llevar la simplicidad de Python a pequeños dispositivos embebidos ha democratizado el desarrollo de hardware, permitiendo a entusiastas y profesionales por igual crear proyectos complejos con una curva de aprendizaje reducida. Sin embargo, al igual que cualquier tecnología especializada, MicroPython presenta sus propias particularidades, especialmente cuando se trata de sus módulos. Entender qué son, cómo funcionan y, crucialmente, por qué a veces no se pueden importar es fundamental para cualquier desarrollador que aspire a dominar esta plataforma.

Los módulos en MicroPython no son meras bibliotecas de código; son la interfaz principal entre el software y el hardware físico del microcontrolador. Son la clave que desbloquea la interacción con pines GPIO, la comunicación serial, la gestión de la memoria y un sinfín de otras funcionalidades específicas del dispositivo. Esta especialización es precisamente lo que los diferencia de los módulos estándar de Python y lo que, en ocasiones, puede generar confusión y frustración.
¿Qué es un Módulo MicroPython?
Un módulo MicroPython es una colección de funciones, clases y variables diseñadas específicamente para operar en el entorno restringido y optimizado de un microcontrolador. A diferencia de los módulos de Python tradicional (conocido como CPython), que están pensados para sistemas operativos completos y recursos ilimitados, los módulos de MicroPython están meticulosamente diseñados para ser eficientes en memoria y rendimiento. Su propósito principal es exponer las capacidades de hardware del microcontrolador de una manera sencilla y programable.
Por ejemplo, el módulo machine es uno de los pilares de MicroPython. Proporciona acceso a funciones de bajo nivel del hardware, como el control de pines (Pin), la comunicación I2C o SPI, la temporización y la gestión de la energía. Sin este módulo, interactuar con los componentes físicos conectados al microcontrolador sería una tarea compleja y tediosa, requiriendo conocimiento profundo de los registros del chip y la programación en C/C++.
Otros módulos comunes incluyen:
utime: Para funciones relacionadas con el tiempo y los retrasos.network: Para conectividad de red (Wi-Fi, Ethernet, Bluetooth), disponible en microcontroladores con capacidades de red.uos: Para operaciones del sistema de archivos, útil para leer y escribir en la memoria flash del dispositivo.- Módulos específicos de sensores o periféricos: A menudo creados por la comunidad o fabricantes para interactuar con componentes específicos, como pantallas OLED o sensores de temperatura.
La existencia de estos módulos especializados es lo que permite que MicroPython sea tan versátil y potente en el ámbito del hardware embebido.
¿Por qué no puedo importar un Módulo MicroPython? Errores Comunes y sus Causas
Este es quizás el punto de mayor fricción para los principiantes. Es muy común intentar importar un módulo como machine o Pin en un entorno que no es el adecuado para MicroPython. La raíz del problema casi siempre reside en una de estas situaciones:
1. Intentando ejecutar código MicroPython en Python Estándar (CPython)
Este es el escenario más frecuente. Si estás ejecutando tu script de Python en una computadora personal (por ejemplo, una Raspberry Pi con su sistema operativo Linux y una instalación de Python estándar), los módulos específicos de MicroPython simplemente no existirán. El intérprete de CPython no tiene conocimiento de las funciones de hardware de un microcontrolador y, por lo tanto, no puede proporcionar acceso a módulos como machine, Pin o PWM. Recibirás un error como ModuleNotFoundError: No module named 'machine'.
Imagina que intentas usar una llave de un coche para abrir una puerta de casa. Ambas son llaves, pero están diseñadas para sistemas completamente diferentes. Lo mismo ocurre con los módulos de MicroPython y CPython.
2. Utilizando un "port" de MicroPython que no soporta el módulo deseado
MicroPython es altamente adaptable y se puede "portar" a diferentes arquitecturas y sistemas operativos. Existen "ports" para microcontroladores específicos (como ESP32, ESP8266, RP2040/Pico) y también "ports" para sistemas operativos de escritorio (como el "unix port" para Linux, macOS o Windows). Aunque el "unix port" te permite ejecutar el intérprete de MicroPython en tu computadora, no simula el hardware de un microcontrolador. Por lo tanto, mientras que módulos básicos como utime o uos podrían funcionar, los módulos que interactúan directamente con el hardware (como Pin o PWM del módulo machine) no estarán disponibles o estarán muy limitados.
El ejemplo del usuario que ejecuta ./build-standard/micropython en una Raspberry Pi 3B muestra precisamente esto. Aunque está ejecutando el intérprete de MicroPython (versión 1.22.0-preview.164.gfce8d9fd5), el "port" es para Linux (linux [GCC 8.3.0]). El comando dir(machine) revela que Pin y PWM no están disponibles, lo que confirma que, aunque el módulo machine existe en este port, sus funcionalidades de hardware específicas no lo están. Es una versión "capada" o limitada a las características que el sistema operativo subyacente puede ofrecer.
3. Módulo no instalado o incorrectamente ubicado en el microcontrolador
Aunque menos común para los módulos estándar de MicroPython (que vienen preinstalados en el firmware), si estás intentando importar un módulo de terceros o uno que has creado tú mismo, este debe estar presente en el sistema de archivos del microcontrolador (en la memoria flash) y en una ubicación que el intérprete de MicroPython pueda encontrar (normalmente en el directorio raíz o en una carpeta incluida en la ruta de búsqueda de módulos).
Soluciones y Enfoques para Superar los Problemas de Importación
Afortunadamente, existen varias estrategias para abordar estos problemas, dependiendo de tus objetivos y el hardware disponible:
1. Reescribir el código para Python estándar (CPython)
Si tu objetivo no es controlar hardware directamente, sino ejecutar lógica de negocio, procesar datos o interactuar con servicios web en una Raspberry Pi o una PC, la solución más sencilla es adaptar tu código para que funcione con Python estándar. Esto implica reemplazar las llamadas a módulos como machine con equivalentes de CPython o bibliotecas de terceros diseñadas para tu sistema operativo.
Por ejemplo, si necesitabas el módulo utime para retrasos, en CPython podrías usar el módulo time. Si tu código estaba leyendo sensores a través de una placa de expansión en la Raspberry Pi, buscarías bibliotecas de Python específicas para esa placa y sus sensores (por ejemplo, bibliotecas de Adafruit o SparkFun para Raspberry Pi).
2. Utilizar módulos de compatibilidad (cuando existan)
Aunque es menos común para MicroPython, algunas comunidades han desarrollado "shim layers" o módulos de compatibilidad que permiten que el código escrito para un entorno se ejecute en otro. El ejemplo más prominente es CircuitPython, que tiene una biblioteca llamada Adafruit_Blinka que permite ejecutar código CircuitPython (que es muy similar a MicroPython en su filosofía de hardware) en una Raspberry Pi con Python estándar. Para MicroPython puro, esta opción es menos desarrollada y requeriría la creación de tales módulos si no existen.

Esta opción es viable si la comunidad o tú mismo estás dispuesto a invertir en el desarrollo de estas capas de abstracción.
3. Usar un microcontrolador que ejecute MicroPython
Esta es, con diferencia, la solución más directa y la que se espera en la mayoría de los proyectos que utilizan MicroPython. Si tu código requiere interactuar con pines, comunicarse vía I2C/SPI o usar PWM, la forma correcta de hacerlo es desplegar el código en un microcontrolador diseñado para ejecutar MicroPython, como un ESP32, ESP8266, o un Raspberry Pi Pico.
Estos dispositivos vienen con el firmware de MicroPython preinstalado o fácilmente flasheable, y sus "ports" están optimizados para proporcionar acceso completo a los módulos de hardware. Al ejecutar tu código directamente en el Pico, el módulo machine y sus funciones como Pin o PWM estarán completamente disponibles y funcionales, ya que el intérprete de MicroPython está interactuando directamente con el hardware subyacente.
Para ello, necesitarás:
- Un microcontrolador compatible (ej. Raspberry Pi Pico).
- El firmware de MicroPython flasheado en el dispositivo.
- Una herramienta para cargar tu código (ej. Thonny IDE, rshell, o esptool).
Esta es la vía por la que la mayoría de los proyectos de electrónica basados en MicroPython están diseñados para ser seguidos.
4. Compilar MicroPython desde el código fuente para el Raspberry Pi
Como se menciona en el ejemplo, es posible compilar MicroPython para una Raspberry Pi desde el código fuente. Esto te permitirá ejecutar el intérprete de MicroPython directamente en tu Pi. Sin embargo, es crucial entender que, aunque podrás importar el módulo machine, este "port" para Linux no proporcionará todas las funcionalidades que obtendrías en un microcontrolador real. Por ejemplo, las funciones Pin o PWM que controlan los GPIOs del microcontrolador no estarán disponibles directamente a través de este port de MicroPython en la Pi, ya que el sistema operativo subyacente (Linux) ya gestiona esos recursos y MicroPython no tiene acceso directo a ellos de la misma manera que lo haría en un chip bare-metal.
Esta opción es más adecuada para desarrolladores que desean probar el propio intérprete de MicroPython o desarrollar nuevas funcionalidades para el port de Linux, pero no para interactuar con los GPIOs de la Raspberry Pi de la misma manera que lo harían en un Pico.
Tabla Comparativa de Disponibilidad de Módulos
Para clarificar las diferencias, veamos una tabla comparativa de la disponibilidad de módulos clave en distintos entornos:
| Módulo/Característica | Python Estándar (CPython en Raspberry Pi) | MicroPython "Unix Port" (en Raspberry Pi) | MicroPython en Microcontrolador (ej. Raspberry Pi Pico) |
|---|---|---|---|
machine | ❌ No disponible | ✅ Disponible (funcionalidad limitada) | ✅ Totalmente disponible |
machine.Pin (control GPIO) | ❌ No disponible | ❌ No disponible (sin acceso directo al hardware) | ✅ Totalmente disponible |
machine.PWM (modulación por ancho de pulso) | ❌ No disponible | ❌ No disponible (sin acceso directo al hardware) | ✅ Totalmente disponible |
utime (funciones de tiempo) | ✅ Disponible (módulo time) | ✅ Disponible | ✅ Disponible |
network (Wi-Fi, Ethernet) | ✅ Disponible (bibliotecas CPython) | ✅ Disponible (si la PC tiene red) | ✅ Disponible (en modelos con Wi-Fi/Ethernet) |
Acceso a memoria (mem8, mem16, mem32) | ❌ No disponible | ✅ Disponible (acceso a memoria del sistema) | ✅ Disponible (acceso a memoria del microcontrolador) |
| Propósito principal | Desarrollo de software general | Pruebas de MicroPython, desarrollo de "ports" | Control de hardware embebido, IoT |
Preguntas Frecuentes sobre Módulos MicroPython
¿Cuál es la diferencia entre un módulo MicroPython y un módulo CircuitPython?
Ambos son bifurcaciones de Python diseñadas para microcontroladores y comparten una filosofía similar de "Python en hardware". La principal diferencia radica en sus comunidades y enfoques. MicroPython es más "bare-metal" y permite mayor control sobre el hardware, a menudo con una curva de aprendizaje un poco más pronunciada. CircuitPython, desarrollado por Adafruit, se centra en la facilidad de uso y la compatibilidad entre placas, con un enfoque en la educación y prototipado rápido. Sus módulos son muy similares, pero no siempre directamente intercambiables sin modificaciones menores.
¿Puedo crear mis propios módulos en MicroPython?
¡Sí, absolutamente! Puedes escribir tus propios archivos .py y guardarlos en el microcontrolador. Estos archivos se comportarán como módulos que puedes importar desde otros scripts. Además, para un rendimiento óptimo o para encapsular funcionalidades complejas, puedes escribir módulos "nativos" en C/C++ y compilarlos como parte del firmware de MicroPython.
¿Cómo instalo módulos de terceros en mi microcontrolador MicroPython?
La instalación de módulos de terceros en MicroPython no es como un pip install en Python estándar. Generalmente, copias el archivo .py del módulo directamente a la memoria flash de tu microcontrolador usando herramientas como Thonny IDE, rshell o ampy. Algunos proyectos más grandes pueden usar una herramienta como upip (MicroPython's pip) si el módulo está disponible en un repositorio compatible, pero esto es menos común que la copia manual.
¿Es MicroPython adecuado para todos los proyectos de IoT?
MicroPython es excelente para una amplia gama de proyectos de IoT que requieren interactuar directamente con sensores, actuadores y redes, especialmente donde la velocidad de desarrollo y la facilidad de uso son prioritarias. Sin embargo, para aplicaciones que demandan un rendimiento extremo, requisitos de tiempo real muy estrictos o una gestión de recursos extremadamente precisa, lenguajes como C/C++ podrían ser más adecuados.
En resumen, la clave para entender y solucionar los problemas de importación de módulos en MicroPython reside en reconocer el entorno en el que se ejecuta el código. MicroPython está optimizado para microcontroladores, y sus módulos más potentes, como machine, están intrínsecamente ligados a las capacidades de hardware de estos pequeños pero poderosos cerebros electrónicos. Al elegir el hardware y el "port" de MicroPython adecuados para tu proyecto, y al entender las limitaciones de cada entorno, podrás aprovechar al máximo el potencial de esta increíble plataforma y llevar tus ideas desde el concepto hasta la realidad física sin frustraciones innecesarias.
Si quieres conocer otros artículos parecidos a Módulos MicroPython: Entendiendo su Esencia y Errores puedes visitar la categoría Librerías.
