Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Programmation > Apprendre à coder > Programmation Arduino > Arduino pilotée en Python

Arduino pilotée en Python

samedi 16 août 2014, par Julien H.

Cet article nous a été inspiré par Vincent L. (alias @InfluencePC) qui l’a mis en œuvre sur son robot avec une Raspberry Pi et la bibliothèque Nanpy. Bravo et merci à lui !

Lorsqu’il s’agit de faire fonctionner une carte Arduino avec un programme autonome sur ordinateur, il y a deux écoles : développer un programme spécifique sur Arduino qui gère la communication pour traiter chaque commande de l’ordinateur, ou bien installer un code générique qui gère la communication. Par "ordinateur", on peut bien évidemment comprendre une carte embarquée équipée d’un système d’exploitation, comme une Raspberry Pi).

Les deux répondent à des besoins différents : l’avantage d’un programme spécifique est d’utiliser des consignes propres à votre usage (avance, recule, tourne, détecte pour un robot par exemple) ce qui permet d’être très réactif et de consommer moins de bande passante (un seul ordre pour déclencher un algorithme qui peut être complexe, l’Arduino utilisant les capteurs pour contrôler la commande de moteurs). A l’inverse la seconde solution intéressera ceux qui n’ont pas de problème de bande passante ni de temps de réponse, et veulent n’avoir qu’à changer le programme sur ordinateur (généralement écrit dans un langage qu’ils connaissent bien et préfèrent, alors que le C++ de l’Arduino n’est pas forcément leur tasse de café).

Nous connaissions déjà Firmata, présent de base dans les exemples à installer depuis le logiciel Arduino. Vincent nous a fait découvrir Nanpy qu’il utilise pour son second projet de robotique, et comme le langage Python est fréquemment utilisé dans nos propres robots, autant l’étudier.

 Les origines de Nanpy

Cette bibliothèque Python open source a été créée en 2012-2013 par Andrea Stagi. Elle semble donc n’être maintenue que par une seule personne via une page GitHub. Bien sûr, cette plate-forme permet des contributions extérieures, et tout le monde peut proposer une amélioration, par exemple le support de bibliothèques spécifiques.

Le modèle de Nanpy est simple mais efficace, avec une déclaration auprès du répertoire PyPi qui facilite l’installation depuis un environnement configuré pour le développement Python (via la commande pip).

 Installer Nanpy sur Arduino

Le principe est de télécharger un sketch (.ino) dans la carte Arduino à la manière d’un programme que vous auriez vous-même développé. Bien entendu le sketch est un peu plus complexe avec de nombreux fichiers .h et .cpp contenant toutes les façons de traiter les commandes que vous enverrez via la liaison série entre votre ordinateur et l’Arduino.

Vous trouverez certainement différentes façons de le faire : en ligne de commande sous Linux, ou en lançant l’interface graphique du programme IDE d’Arduino. Les deux sont bonnes, l’essentiel étant de récupérer la dernière version, par exemple via le projet nanpy-firmware. Pour ceux qui ne sont pas habitués à GitHub, il y a un lien "Download ZIP" en bas de colonne, ce qui évite de recourir au logiciel de contrôle de sources Git.

 Installer Nanpy sur ordinateur

Côté ordinateur (y compris une carte embarquée équipée d’un Linux), Nanpy se présente sous forme d’une bibliothèque pour Python. On part du principe que votre environnement est configuré pour programmer en Python. Autant utiliser le gestionnaire de paquets pip :

$ sudo pip install pyserial
$ sudo pip install nanpy

 Contrôler une Arduino dans un code Python

Pour ceux qui n’ont jamais été très fans de la syntaxe utilisée par les différents supports en Python du protocole Firmata (à base de tableaux d’objets), vous devriez apprécier la syntaxe de Nanpy :

from nanpy import SerialManager
from nanpy import Arduino as A
from nanpy import OneWire
from nanpy import Lcd
connection = SerialManager(device='/dev/ttyACM1')
a = ArduinoApi(connection=connection)
a.pinMode(13, a.OUTPUT)
a.digitalWrite(13, a.HIGH)
lcd = Lcd([7, 8, 9, 10, 11, 12], [16, 2], connection=connection)
lcd.printString("Hello World!")

Cette petite introduction devrait vous permettre d’explorer par vous-même, et surtout vous donner envie de contribuer en développant les librairies encore manquantes pour toutes sortes de composants connectés à une Arduino.

De fait, Nanpy peut devenir une solution alternative aux deux possibilités présentées en début d’article, en introduisant des API de plus en plus haut niveau pour des capteurs, des algorithmes de contrôle, etc...

Vos commentaires

  • Le 17 novembre à 10:06, par Harold En réponse à : Arduino pilotée en Python

    Bonjour.
    Dommage, les liens donnés par Vincent dans son commentaire ne semblent pas valides !

    • Le 23 novembre à 13:49, par Eric P. En réponse à : Arduino pilotée en Python

      C’est le problème d’Internet : c’est un univers vivant, ce qui implique donc naissance et mort.
      Google sera peut-être votre ami en, effectuant une rechercher reprenant les mots clé du sujet et du lien.
      Cordialement

    Répondre à ce message

  • Le 18 août 2014 à 13:58, par Vincent En réponse à : Arduino pilotée en Python

    Oh ! Je suis honoré de servir de prétexte pour parler de Nanpy ! Dire que je n’ai même pas encore écrit d’article détaillant mon projet, c’est courageux d’être allé lire le code source sur un simple tweet :)
    En effet, ce qui m’a immédiatement séduit c’était la syntaxe qui est offerte pour la partie cliente en Python. Mais ce n’est pas tout, il faut savoir aussi que le concepteur de Nanpy maintient les deux bouts de codes, Arduino comme Python, au contraire de Firmata qui est pensé comme une API uniquement depuis l’Arduino (mais offre en contre partie des implémentations créés par la communauté dans un tas de langages).
    Nanpy est le must pour qui veut absolument programmer en Python. J’ai depuis rédigé un comparatif de Firmata et de Nanpy sur cette page http://caen.labo-linux.org/blog/view/1711/atelier-n%C2%B06-faire-des-choix-techniques-pour-piloter-un-arduino-par-usb (notre projet : http://caen.labo-linux.org/blog/group/1705/all )
    Son concepteur est très accessible (j’ai reçu une réponse par mail en 48h), sympathique et il connait Firmata. Voici en quoi Nanpy s’en distingue :
    - straightforward
    - Multithreading, for async context, support multiple instance of objects
    - support additionnal libraries, complete framework to work with a slave Arduino without limitations in terms of components
    Un exemple donné sur la doc permet par exemple d’écrire indépendamment les deux lignes d’un afficheur LCD !
    Encore merci pour cet article :)

    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 formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document