Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Programmation > Apprendre à coder > Programmation Arduino > Arduino en ligne de commande

Arduino en ligne de commande

avec Inotool

lundi 3 décembre 2012, par Julien H.

Il existe plusieurs cas où l’on a besoin de programmer une carte compatible Arduino sans passer par l’environnement :

 lorsqu’on a plusieurs programmes et qu’on veut passer de l’un à l’autre rapidement
 lorsque la carte Arduino est attachée à un PC sans écran

Nous sommes dans les deux cas avec notre robot Nono : lors du développement, on a besoin d’envoyer rapidement un programme d’arrêt des moteurs, et avec la nouvelle évolution, une carte Raspberry Pi est connectée à l’Arduino par l’USB et communique en wifi avec le PC de développement.

On peut rajouter un troisième cas : ceux qui ne peuvent se passer de leur éditeur fétiche, voire d’un IDE plus complexe et plus costaud (ils ne connaissent pas encore Sublime Text qui fait de la complétion par introspection du code ouvert !).

La solution

Un développeur a créé un outil pour Linux et Mac OSX qui permet d’appeler les différents outils installés par Arduino depuis un unique programme.

Site officiel d’Ino

Installation

Le site indique comment récupérer le programme (avec l’outil de partage de sources "git", c’est le plus simple et celui qu’utilise le club Pobot également) donc nous vous préconisons son installation.

Ces commandes ont été testées avec succès sur le portable du club avec Linux Ubuntu, mais aussi sur la Raspberry Pi model B de Nono, avec Debian Wheezy (Occidentalis 1.0 pour être précis) qui permet de bénéficier des mêmes commandes de mise à jour par paquets (apt).

atelier@ubuntu:/host/POBOT/SOURCE/GitHub$ git clone git://github.com/amperka/ino.git

Puis on va se rendre dans le répertoire et lancer l’installation

atelier@ubuntu:/host/POBOT/SOURCE/GitHub$ cd ino/
atelier@ubuntu:/host/POBOT/SOURCE/GitHub/ino$ sudo make install

Le "sudo" est nécessaire pour avoir les droits d’ajouter le programme "ino" dans un endroit du système Linux qui le rendra accessible de n’importe quel répertoire.

Attention : si vous avez une erreur concernant des "modules", il s’agit d’extensions du langage Python et il faut alors les installer :

atelier@ubuntu:/host/POBOT/SOURCE/GitHub/ino$ sudo apt-get install python-setuptools
atelier@ubuntu:/host/POBOT/SOURCE/GitHub/ino$ sudo apt-get install python-jinja2

Il en va de même pour tous les autres modules manquants ou encore plus vrai pour le langage Python lui-même. Signalez-nous les autres problèmes rencontrés. Ces erreurs peuvent apparaître après l’installation, lorsque vous appelez le programme "ino".

Bien entendu pour que cela fonctionne, il faut avoir aussi Arduino d’installé !

pi@raspberrypi ~/git/Nono-Parlobot/Arduino-Nono/NonoSocle $ ino build
Searching for Board description file (boards.txt) ... FAILED
Board description file (boards.txt) not found. Searched in following places: 
  - /usr/local/share/arduino/hardware/arduino
  - /usr/share/arduino/hardware/arduino
pi@raspberrypi ~/git/Nono-Parlobot/Arduino-Nono/NonoSocle $ sudo apt-get install arduino

Utilisation

Première erreur pour ceux qui vont trop vite : se précipiter dans un de leurs projets du sketchbook et lancer "ino build" ! S’il y a une erreur, c’est normal car Ino nécessite une préparation du répertoire de travail avec un sous-répertoire "src" et un sous-répertoire "lib".

Il faut donc modifier votre projet ou initialiser un nouveau répertoire :

atelier@ubuntu:~/DevNono/Arduino-Nono$ cd NonoManual/
atelier@ubuntu:~/DevNono/Arduino-Nono/NonoManual$ ino init -t blink
atelier@ubuntu:~/DevNono/Arduino-Nono/NonoManual$ ls
lib  src
atelier@ubuntu:~/DevNono/Arduino-Nono/NonoManual$ cd src
atelier@ubuntu:~/DevNono/Arduino-Nono/NonoManual/src$ ls
sketch.ino

Comme vous le constatez, il suffit de créer un répertoire build et un répertoire src où vous placerez vos fichiers (.ino, .cpp, .h).

Ensuite, deux fonctions suffisent : "ino build" et "ino upload".

atelier@ubuntu:~/DevNono/Arduino-Nono/NonoSocle$ ino build
src/NonoSocle.ino
Scanning dependencies of src
src/NonoSocle.cpp
Linking firmware.elf
Converting to firmware.hex
atelier@ubuntu:~/DevNono/Arduino-Nono/NonoSocle$ ino upload
Guessing serial port ... /dev/ttyACM0

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e950f
avrdude: reading input file ".build/uno/firmware.hex"
avrdude: writing flash (986 bytes):

Writing | ################################################## | 100% 0.18s

avrdude: 986 bytes of flash written
avrdude: verifying flash memory against .build/uno/firmware.hex:
avrdude: load data flash data from input file .build/uno/firmware.hex:
avrdude: input file .build/uno/firmware.hex contains 986 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.14s

avrdude: verifying ...
avrdude: 986 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

On reconnaît notre copain "avrdude" qui est devenu un chargeur incontournable pour envoyer des fichiers sur micro-contrôleur AVR. Rien de magique, vous aurez remarqué un répertoire "avr-gcc" lors de l’installation de l’environnement Arduino.

La première fois que vous compilez votre projet, ou bien après avoir nettoyé le projet avec "ino clean", la compilation est longue. Ce n’est plus le cas pour les fois suivantes, ce qui est bien différent du logiciel IDE standard qui pouvait lancer de longues compilations à chaque fois que vous vouliez vérifier qu’une erreur de syntaxe n’était pas apparue.

D’ailleurs testons ce qui se passe dans ce cas :

atelier@ubuntu:~/DevNono/Arduino-Nono/NonoSocle$ ino build
src/NonoSocle.ino
Scanning dependencies of src
src/NonoSocle.cpp
src/NonoSocle.ino: In function ‘void loop()’:
src/NonoSocle.ino:20:4: error: expected ‘;’ before ‘delay’
make: *** [.build/uno/src/NonoSocle.o] Erreur 1
Make failed with code 2

C’est bien le même type de message avec autant de détail.

Autres cartes

Que faire si vous n’utilisez pas une Arduino Uno, mais plutôt une Arduino Mega ou bien une DFRDuino Roméo ? Il faut préciser le modèle avec l’option "-m" (comme m...odèle) et en précisant lequel parmi la liste que l’on peut consulter (si jamais vous installez une version plus récente.

atelier@ubuntu:/host/POBOT/$ ino list-models
         uno: [DEFAULT] Arduino Uno
   atmega328: Arduino Duemilanove w/ ATmega328
   diecimila: Arduino Diecimila or Duemilanove w/ ATmega168
     nano328: Arduino Nano w/ ATmega328
        nano: Arduino Nano w/ ATmega168
    mega2560: Arduino Mega 2560 or Mega ADK
        mega: Arduino Mega (ATmega1280)
     mini328: Arduino Mini w/ ATmega328
        mini: Arduino Mini w/ ATmega168
    ethernet: Arduino Ethernet
         fio: Arduino Fio
       bt328: Arduino BT w/ ATmega328
          bt: Arduino BT w/ ATmega168
  lilypad328: LilyPad Arduino w/ ATmega328
     lilypad: LilyPad Arduino w/ ATmega168
    pro5v328: Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328
       pro5v: Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega168
      pro328: Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega328
         pro: Arduino Pro or Pro Mini (3.3V, 8 MHz) w/ ATmega168
   atmega168: Arduino NG or older w/ ATmega168
     atmega8: Arduino NG or older w/ ATmega8

atelier@ubuntu:/host/POBOT/$ ino build -m atmega328

atelier@ubuntu:/host/POBOT/$ ino upload -m atmega328

Ports USB

Et si vous devez changer le port parce que celui détecté automatiquement n’est pas le bon, c’est l’option "-p" qui fonctionnera :

atelier@ubuntu:/host/POBOT/$ ino upload -m atmega328 -p /dev/ttyACM1

Console série

Si vous voulez ouvrir un terminal avec votre Arduino, il faudra installer "picocom". Recourir à "ino" permet de bénéficier de la détection automatique du port série.

atelier@ubuntu:~/DevNono$ sudo apt-get install picocom
atelier@ubuntu:~/DevNono$ ino serial
Searching for Serial monitor (picocom) ... /usr/bin/picocom
Guessing serial port ... /dev/ttyACM0
picocom v1.4

port is        : /dev/ttyACM0
flowcontrol    : none
baudrate is    : 9600
parity is      : none
databits are   : 8
escape is      : C-a
noinit is      : no
noreset is     : no
nolock is      : yes
send_cmd is    : ascii_xfr -s -v -l10
receive_cmd is : rz -vv

Terminal ready

A vous de jouer !

Vos commentaires

  • Le 3 décembre 2012 à 21:37, par greg (baba) En réponse à : Arduino en ligne de commande

    Hello
    Tres bonne article.
    On peut avoir un ordre d idee sur les temps qu il faut pour bluid/install le programme .ino apres git puis apres le temps qu il faut pour compiler et charger l arduino

    • Le 4 décembre 2012 à 15:31, par Julien H. En réponse à : Arduino en ligne de commande

      Merci.

      C’est long : près de 30 secondes pour compiler ! Par contre c’est aussi rapide que sur le laptop pour charger dans l’Arduino.

      Je suis en train de voir une solution pour utiliser "ser2net" sur la Raspberry Pi afin d’offrir un accès au port série de l’Arduino pour la programmation depuis n’importe quel PC connecté en Wifi, tout en gardant la liaison pour nos programmes.

      Je crois que Loïc faisait quelque chose de similaire pour son Arduino IDE.

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.