¡Claro que sí! Usar Python con un Arduino Yún es una de sus características más potentes. La idea principal es que el procesador ARM del Yún (el mismo que en un Raspberry Pi) corre un sistema operativo Linux (Linino OS) sobre el cual puedes ejecutar scripts de Python, mientras que el microcontrolador ATmega32u4 (el mismo que en un Arduino Uno) se encarga de leer sensores, controlar motores, etc.

La comunicación entre ambos lados (el sketch de Arduino y el script de Python) se realiza a través del puente de comunicación (Bridge), que básicamente es un demonio en el Linux del Yún que permite que el lado del Arduino envíe y reciba datos a través de una "consola" virtual.
Aquí tienes una guía completa, desde los conceptos básicos hasta un ejemplo práctico.
Conceptos Clave: El Puente (Bridge)
El Puente es el componente que hace todo posible. Funciona de la siguiente manera:
- Lado del Arduino (Sketch): En lugar de usar
Serial.print()para enviar datos a tu computadora, usas la claseProcesspara ejecutar un comando en el Linux del Yún. - Comando del Puente: El comando más común es
python. Tu sketch de Arduino ejecutapython /mnt/sda1/mi_script.py(o la ruta a tu script). - Lado de Linux (Python): El sistema operativo ejecuta tu script de Python. Este script puede leer los datos que le pasa el sketch de Arduino a través de
stdin(entrada estándar) y puede escribir respuestas que el sketch de Arduino leerá desdestdout(salida estándar).
Ventaja: Puedes usar la potencia de las librerías de Python para tareas complejas (análisis de datos, peticiones a una API, procesamiento de texto, etc.) mientras el Arduino se encarga de la interacción con el hardware de bajo nivel.

Requisitos Previos
- Arduino Yún: Claro.
- Cuenta SSH: Necesitas acceder al Linux del Yún a través de SSH para instalar Python y transferir tus scripts.
- La dirección por defecto es
arduino.localen macOS/Linux o\\arduino.localen Windows. - El usuario es
rooty la contraseña esarduino.
- La dirección por defecto es
- Python en el Yún: El Yún ya viene con Python instalado, pero es una versión antigua. Es una buena práctica actualizarlo.
- Conéctate por SSH y ejecuta:
opkg update opkg install python3
- Ahora tendrás
python3disponible, que es la versión moderna de Python.
- Conéctate por SSH y ejecuta:
Flujo de Trabajo Típico
- Escribe el Sketch de Arduino: El sketch leerá un sensor y usará la clase
Processpara llamar a un script de Python, pasándole los datos como argumentos o a través destdin. - Transfiere el Sketch: Carga el sketch en tu Arduino Yún desde el IDE de Arduino.
- Escribe el Script de Python: Crea un archivo de Python en tu computadora.
- Transfiere el Script de Python: Usa
scp(Secure Copy) o el gestor de archivos del IDE de Arduino para copiar tu script a una carpeta del Yún (por ejemplo,/mnt/sda1/si tienes un USB conectado, o/home/root/). - Ejecuta y Depura: Conecta por SSH para ver los resultados, reiniciar el script si es necesario, o depurar errores.
Ejemplo Práctico: Sensor de Temperatura DHT11
Vamos a crear un sistema donde el Arduino Yún lee un sensor de temperatura DHT11 y envía los datos a un script de Python. El script de Python los formateará y los mostrará en la consola.
Paso 1: Conexiones del Hardware
Conecta el sensor DHT11 a tu Yún:
- VCC -> 5V
- GND -> GND
- DATA -> Pin Digital 2
Paso 2: El Sketch de Arduino (dht_arduino_bridge.ino)
Este sketch lee el sensor y ejecuta un script de Python llamado process_dht.py.
#include <Bridge.h>
#include <Process.h>
#include <DHT.h>
// Definir el pin y el tipo de sensor
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
// Inicializar el Puente. ¡Es crucial!
Bridge.begin();
Serial.begin(9600);
// Esperar a que el Puente esté listo
while (!Serial);
Serial.println("Puente iniciado. Listo para leer el sensor.");
dht.begin();
}
void loop() {
// Leer datos del sensor
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Comprobar si la lectura fue exitosa
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Error al leer del sensor DHT!");
return;
}
// Calcular el índice de calor (Heat Index)
float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
// Crear un comando para ejecutar el script de Python
Process pythonProcess;
// Formateamos los datos como argumentos para el script de Python
// El comando será: python3 /mnt/sda1/process_dht.py 25.50 45.20
String command = "python3 /mnt/sda1/process_dht.py " + String(temperature) + " " + String(humidity);
// Iniciar el proceso
pythonProcess.runShellCommand(command);
// Esperar a que el proceso termine
while (pythonProcess.running());
// Opcional: Leer cualquier salida del script de Python
while (pythonProcess.available() > 0) {
char c = pythonProcess.read();
Serial.write(c);
}
// Esperar 10 segundos antes de la próxima lectura
delay(10000);
}
Paso 3: El Script de Python (process_dht.py)
Este script se ejecutará en el Linux del Yún. Recibirá los datos como argumentos de la línea de comandos.

#!/usr/bin/env python3
import sys
import time
def process_data(temp_str, hum_str):
"""
Procesa los datos recibidos y los imprime de forma legible.
"""
try:
temperature = float(temp_str)
humidity = float(hum_str)
print("--------------------------------------------------")
print(f"Datos recibidos del Arduino a las {time.ctime()}")
print(f"Temperatura: {temperature:.2f} °C")
print(f"Humedad: {humidity:.2f} %")
print("--------------------------------------------------")
print() # Línea en blanco para separar lecturas
except ValueError:
print("Error: No se pudieron convertir los datos a números.")
print(f"Recibido: Temp='{temp_str}', Hum='{hum_str}'")
if __name__ == "__main__":
# sys.argv es una lista con los argumentos de la línea de comandos.
# sys.argv[0] es el nombre del script en sí.
# sys.argv[1] es el primer argumento, sys.argv[2] el segundo, etc.
if len(sys.argv) == 3:
process_data(sys.argv[1], sys.argv[2])
else:
print("Uso incorrecto. Se esperaban 2 argumentos.")
print("Ejemplo: python3 process_dht.py 25.50 45.20")
Paso 4: Transferencia y Ejecución
-
Carga el Sketch: Abre el IDE de Arduino, pega el código de
dht_arduino_bridge.ino, conécta tu Yún y haz clic en "Subir". -
Transfiere el Script Python:
- Método A (SCP - Recomendado): Abre una terminal en tu computadora (no en el Yún).
# Asegúrate de tener el script process_dht.py en la misma carpeta scp process_dht.py root@arduino.local:/mnt/sda1/
(Si no tienes una partición USB, usa
/home/root/en lugar de/mnt/sda1/). - Método B (IDE de Arduino): Ve a
Herramientas > Administrar Placas > Añadir URL de Placa...y añadehttp://arduino.esp8266.com/stable/package_esp8266com_index.json. Luego, enHerramientas > Placa, seleccionaArduino Yún. Verás una opción paraCargar a través de la Redque te permite transferir archivos.
- Método A (SCP - Recomendado): Abre una terminal en tu computadora (no en el Yún).
-
Haz el Script Ejecutable: Conéctate por SSH al Yún:
ssh root@arduino.local
Ahora, dale permisos de ejecución a tu script:
chmod +x /mnt/sda1/process_dht.py
-
Reinicia el Yún: A veces es necesario reiniciar para que todo funcione correctamente.
reboot
-
Observa los Resultados: Después de que el Yún se reinicie, conéctate por SSH de nuevo y abre el monitor serie del Yún (o simplemente espera, ya que el script se ejecuta continuamente).
# Conéctate por SSH ssh root@arduino.local # El script de Python se ejecutará cada 10 segundos llamado por el sketch de Arduino. # Verás la salida formateada en tu terminal SSH.
Deberías ver una salida similar a esta cada 10 segundos:
-------------------------------------------------- Datos recibidos del Arduino a Wed Oct 26 10:30:00 2025 Temperatura: 25.50 °C Humedad: 45.20 % --------------------------------------------------
Alternativa: Comunicación a Través de stdin/stdout
En lugar de pasar argumentos, puedes enviar datos a través de stdin. Esto es útil para flujos de datos más continuos.
Sketch de Arduino Modificado:
// ... (setup igual) ...
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
if (isnan(temperature) || isnan(humidity)) {
return;
}
Process pythonProcess;
pythonProcess.begin("python3");
pythonProcess.addParameter("/mnt/sda1/process_dht_stdin.py");
// Enviar los datos a stdin del script de Python
pythonProcess.println(String(temperature) + "," + String(humidity));
pythonProcess.run(); // run() en lugar de runShellCommand()
while (pythonProcess.available() > 0) {
Serial.write(pythonProcess.read());
}
delay(10000);
}
Script de Python Modificado (process_dht_stdin.py):
#!/usr/bin/env python3
import sys
import time
def process_data(data_str):
try:
# Los datos vienen como "temperatura,humedad"
temp_str, hum_str = data_str.strip().split(',')
temperature = float(temp_str)
humidity = float(hum_str)
print(f"Datos a las {time.ctime()}: Temp={temperature:.2f}°C, Hum={humidity:.2f}%")
except (ValueError, IndexError) as e:
print(f"Error procesando datos: {e}. Recibido: '{data_str.strip()}'")
if __name__ == "__main__":
# sys.stdin es un flujo de entrada. Podemos leer línea por línea.
# En este caso, el sketch solo escribe una línea por ciclo.
for line in sys.stdin:
process_data(line)
Posibles Problemas y Soluciones
- Error
python: command not found: Asegúrate de que Python esté instalado correctamente (python3 --version). Revisa la ruta a tu script en el sketch de Arduino. - El script no se ejecuta: Asegúrate de haber dado permisos de ejecución con
chmod +x /ruta/a/tu/script.py. - El Puente no está listo: Asegúrate de llamar a
Bridge.begin()en elsetup()y de incluir#include <Bridge.h>. A veces, un pequeñodelay(1000)después deBridge.begin()ayuda. - Problemas de permisos de escritura: Si intentas guardar datos en un archivo, asegúrate de que el usuario
roottenga permisos sobre ese directorio. Usar/mnt/sda1/(un USB) suele ser más fácil que/home/root/.
Ideas para Proyectos Más Avanzados
- Servidor Web Simple: Usa el
BridgeServeren el sketch de Arduino para que el script de Python responda a peticiones HTTP. - Control Remoto: El script de Python puede leer un botón en una página web y enviar una señal de vuelta al Arduino para encender un LED.
- Registro de Datos (Data Logging): El script de Python puede escribir los datos del sensor en un archivo CSV en una tarjeta SD o incluso en una base de datos en la nube.
- Notificaciones: El script de Python puede usar librerías como
requestspara enviar los datos a un servicio como IFTTT, Telegram o Slack.
Espero que esta guía detallada te sea de gran ayuda para empezar a programar tu Arduino Yún con Python. ¡Es una combinación increíblemente versátil
