28/03/2016
¿Alguna vez has querido controlar tu placa Arduino desde una Raspberry Pi (o tu computadora) usando solo Python y no el lenguaje Arduino? Aquí llega pyFirmata, una librería de Python basada en el protocolo Firmata.

- ¿Qué es pyFirmata?
- Ventajas de usar pyFirmata
- Instalación de pyFirmata
- Permisos de hardware (Linux)
- Identificación del puerto serie de Arduino
- Ejemplo básico: Control de un LED
- Ejemplo avanzado: Botón e LEDs
- Manejo de entradas analógicas
- Salida analógica (PWM)
- Consideraciones importantes
- Tabla comparativa: Arduino IDE vs pyFirmata
- Consultas habituales
¿Qué es pyFirmata?
pyFirmata es una librería de Python que facilita la comunicación entre una computadora (ya sea una Raspberry Pi o un ordenador de escritorio) y una placa Arduino. Utiliza el protocolo Firmata, un protocolo de comunicación estándar que permite controlar los pines digitales y analógicos de Arduino desde otros dispositivos.
Ventajas de usar pyFirmata
- Programación en Python: Permite programar la interacción con Arduino utilizando el lenguaje Python, que es conocido por su legibilidad y facilidad de uso.
- Control Remoto: Facilita el control de Arduino de forma remota a través de una Raspberry Pi o computadora.
- Interacción con otras bibliotecas de Python: Integra fácilmente las funcionalidades de Arduino con otras bibliotecas y frameworks de Python, lo que permite crear proyectos más complejos.
- Multiplataforma: Funciona en Windows, Linux y macOS.
Instalación de pyFirmata
La instalación de pyFirmata es sencilla gracias a pip, el gestor de paquetes de Python.
- Abre tu terminal o línea de comandos.
- Ejecuta el siguiente comando:
pip3 install pyfirmata
Esto instalará pyFirmata y sus dependencias, incluyendo pySerial, la librería necesaria para la comunicación serial.
Permisos de hardware (Linux)
En sistemas Linux, como Raspberry Pi OS, necesitarás otorgar permisos de acceso al puerto serie. Ejecuta los siguientes comandos:
sudo adduser $USER dialout- Cierra sesión y vuelve a iniciar sesión o reinicia tu sistema.
- Verifica los grupos de usuarios con:
groups. Deberías ver "dialout" en la lista.
Identificación del puerto serie de Arduino
Es crucial identificar el puerto serie al que está conectado tu Arduino. Desconecta Arduino y ejecuta:
ls /dev/tty
Conecta Arduino y vuelve a ejecutar el comando. El nuevo puerto que aparezca es el puerto serie de tu Arduino (ej: /dev/ttyACM0, /dev/ttyUSB0).
Ejemplo básico: Control de un LED
Este ejemplo muestra cómo controlar un LED conectado al pin 13 de Arduino.

#!/usr/bin/env python3import pyfirmataimport timeif __name__ == '__main__': board = pyfirmata.Arduino('COM3') # Reemplaza 'COM3' con tu puerto print("Comunicación iniciada correctamente") while True: board.digital[13].write(1) time.sleep(1) board.digital[13].write(0) time.sleep(1)Explicación del código:
import pyfirmata: Importa la librería pyFirmata.import time: Importa la librería time para pausas.board = pyfirmata.Arduino('COM3'): Crea un objeto board, especificando el puerto serie. Reemplaza 'COM3' con el puerto serie correcto de tu Arduino.board.digital[13].write(1): Enciende el LED (pin 13).board.digital[13].write(0): Apaga el LED (pin 13).time.sleep(1): Pausa de 1 segundo.
Ejemplo avanzado: Botón e LEDs
Este ejemplo muestra una interacción más compleja con un botón y cuatro LEDs.
# ... (Código similar al ejemplo del tutorial, adaptando el puerto y pines según tu configuración) ...Este código utiliza un iterador para manejar las entradas de Arduino de forma eficiente.
Manejo de entradas analógicas
pyFirmata también permite trabajar con entradas analógicas, como potenciómetros.
# ... (Código similar al ejemplo del tutorial, adaptando el puerto y pines según tu configuración) ...Recuerda activar la notificación de reportes para el pin analógico con potentiometer.enable_reporting().
Salida analógica (PWM)
Para controlar la intensidad de un LED o dispositivos similares, puedes usar la salida analógica (PWM).
# ... (Código similar al ejemplo del tutorial, adaptando el puerto y pines según tu configuración) ...Debes configurar el pin como PWM con LED.mode = pyfirmata.PWM.
Consideraciones importantes
- Velocidad: pyFirmata puede no ser la opción más rápida para aplicaciones que requieren una alta velocidad de procesamiento. Considera alternativas si la velocidad es crítica.
- Complejidad: Para proyectos complejos con muchas funcionalidades, podría ser preferible programar directamente en Arduino IDE.
- Depuración: La depuración de código puede ser un poco más desafiante al trabajar con una librería que se comunica con hardware.
Tabla comparativa: Arduino IDE vs pyFirmata
| Característica | Arduino IDE | pyFirmata |
|---|---|---|
| Lenguaje | C++ | Python |
| Velocidad | Alta | Media |
| Complejidad | Alta para proyectos complejos | Baja para proyectos simples |
| Depuración | Relativamente fácil | Más desafiante |
| Plataforma | Arduino | Multiplataforma |
En resumen: pyFirmata ofrece una manera conveniente y sencilla de controlar Arduino desde Python, especialmente para proyectos de bajo a medio nivel de complejidad. Sin embargo, para aplicaciones que exigen alta velocidad o una gran cantidad de funcionalidades, la programación directa en Arduino IDE puede ser más adecuada.
Consultas habituales
- ¿Cómo encontrar el puerto COM de Arduino? En el Administrador de Dispositivos (Windows) o a través de comandos como
ls /dev/tty(Linux/macOS). - ¿Qué pasa si recibo errores de conexión? Verifica la conexión física, el puerto serie, los permisos de hardware y la instalación correcta de pyFirmata.
- ¿pyFirmata funciona con todos los modelos de Arduino? En su mayoría sí, pero es posible que se necesiten ajustes según el modelo específico.
Si quieres conocer otros artículos parecidos a Cómo importar la librería pyfirmata para programar arduino con python puedes visitar la categoría Libros y Librerías.
