Introduction
Comme je le décris un peu dans l'interview qu'à fait Path (lien), je trouve que pour démarrer un robot 'autonome' la combinaison d'une arduino et d'un raspberry PI est une très bonne solution.
L'arduino pour connecter la majorité des capteurs et des drivers moteur, le raspberry PI pour la partie 'cerveau' et connectivité.
Comment faire alors pour programmer cet arduino, sans débrancher et rebrancher le cable USB en permanence.
C'est ce que nous allons voir dans ce tutoriel avec plusieurs méthodes, non exhaustives, pour programmer une arduino connectée à un raspberry PI, depuis son PC.
Pré-requis
Je suppose ici que l'arduino est connecté à un raspberry PI par l'un de ses ports USB.
Je suppose aussi que le raspberry PI n'est pas connecté à un écran clavier, mais est accessible par le wifi/ethernet depuis un autre PC, depuis SSH.
Ce tutoriel n'explique pas ces étapes préliminaires.
A. Comment copier des fichiers depuis son PC sur le raspberry PI
Il est souvent nécessaire de transferer des fichiers depuis votre PC vers le raspberry PI. Vous pouvez le faire à travers le protocol SSH.
Si votre PC tourne sous windows
vous pouvez utiliser winSCP (lien).
L'addresse IP et les identifiants sont ceux que vous utilisé pour SSH.
Si votre PC tourne sous linux
vous pouvez directement utilisé la commande 'scp':
Mais revenons à notre problématique d'origine, la programmation de l'arduino.
B. Comment utiliser l'IDE arduino sur le raspberry PI grace à un bureau distant.
Avantages:
Elle nécessite que le raspberry PI contienne une installation de linux avec support des applications graphiques. C'est le cas si vous avez installé une Raspian ou une Ubuntu-Mate. Ce n'est pas le cas si votre installation est une Ubuntu-serveur, dans ce cas, voir l'autre solution.
Installation d'un bureau distant.
Je propose d'utilisé NoMachine (lien)
Télécharger et installer la version correspondant à l'OS de votre PC depuis le lien.
Télécharger depuis votre PC la version DEB correspondante à votre version et installation de raspberry PI : armv6 pour Raspian , armv7 pour Ubuntu-mate sur raspberry PI 3.
Transferer le fichier DEB sur votre raspberry PI avec la méthode décrite dans la section précédente par exemple.
Après vous être connecté en SSH, lancer l'installation sur le raspberry PI :
Vous pouvez maintenant lancer NoMachine depuis votre PC, le programme va chercher les PC qui ont un serveur NoMachine sur le réseau local :
Voici ce qu'il trouve pour moi, mon PC fix and ma raspberry PI:
Double cliquer sur le raspberry PI et c'est parti, vous allez démarrer un bureau distant sur votre petite board. Les login/mot de passe sont ceux que vous utilisez pour SSH.
Astuces :
Avec le bureau distant vous pouvez maintenant installer l'IDE arduino en ouvrant un navigateur sur le site d'arduino et suivre la procédure standard d'installation.
Attention : N'oubliez pas de télécharger la version linux-ARM, c'est la seule compatible avec le raspberry PI
C. Comment programmer l'Arduino sur le raspberry PI en ligne de commande.
Avant de voir en détails les solutions possible, il faut d'abord se poser une question préliminaire.
Comment éditer les fichiers sources des programmes pour l'Arduino
Comme nous n'utilisons pas l'IDE dans cette section, il va falloir éditer les sources des programmes autrement.
Voici plusieurs solution possible :
Comment compiler les sources et les uploader sur l'arduino
Méthode simple
Une méthode simple est proposée par Path dans son tutoriel : Compilation sur rPI et Upload sur arduino directement depuis le PI en ligne de commande
Je la recommande vivement pour commencer, elle est fonctionnelle et relativement facile à mettre en oeuvre.
Méthode platformio
Je vous propose une deuxième méthode ici, plus générale puisque pouvant s'adapter à la programmation d'autres cartes et microcontrolleur uilisé dans l'embarqué.
Cette méthode s'appuie sur l'environement platformio core
Installation :
Creation d'un projet:
Pour chaque nouveau programme que vous voudrez créer pour l'arduino il faut créer un nouveau repertoire projet :
Modification des sources
Le fichier source principale devra etre 'src/main.cpp' il n'y a pas d'extension .ino ici.
Exemple pour notre blink project :
src/main.cpp:
La compilation du code se fait avec la commande:
Upload du code
Comme pour l'IDE arduino on peut compiler et uploader dans la même commande
Comme je le décris un peu dans l'interview qu'à fait Path (lien), je trouve que pour démarrer un robot 'autonome' la combinaison d'une arduino et d'un raspberry PI est une très bonne solution.
L'arduino pour connecter la majorité des capteurs et des drivers moteur, le raspberry PI pour la partie 'cerveau' et connectivité.
Comment faire alors pour programmer cet arduino, sans débrancher et rebrancher le cable USB en permanence.
C'est ce que nous allons voir dans ce tutoriel avec plusieurs méthodes, non exhaustives, pour programmer une arduino connectée à un raspberry PI, depuis son PC.
Pré-requis
Je suppose ici que l'arduino est connecté à un raspberry PI par l'un de ses ports USB.
Je suppose aussi que le raspberry PI n'est pas connecté à un écran clavier, mais est accessible par le wifi/ethernet depuis un autre PC, depuis SSH.
Ce tutoriel n'explique pas ces étapes préliminaires.
A. Comment copier des fichiers depuis son PC sur le raspberry PI
Il est souvent nécessaire de transferer des fichiers depuis votre PC vers le raspberry PI. Vous pouvez le faire à travers le protocol SSH.
Si votre PC tourne sous windows
vous pouvez utiliser winSCP (lien).
L'addresse IP et les identifiants sont ceux que vous utilisé pour SSH.
Si votre PC tourne sous linux
vous pouvez directement utilisé la commande 'scp':
scp monfichier monlogin@addressIpRaspberry:.Ces solutions sont parfaites pour transferer des fichiers d'installation, voir vos sources. Meme si pour les sources d'autres méthodes seront proposées plus loin.
Mais revenons à notre problématique d'origine, la programmation de l'arduino.
B. Comment utiliser l'IDE arduino sur le raspberry PI grace à un bureau distant.
Avantages:
- Simple, on utilise l'IDE classique pour programmer l'arduino.
- La méthode s'applique pour acceder à d'autres application graphique sur le raspberry PI
- Vous etes limité à la résolution graphique de l'OS de votre raspberry PI
- Utilisé l'IDE arduino sur le raspberry peut-être 'lent'
- Utilisé d'autres IDE pour éditer vos sources peut-être encore plus lent
- En fait ça ne marche probablement que si vous avez une raspberry PI 3.
- Il faut une installation du raspberry PI avec le support graphique
Elle nécessite que le raspberry PI contienne une installation de linux avec support des applications graphiques. C'est le cas si vous avez installé une Raspian ou une Ubuntu-Mate. Ce n'est pas le cas si votre installation est une Ubuntu-serveur, dans ce cas, voir l'autre solution.
Installation d'un bureau distant.
Je propose d'utilisé NoMachine (lien)
Télécharger et installer la version correspondant à l'OS de votre PC depuis le lien.
Télécharger depuis votre PC la version DEB correspondante à votre version et installation de raspberry PI : armv6 pour Raspian , armv7 pour Ubuntu-mate sur raspberry PI 3.
Transferer le fichier DEB sur votre raspberry PI avec la méthode décrite dans la section précédente par exemple.
Après vous être connecté en SSH, lancer l'installation sur le raspberry PI :
sudo dpkg -i nomachine_XXXXXXX_armhf.debL'installation sur le raspberry PI installe le client, mais aussi le serveur.
Vous pouvez maintenant lancer NoMachine depuis votre PC, le programme va chercher les PC qui ont un serveur NoMachine sur le réseau local :
Voici ce qu'il trouve pour moi, mon PC fix and ma raspberry PI:

Double cliquer sur le raspberry PI et c'est parti, vous allez démarrer un bureau distant sur votre petite board. Les login/mot de passe sont ceux que vous utilisez pour SSH.
Astuces :
- La résolution graphique est surement basse, pour changer cela il faut forcer le mode 'hdmi, même s'il n'y a pas d'écran physique de connecté':
Editez le fichier /boot/config.txt
Décommenter les ligne :
hdmi_force_hotplug=1
hdmi_group=1
hdmi_mode=31
Reboot - Si vous passez la souris dans le coin en haut à droite de la fenêtre vous pouvez refaire apparaitre le menu de configuration de NoMachine
Avec le bureau distant vous pouvez maintenant installer l'IDE arduino en ouvrant un navigateur sur le site d'arduino et suivre la procédure standard d'installation.
Attention : N'oubliez pas de télécharger la version linux-ARM, c'est la seule compatible avec le raspberry PI
C. Comment programmer l'Arduino sur le raspberry PI en ligne de commande.
Avant de voir en détails les solutions possible, il faut d'abord se poser une question préliminaire.
Comment éditer les fichiers sources des programmes pour l'Arduino
Comme nous n'utilisons pas l'IDE dans cette section, il va falloir éditer les sources des programmes autrement.
Voici plusieurs solution possible :
- Vous êtes un guerrier, vous éditez vos sources directement en ligne de commande, sur la raspberry PI !
Rien besoin de spéciale, un simple SSH et un édieur qui fonctionne dans le terminal comme ne/vim. - Vous éditer les fichiers sur le PC avec votre éditeur préféré, et vous les transferer sur le raspberry PI avec winscp
C'est la méthode de la section A, appliquée aux fichiers sources. - Vous êtes un programmeur consciencieux et vous voulez utiliser un gestionnaire de code source avec versioning ! Je vous le dis vous êtes sur la bonne voie.
Je vous conseille d'utiliser git et github. Voici une vidéo expliquant les principes de base : Github qu'est ce que c'est
Dans notre cas, on va avoir une version du repository sur votre PC, dans lequel vous éditez les sources.
On va aussi avoir une version du repository sur le raspberry PI.
La séquence devient alors :
Modifier les sources sur le PC
Pusher les sources sur github depuis le PC
Puller les sources depuis github sur la raspberry PI
Comment compiler les sources et les uploader sur l'arduino
Méthode simple
Une méthode simple est proposée par Path dans son tutoriel : Compilation sur rPI et Upload sur arduino directement depuis le PI en ligne de commande
Je la recommande vivement pour commencer, elle est fonctionnelle et relativement facile à mettre en oeuvre.
Méthode platformio
Je vous propose une deuxième méthode ici, plus générale puisque pouvant s'adapter à la programmation d'autres cartes et microcontrolleur uilisé dans l'embarqué.
Cette méthode s'appuie sur l'environement platformio core
Installation :
sudo pip install -U platformioVous pouvez l'installer aussi que pour l"utilisateur local, en omettant le 'sudo'
Creation d'un projet:
Pour chaque nouveau programme que vous voudrez créer pour l'arduino il faut créer un nouveau repertoire projet :
mkdir blinkProject cd blinkProject platformio init -b unoCette dernière commande initialisee le projet pour une board Arduino uno, si vous avez une autre type de board il faut trouver son nom dans la liste retournée par la commande 'platformio boards'.
Modification des sources
Le fichier source principale devra etre 'src/main.cpp' il n'y a pas d'extension .ino ici.
Exemple pour notre blink project :
src/main.cpp:
#include "Arduino.h" void setup() { pinMode(13,OUTPUT); } void loop() { digitalWrite(13,LOW); delay(500); digitalWrite(13,HIGH); delay(500); }Compilation du code
La compilation du code se fait avec la commande:
platformio runSi c'est la première compilation pour cette board la commande va télécharger toutes les librairies nécessaires.
Upload du code
Comme pour l'IDE arduino on peut compiler et uploader dans la même commande
platformio run -t uploadAprès ces manipulations de base et pour des usages plus avancés, je vous recommande d'aller voir le site de platformio, qui contient beaucoup d'explication et de documentation sur les différents usages.