Tout faire depuis un terminal

terminal.png Maintenant que je maîtrise le couple RPi / Arduino, je suis un peu frustré de ne pouvoir tout faire depuis un terminal ouvert sur le RPi.

En effet, il me faut encore disposer d'une liaison USB avec l'Arduino pour charger le code de celui-ci via l'UART. Hors si en mode développement ce n'est pas très gênant, d'autant plus que cette liaison USB alimente l'ensemble Arduino/RPi, en mode final, lorsque le matériel est dans sa boîte loin de mon PC, c'est un peu plus gênant de devoir 1: se déplacer, 2: brancher le câble USB, 3: tester et repartir. Bref, je rêve de pouvoir depuis le terminal du RPi, re-compiler le code de l'Arduino pour de petites modifications et téléverser celui-ci depuis le RPI... Hé ! Bien, j'y suis arrivé ! Merci au site Robot-Maker

RPi-Arduino-USB.png

Il fallait simplement trouver la méthode de compilation du code AVR (ATmega) à partir du fichier .ino de l'IDE ARduino.

1/ câblage Le câblage est simple, il suffit de connecter un port USB de Rpi au micro-USB de notre Arduino. Dans mon cas, comme il s'agit de ma carte de chauffage qui ne dispose pas d'adaptateur USB/UART intégré, j'utilise un adaptateur externe.

2/ programmes Il faut installer le compilateur sur notre RPI :

   $ sudo apt-get install arduino-core arduino-mk python-serial

modifier les droits de l'utilisateur "pi"

   $ sudo usermod -a -G dialout pi

créer le fichier "Makefile"

   $ nano Makefile
      ARDUINO_DIR = /usr/share/arduino
      BOARD_TAG = uno ou nano, leonardo, etc...
      ARDUINO_PORT = /dev/ttyACM0 ou /dev/ttyACM1 
      ARDUINO_LIBS = 
      USER_LIB_PATH = /home/pi/arduino/libraries/
      include /usr/share/arduino/Arduino.mk

Lancer la compilation:

   $ make

ou pour aussi lancer le téléversement:

   $ make upload

Hé hop ! le code est chargé sur l'Arduino.

Certes ce n'est pas la meilleure méthode pour développer un programme un peu complexe, mais en phase finale pour modifier quelques petites choses par ci par là...

À noter :

  1/ Le compilateur en ligne semble ne pas être aussi souple que l'IDE Arduino. La déclaration des fonctions doit se faire obligatoirement avant leur utilisation.

Je conseille donc de suivre ce schéma de programmation :

 - DÉCLARATION
     type variable=val;
     ...
 - FONCTIONS
     void MaFonctionA() {...}
     void MaFonctionB() {...}
     void MaFonctionC() {...}
     ...
 - INITIALISATION
     void setup() {...}
 - PROGRAMME PRINCIPAL
     void loop() {...}
  2/ Quant aux librairies spécifiques à notre programme, il plus simple de créer un dossier ~/arduino/libraries, donc dans notre espace de travail et de déclarer le chemin dans "Makefile" (v. ci-dessus).

Il faut alors récupérer nos librairies et les copier dans le dossier local spécifié. Par exemple :

 pi@raspberry:~/MonProjet $ ls -la ../arduino/libraries/
       total 24
    drwxr-xr-x   6 pi pi 4096 oct.  11 09:17 .
    drwxr-xr-x   3 pi pi 4096 oct.  11 09:13 ..
    drwxrwxr-x 3 pi pi 4096 oct.  11 09:17 Adafruit_DotStar
    drwxr-xr-x   3 pi pi 4096 oct.  11 09:17 AudioAnalyzer
    drwxrwxr-x 3 pi pi 4096 oct.  11 09:15 OneWire
  3/ Pour éditer votre fichier ".ino", vous pouvez aussi utiliser l'éditeur en ligne de commande "nano" (ou autre "joe").

Une bonne idée peut aussi être de monter le dossier de notre RPi en SFTP : sftp://pi@raspberry.local/home/pi J'aurai apprécier de pouvoir utiliser l'IDE Arduino, mais celui-ci ne fonctionne pas avec un lien réseau. Toutefois on peut utiliser un éditeur puissant comme BlueFish. Celui-ci ne reconnaît pas le langage de programmation, mais on peut lui indiquer manuellement : Document Langage C++ et répondre oui à la demande de mémorisation. On aura ainsi la coloration syntaxique bien pratique.