Je ne sais pas vous mais moi, le premier truc auquel j’ai pensé quand j’ai reçu mon Arduino et que j’ai lancé l’IDE qui va avec, c’est qu’il fallait à tout prix que j’en trouve un autre.
L’IDE est en Java, très mal intégré au système (à moins que mon thème GTK stipule que les barres d’outils doivent être en bleu clair, je vérifie … non, l’IDE est mal intégré). Pourtant il est plutôt pratique : il suffi de cliquer sur un bouton et le code est cross compilé pour Arduino puis directement envoyé par le câble série.
Voilà le challenge : trouver un moyen de compiler et de télécharger simplement nos programmes sur nos cartes électroniques. Après avoir essayé cette excellente réécriture du tuto pour Eclipse, je me suis demandé s’il n’existait pas une solution plus simple et surtout plus courte.
Sur le wiki officiel Arduino, on peut trouver une liste d’outils alternatifs pour développer. J’ai découvert parmi eux Ino, un petit outil en ligne de commande permettant de faire tout ce que l’on veut de manière très simple. Son intégration avec Geany ne prends qu’une minute chrono.
Installation de l’outil
Plusieurs méthodes sont décrites sur le site du projet, la plus simple est selon moi d’utiliser easy_install :
~$ sudo apt-get install python-setuptools picocom arduino
~$ sudo easy_install ino
Picocom est apparemment utilisé pour la communication sur port série. D’après la doc, l’IDE Arduino officiel doit aussi être installé.
Initialisation d’un projet
Pour commencer il faut d’abord ouvrir un terminal, créer un dossier puis initialiser votre projet :
$ mkdir Projet
$ cd Projet
Projet$ ino init
Deux dossier sont créés. src/ contiendra le code source de votre sketch. Les bibliothèques de vos Shields devront toutes être décompressées au même endroit : par expérience elles devaient également être dans src/ à coté de votre .ino, mais il se trouve qu’après avoir formaté mon ordinateur, mon sketch ne compilait plus (ino ne trouvait plus les .h de mes bibliothèques alors qu’ils étaient bien là). Ça n’a remarché qu’après les avoir déplacées dans lib/. Aucune explication.
Note : Pour inclure une bibliothèque décompressez-la simplement sans la renommer, ino la trouvera en parcourant vos dossiers à la compilation.
Un fichier sketch.ino est présent dans src/, ce sera le point d’entrée de votre programme. Celui ci contient la définition des fonctions obligatoires, setup() (appelée à l’exécution du programme) et loop() (appelée juste après, à l’infini).
Configuration et intégration à Geany
Avant toute chose, pour activer la coloration syntaxique automatique allez dans « Outils / Fichiers de configuration / filetype_extensions.conf » et ajoutez *pde;*ino; soit à la fin de la ligne C soit à la fin de la ligne C++. Si vous utilisez Geany pour compiler l’un ou l’autre d’habitude, arrangez vous. C’est important car Geany gère les langages par profils, la suite ne s’appliquera qu’au profil choisi.
Geany permet de définir des commandes personnalisées pour compiler, construire et exécuter votre sketch. Il est parfaitement possible d’associer des commandes Ino à chacun de ces boutons. Ouvrez un fichier .ino et rendez vous dans le menu « Construire / Définir les commandes de construction ».
Voici ce que je vous propose :
– sur la première ligne intitulée « Compiler », inscrivez ino clean && ino build
– sur la deuxième ligne intitulée « Construire », inscrivez ino upload
– et enfin, sur l’avant dernière ligne « Exécuter » inscrivez ino serial
Dans le 2ème champ texte de chaque bouton, vous devez indiquer le répertoire de travail du projet. Inscrivez tout simplement « %d/.. », cela correspond au dossier parent du répertoire dans lequel se trouve le sketch (désigne le parent de src/). Et voilà ce tuto est terminé 😀
Descriptif d’autres commandes utiles (facultatif)
Pour compiler le programme, placez vous dans le répertoire du projet (Projet/ non pas src/)
Projet$ ino build
Les fois suivantes, certaines erreurs de compilation que vous aurez résolu pourraient continuer à vous poser problème. Pour cela :
Projet$ ino clean
Si vous n’utilisez pas un Arduino Uno, sachez que vous pouvez obtenir la liste des modèles supportés en appelant :
~$ ino list-models
Vous pourrez utiliser votre variante en précisant l’option -m
ino build -m lilypad
Et enfin pour télécharger votre programme vers votre carte :
Projet$ ino upload
Pour communiquer avec l’Arduino par le port série (baud à 9600, -b pour changer) :
~$ ino serial
Pour plus d’informations sur les arguments disponibles, tapez :
~$ ino -h
Pour plus d’informations sur un argument précis :
~$ ino argument -h
Problèmes courants :
- Si vous travaillez depuis un mauvais répertoire, vous aurez l’erreur : OSError: [Errno 2] No such file or directory: ‘src/’. Re-vérifiez que votre répertoire de travail est bien le répertoire du projet Projet/ et non pas celui des sources src/.
- Si vous avez l’erreur :
src/NomDeVotreLib/lib.cpp:25:21: fatal error: lib.h : Aucun fichier ou dossier de ce type
compilation terminated.
make: *** [.build/src/NomDeVotreLib/lib.o] Erreur 1
Make failed with code 2Déplacez vos bibliothèques dans le dossier lib/ de votre projet, au même niveau que src/.
- Si vous avez l’erreur :
Searching for stty … /bin/stty
Searching for avrdude … /usr/share/arduino/hardware/tools/avrdude
Searching for avrdude.conf … /usr/share/arduino/hardware/tools/avrdude.conf
Guessing serial port … /dev/ttyACM0
/bin/stty: /dev/ttyACM0: Permission non accordée
stty failedVous devez vous ajouter dans le groupe « dialout » puis vous reconnecter :
~$ sudo adduser login dialout
Article co-écrit avec Sébastienb.
Mise à jour : Je vous recommande vivement l’extension TreeBrowser pour Geany ! Vitale !
sudo apt-get install geany-plugin-treebrowser
Il se trouve que j’ai rencontré un problème de compilation suite à l’utilisation de la bibliothèque d’un Shield. Cela est dû au logiciel Ino. Dans l’attente que le bug rapporté soit corrigé, Sébastien a écrit un patch pour la 0.3.3.
Si vous rencontrez un problème lié à l’utilisation d’une bibliothèque pour Arduino, vérifiez que votre programme compile dans l’IDE officiel.
Si c’est le cas et que cela ne compile pas avec Ino, vous pouvez effectuer les opérations suivantes :
– téléchargez la version patchée http://influence-pc.fr/envois/ino.tar
– décompressez l’archive sur votre bureau
– ouvrez un terminal et tapez cd Bureau/ino/
– tapez ensuite sudo python setup.py install
Le bug a été rapporté ici : https://github.com/amperka/ino/issues/35
Information : J’ai contacté l’équipe de développeurs, Arduino Leonardo sera pris en charge dans les 2/3 semaines à venir.
Pourquoi utiliser un IDE ?
Mise à jour de l’article : deux nouveaux « Problèmes courants » ajoutés, modif sur les rôles de src/ et lib/.
Mise à jour : Le patch n’est visiblement plus nécessaire dans la toute dernière version de InoTool.
Super ! Merci beaucoup
C’est en remettant une #! que j’ai découvert Geany. Top.
Et puis l’IDE arduino me filait la gerbe… je suis tombé sur ton tuto qui accouplait les deux grâce à INO.
Que du bonheur maintenant… pour des projets qui n’ont pas beaucoup d’ampleur et ne nécessitent pas l’utilisation d’un gros IDE comme Eclipse.
Merci encore.
Merci pour cet excellant tuto.
Merci pour ton tuto
Bonsoir et merci pour cette découverte,
Par contre, j’ai un problème avec la commande ino init qui me renvoie le message d’erreur suivant :
Traceback (most recent call last):
File « /usr/local/bin/ino », line 5, in
pkg_resources.run_script(‘ino==0.3.6’, ‘ino’)
File « /usr/lib/python2.7/dist-packages/pkg_resources.py », line 499, in run_script
self.require(requires)[0].run_script(script_name, ns)
File « /usr/lib/python2.7/dist-packages/pkg_resources.py », line 1235, in run_script
execfile(script_filename, namespace, namespace)
File « /usr/local/lib/python2.7/dist-packages/ino-0.3.6-py2.7.egg/EGG-INFO/scripts/ino », line 6, in
main()
File « /usr/local/lib/python2.7/dist-packages/ino-0.3.6-py2.7.egg/ino/runner.py », line 52, in main
cmd.setup_arg_parser(p)
File « /usr/local/lib/python2.7/dist-packages/ino-0.3.6-py2.7.egg/ino/commands/init.py », line 35, in setup_arg_parser
description = ConfigObj(os.path.join(tdir, ‘manifest.ini’))[‘description’]
File « /usr/local/lib/python2.7/dist-packages/configobj-5.0.4-py2.7.egg/configobj.py », line 1229, in __init__
self._load(infile, configspec)
File « /usr/local/lib/python2.7/dist-packages/configobj-5.0.4-py2.7.egg/configobj.py », line 1287, in _load
content = self._handle_bom(content)
File « /usr/local/lib/python2.7/dist-packages/configobj-5.0.4-py2.7.egg/configobj.py », line 1477, in _handle_bom
if six.PY2 and isinstance(line, str):
AttributeError: ‘module’ object has no attribute ‘PY2’
Si quelqu’un a la solution, je suis preneur !
Merci d’avance