🛠 Vivre côté Linux : SSH, opkg, Python et routes Lua personnalisées
Objectifs
Traiter la Yún comme un vrai mini-serveur embarqué : se connecter en SSH, gérer les paquets avec opkg (le gestionnaire de paquets d'OpenWrt), installer Python, et créer une route REST personnalisée en Lua servie par le démon RPC — le même mécanisme que les routes /arduino officielles. Vous écrirez du code qui tourne sur l'AR9331, sans jamais toucher au 32U4.
Matériel
- 1 Arduino Yún en ligne (mot de passe root connu)
- PC avec un client SSH (ssh root@arduino.local)
- Réseau sortant pour opkg (les miroirs Linino/OpenWrt peuvent être lents ou déplacés — prévoyez un miroir local si besoin)
- Optionnel mais recommandé : microSD formatée ext4 pour décharger le stockage interne
Session complète
# 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, unité = "degC" }
# end
# Exposée par /cgi-bin/rpc.lua/temperature/get (selon la version de Linino OS).
Côté 32U4, rien ne change : le sketch et vos scripts Linux cohabitent sur le même Bridge et le même data store /data — c'est toute la puissance de l'architecture.
Vérification attendue
opkg -v répond, python -V affiche la version installée, votre script Python lit les clés /data publiées par le sketch (localhost, aucune config réseau). La route Lua renvoie du JSON dans le navigateur. Vérifiez l'espace : df -h avant/après chaque opkg install — c'est LA contrainte de la Yún.
Erreurs fréquentes
- Saturer la flash interne : ~10 Mo libres seulement ; un opkg install gourmand échoue avec « No space left on device ». Installez sur la microSD (extroot) si vous sortez du minimal.
- Miroirs opkg introuvables : la Yún étant discontinued, certains dépôts Linino ne répondent plus ; éditez /etc/opkg/distfeeds.conf vers un miroir accessible. >
- Tuer le Bridge en expérimentant : redémarrer uhttpd ou luci-rpc casse l'API REST (et donc vos URLs /arduino) jusqu'au prochain redémarrage — testez d'abord sur une route à vous.
- Mots de passe SSH laissés à « yun » sur un réseau partagé : changez-les ; n'exposez jamais le 22 en direct sur Internet.
- Confondre les espaces d'exécution : le sketch tourne sur le 32U4 (pas de Python, pas de threads), les scripts tournent sur l'AR9331 (pas d'accès direct aux broches, seulement via Bridge) — la frontière est le port série interne.
- Écrire en continu sur la flash interne : usure ; les logs qui grossissent vont sur la microSD ou partent vers syslog/journald distant.
- Busybox : les utilitaires sont allégés (pas de bash, options réduites) ; testez vos scripts avec sh.
Autres tutoriels pour cette carte
- 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
Exemples de code pour cette carte
clignotant-rest.inoArduinoconsole-bridge.inoArduinovaleurs-partagees.inoArduinoprocess-shell.inoArduinoserveur-json.inoArduinolecture-fichier.inoArduino