Pour comprendre

Le principe général est le suivant :

  • on connecte la carte avec Micropython sur le port USB : un port série lui est attribué : /dev/ttyACM0 par exemple sous Gnu/Linux
  • la carte va alors apparaître sur le système comme un disque : on voit les fichiers présents dans la flash
  • on va alors pouvoir :
    • soit lancer le mode interpréteur et interagir directement avec la carte : TOP pour tester !
    • soit écrire des codes (directement sur la flash ou même sur le pc) et les exécuter dans la foulée qui seront stockés soit en RAM, soit sur carte SD
    • soit pouvoir faire exécuter les codes au démarrage

Le langage Python est un langage dit de "haut niveau" et dispose de plusieurs outils de codage particulièrement puissant pour coder rapidement des choses qui seraient plus compliquées à faire dans d'autres langage. Donc, en soi, le langage Python est très séduisant et personnellement, je l'utilise depuis plusieurs années déjà pour mes codages desktop et mini-pc. Micropython porte le langage python sur microcontrôleur : il est donc possible de coder en Python le microcontrôleur et de bénéficier de toute la puissance de ce langage sur une simple petite carte électronique.

Ce faisant, passer à micropython, c'est également bénéficier d'un microcontrôleur plus puissant qu'avec Arduino : on dispose ici de 32bits@168Mhz (Pyboard) contre 8bits@16Mhz(Arduino UNO, Mega). De nombreuses fonctionnalités non-disponibles sur les cartes Arduino sont par ailleurs ici disponibles (conversion numérique-analogique (permettant de faire un générateur de fonction par exemple), compteurs pour encodeurs rotatifs, carte SD intégrée, RTC intégré, etc. ) Le prix et la mise en oeuvre sont par ailleurs en tout point comparables.

En utilisant Micropython sur un microcontrôleur, on apprend un langage très polyvalent : le même langage permettra de coder également sur mini-pc (Raspberry Pi and co) ou sur poste fixe (aussi bien sous Gnu/Linux que Mac ou Windows). Python est un langage qui dispose de très nombreuses librairies permettant d'être "multi-usage" : interfaces graphiques, réseau, données, traitement d'image, sons, librairies mathématiques, astronomiques, protocoles divers (XML, HTML, NMEA, etc.), manipulation de fichier 3D ou 2D, etc. A peu près tout est possible en Python !

A l'inverse, si on connaît déjà Python, on retrouve tout ce qu'on aime côté micro-contrôleur.

Micropython est d'ors et déjà disponibles sur plusieurs cartes qui permettent la communication sans fil selon plusieurs protocoles : Wifi, bluetooth, sigfox, etc. Micropython permet donc de bénéficier de la puissance de Python pour mettre en oeuvre simplement des applications connectées embarquées ou même des serveurs embarqués.

Imaginez que vous soyez en train de développer un calcul de trajectoire ou que vous vouliez tester un bout de code Python un peu complexe ou "tordu" : le fait de coder en Python permet de réaliser le test sur son desktop dans l'interpréteur classique, tel que IPython, de faire quelques essais de validation, de vérifier le résultat obtenu et même d'afficher des graphiques de validation le cas échéant. Une fois le code validé, un simple copier/coller permet de l'utiliser sur le microcontrôleur avec micropython.

Python est un langage très utilisé et qui dispose d'une très grosse communauté d'utilisateurs, d'une section très active sur Stackoverflow (site sépcialisé de codeurs avec plus de 50 millions de membres, des réponses classées par niveau de pertinence, etc.)... et par conséquent, on trouve très vite et très rapidement les solutions aux divers problèmes de codage "pur Python" rencontrés. Micropython, c'est avant tout du Python, et donc tous les "trucs et astuces" du langage Python (et ils sont nombreux) sont valables pour utilisation sur le microcontrôleur !

Les outils d'apprentissage du Python sont très nombreux et on met le pied dans un environnement de ressources disponibles très riche de ce point de vue.

En apprenant Python, on n'apprend pas un langage "pour faire mumuse"... C'est un langage très puissant, très polyvalent, de niveau professionnel et sur lequel de nombreuses applications de qualité sont basées. C'est un langage moderne qui simplifie la syntaxe tout en rendant le code plus efficace. Bref, un investissement "rentable", notamment pour de jeunes codeurs qui auront ainsi les bases pour aller très très loin avec ce langage à peu près sans limites.

Micropython est un portage du langage Python sur microcontrôleur et à ce titre, en plus du langage Python lui-même, micropython expose les éléments hardware (broches GPIO, mesures analogiques, PWM, timer, etc.) via des fonctions micropython dédiées. L'ensemble des fonctions fournies est très complet et pourra le cas échéant sembler "complexe" comparativement à une utilisation de type "arduino".

C'est pourquoi j'ai porté la librairie Pyduino que j'avais écrite en 2013 (portage des instructions Arduino en Python sur mini-pc) en micropython. Cette version de Pyduino s'appelle upyduino (toutes les libs pour micropython sont préfixées d'un u) et s'utilise ici par simple copier/coller d'un fichier dans la flash de la carte utilisée : une fois fait il suffit de l'importer dans son code pour exposer les fonctions "Arduino like" dans le code Python.

Il est donc possible, de cette façon, d'écrire des codes Python utilisant des fonctions "à la arduino" sur les cartes micropython. Cela permet de garder les "réflexes" déjà acquis avec Arduino et de transposer plutôt facilement des codes d'une plateforme vers l'autre.

Ce faisant, upyduino n'est qu'une simple ré-écriture des fonctions Arduino avec les instructions micropython : ainsi upyduino n'est qu'un code micropython et par conséquent, micropython reste directement et totalement accessible depuis un code qui utilise upyduino. De plus, upyduino ne fait que 10-15ko et donc n'impute quasiment pas les ressources disponibles sur la carte micropython. Enfin, upyduino ne concerne que les fonctions "dédiées microcontrôleur" et n'impacte et ne modifie en rien le langage Python lui-même. En clair, "on a le beurre et l'argent du beurre" !

Sur ce site, vous trouverez une section Micropython qui exposera les fonctions natives micropython et une section upyduino qui exposera l'utilisation de upyduino.

En pratique, je vous conseille de débuter avec upyduino pour ensuite approfondir au besoin les fonctions natives micropython.

Pourquoi vouloir conserver les fonctions "Arduino-like" (=Pyduino) en Python ? Les fonctions du langage micropython ne suffisent-elles pas ?

Soyons clair, tout ce que fait Pyduino repose sur micropython, donc micropython sait le faire.

Par contre :

  • les instructions Arduino-like ne concernent que la partie "micro-contrôleur" (accès GPIO, fonctions hardware, etc.) et préservent complètement par ailleurs les atouts du langage Python, véritable plus-value de micropython. Mais Arduino a apporté une couche d'abstraction vis à vis du matériel qui a fait tout son succès et il est très tentant de garder cette abstraction. Ainsi, les broches au lieu de s'appeler X1, Y17 ou G21 sont simplement numérotées de 0 à xx selon la carte : simple !

  • les instructions Arduino-like sont simples et c'est ce que l'on souhaite en pratique. Ainsi, lire une broche analogique se résume à analogRead(broche) là où en micropython il faut caster une broche en ADC avant de réaliser une mesure. De la même façon, la génération d'une onde PWM se fait avec simplement analogWrite() là où en micropython il faut configurer un timer, un channel, une fréquence, et associer le tout à une broche.

  • si on vient de l'Arduino, on a pris des réflexes de codage que l'on peut transposer facilement : on est vite opérationnel. De plus, les utilisateurs Arduino sont très nombreux et une nouvelle plateforme ne peut pas faire l'impasse sur cette communauté. Les codes existants sont par ailleurs nombreux et donc source d'inspiration assez simples à transposer en Pyduino.

  • les cartes et autres shields Arduino sont nombreux, permettant simplement d'utiliser des capteurs, moteurs, etc... et le plus court chemin vers l'utilisation de ce matériel existant est la transposition similaire des noms de fonctions, de broches, etc.

Pour dire les choses simplement, avec Pyduino, on a le meilleur des 2 mondes : la puissance du langage Python, la simplicité de l'Arduino pour la partie microcontrôleur.

S'installer pour utiliser micropython, c'est très simple : vous avez besoin d'une carte tournant sous micropython, d'un poste fixe, d'un éditeur de texte à coloration syntaxique.

Prêt ? C'est parti...