Aller au contenu


Information tutoriel

  • Ajouté le: juin 20 2017 09:54
  • Date Updated: juin 21 2017 08:17
  • Lectures: 3305
 


* * * * *
0 Notes

Comment programmer une Arduino connecte en USB a un raspberry PI, depuis son PC.

Ce tutoriel explique différentes méthodes pour programmer une carte Arduino qui est connecté en USB à un raspberry PI, le raspberry étant lui-même étant lui-même accédé à distance depuis un PC (fixe ou portable).

Posté par Bobox on juin 20 2017 09:54
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':
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
Inconvénients:
  • 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
C'est la solution qui je pense nécessite le moins d'apprentissage, parce qu'elle utilise l'habituel IDE arduino.
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.deb
L'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:
Screenshot from 2017-06-19 22-10-24.png

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
Programmation de l'arduino
 
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 platformio
Vous 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 uno
Cette 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 run
Si 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 upload
Aprè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.