Alternative à l’IDE Arduino : découvrez Ino + Geany

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 en lançant build et upload. Exemple :

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 2

    Dé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 failed

    Vous devez vous ajouter dans le groupe « dialout » puis vous reconnecter :

    ~$ sudo adduser login dialout

Article co-écrit avec Sébastienb.

8 commentaires sur “Alternative à l’IDE Arduino : découvrez Ino + Geany

  1. Mise à jour : Je vous recommande vivement l’extension TreeBrowser pour Geany ! Vitale !

    Geany TreeBrowser

    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.

  2. 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.

  3. 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

L'espace de discussion de cet article est désormais fermé.