🛠 Vivre côté Linux : SSH, opkg, Python et routes Lua personnalisées
Objetivos
Tratar la Yún como un verdadero mini-servidor embebido: conectarse por SSH, gestionar paquetes con opkg (el gestor de paquetes de OpenWrt), instalar Python y crear una ruta REST personalizada en Lua servida por el demonio RPC — el mismo mecanismo que las rutas oficiales /arduino. Escribirás código que se ejecuta en el AR9331, sin tocar nunca el 32U4.
Material
- 1 Arduino Yún en línea (contraseña de root conocida)
- PC con un cliente SSH (ssh root@arduino.local)
- Red saliente para opkg (los espejos Linino/OpenWrt pueden ser lentos o haberse movido — prevé un espejo local si es necesario)
- Opcional pero recomendado: microSD formateada en ext4 para descargar el almacenamiento interno
Sesión completa
# 1) Connexion (mot de passe root par défaut : yun)
ssh root@arduino.local
# 2) Inventaire système
cat /proc/cpuinfo | head -5 # AR9331 MIPS 24Kc
df -h # ~32 Mo de flash, dont ~10 Mo utilisables !
free # 64 Mo de RAM DDR2
# 3) Gestion de paquets (OpenWrt)
opkg update
opkg list | grep python # python est gros ; python-light existe
opkg install python-light py-pycurl
# 4) Script Python côté Linux — il peut parler au Bridge via HTTP local
cat > /root/temperature.py << 'EOF'
import urllib.request, time
while True:
v = urllib.request.urlopen(
"http://localhost/data/get/pot").read.decode.strip
print("pot =", v)
time.sleep(2)
EOF
python /root/temperature.py &
# 5) Route REST personnalisée : /cgi.d... en fait via luci-rpc en Lua
# Fichier /usr/lib/lua/temperature.lua :
# module("temperature", package.seeall)
# function get
# return { valeur = 42, unite = "degC" }
# end
# Exposée par /cgi-bin/rpc.lua/temperature/get (selon la version de Linino OS).
En el lado del 32U4, nada cambia: el sketch y tus scripts Linux coexisten en el mismo Bridge y en el mismo almacén de datos /data — esa es toda la potencia de la arquitectura.
Verificación esperada
opkg -v responde, python -V muestra la versión instalada, tu script Python lee las claves /data publicadas por el sketch (localhost, sin configuración de red). La ruta Lua devuelve JSON en el navegador. Verifica el espacio: df -h antes/después de cada opkg install — esa es LA restricción de la Yún.
Errores frecuentes
- Saturar la flash interna: solo quedan ~10 MB libres; una instalación opkg exigente falla con «No space left on device». Instala en la microSD (extroot) si te sales de lo mínimo.
- Espejos opkg no encontrados: dado que la Yún está descontinuada, algunos repositorios Linino ya no responden; edita /etc/opkg/distfeeds.conf hacia un espejo accesible. >
- Matar el Bridge al experimentar: reiniciar uhttpd o luci-rpc rompe la API REST (y por tanto tus URLs /arduino) hasta el próximo reinicio — prueba primero en una ruta propia.
- Contraseñas SSH dejadas en «yun» en una red compartida: cámbialas; nunca expongas el puerto 22 directamente a Internet.
- Confundir los espacios de ejecución: el sketch se ejecuta en el 32U4 (sin Python, sin hilos), los scripts se ejecutan en el AR9331 (sin acceso directo a los pines, solo a través del Bridge) — la frontera es el puerto serie interno.
- Escribir continuamente en la flash interna: desgaste; los logs que crecen van a la microSD o se envían a syslog/journald remoto.
- Busybox: las utilidades están aligeradas (no hay bash, opciones reducidas); prueba tus scripts con sh.
Otros tutoriales para esta placa
- Premiers pas sur la Yún : Bridge, Console et LED
- Connecter la Yún au WiFi et piloter une broche depuis le navigateur
- Envoyer un capteur analogique sur le réseau : potentiomètre et Bridge REST
- runShellCommandOnLinux : faire exécuter des commandes Linux depuis le sketch
- L'API REST du Bridge en détail : /arduino, /data et routes personnalisées
- Alerte email : bouton sur la Yún et envoi via sendmail
Ejemplos de código para esta placa
clignotant-rest.inoArduinoconsole-bridge.inoArduinovaleurs-partagees.inoArduinoprocess-shell.inoArduinoserveur-json.inoArduinolecture-fichier.inoArduino