Quels avantages des cartes Micropython ?

Il y a déjà tout l'écosystème des cartes Arduino et assez logiquement, lorsqu'une nouvelle carte arrive qui vient bousculer l'existant (ici en terme de prix avec la Pi Pico couplé avec la possibilité du Micropython) la question qui revient est légitimement : "Quels avantages ? " On parle ici concrètement, pas juste d'un point de vue commercial ou "mode" ou "tendance" mais bel et bien pour l'usager final.

Je rassemble ici quelques réflexions en ce sens.

Développement avec une meilleure longévité / maintenance

Typiquement, lorsque de l'on fait un développement avec Arduino, on flashe dans la carte un code Arduino qui lui-même inclut une ou plusieurs librairies, etc. Lorsqu'on vient de le faire, on est content, tout fonctionne, voilà. Mais si on reprend le même montage, la même carte 1 ou 2 ans plus tard en vue d'une remise en route ou d'une maintenance, on est face au problème suivant : le code qui est dans la carte est compilé. Donc on n'a pas / plus accès au code en question. Il faut le retrouver sur son PC, ainsi que la librairie... et puis là çà part en effet "toile d'araignée" : la version de l'Arduino a changé, la librairie utilisée n'est plus compatible, voire on ne retrouve pas le code car on a changé de PC, etc, etc... Le problème est le même si dans un fablab ou un hackerspace, quelqu'un a développé un truc sur une carte Arduino... et quelqu'un d'autre aimerait le mettre à jour.... Mais le gars a gardé le programme de son côté, il ne vient plus au fab', etc.

Bref, pas facile de maintenir dans ces conditions. On peut certes refaire, mais le temps déjà passé n'est pas rentabilisé. Et souvent les choses qui sont plus longues ou plus compliquées à faire ne sont pas faîtes...

Avec un dévelopement en Micropython, le gros, le très gros avantage est que le code lui-même est sur la carte Micropython ! Donc, si on reprend le programme pour retravailler dessus ou réutiliser sur une autre carte, etc... il suffit de se connecter par USB à la carte, de copier les codes présents sur la carte sur son ordinateur... et zou, on a les scripts ! Librairies incluses. Du coup, n'importe qui peut reprendre le développement, reflasher, etc.

En pratique, c'est franchement très très intéressant ce principe de fichiers de codes qui sont exécutés sur la carte et que l'on peut reprendre secondairement sans souci.

Une carte MicroPython est un bon entre 2 entre le microcontrôleur "pur" et un système type Raspberry Pi

Pour contrôler un dispositif, réaliser une mesure tout en ayant un monitoring, on va facilement utiliser un Pi comme système qui va communiquer avec une Arduino par exemple pour la partie "bas niveau". Mais le besoin est parfois très léger... et un système Gnu/Linux entier pour çà, c'est un peu lourd à gérer, maintenir, sans parler de la sécurité.

Un arduino, si c'est pour datalogguer, etc... il faut une ou plusieurs cartes shields associées (SD, RTC).

Avec une carte Micropython, on le bon entre-deux : on a les possibilités de gestion de fichiers en natif, voire carte SD sur certaines cartes Micropython (Pyboard) et on peut ainsi facilement faire des choses avec juste la carte Micropython mais sans les inconvénients d'un système complet type Gnu/Linux.

Possibilité de programmer la carte directement depuis un code Python

Quelque chose de très intéressant et qui ouvre la possibilité à la création d'application "intégrées" associant code microcontrôleur + code système/interface, c'est la possibilité de programmer la carte depuis un code Python. Et même d'interagir en mode interpréteur avec la carte.

De ce fait, il est possible d'écrire assez facilement soi-même ses propres interfaces Python pour communiquer / réaliser des opérations sur la carte Micropython, créer son propre IDE...

Une autre possibilité intéressante est de prévoir des applicaions intégrées en assurant la programmation de la carte Python par le code Python qui va ensuite interagir avec. On a ainsi un seul code à lancer qui gère simultanément le code µc et le code système. On peut même pousser la chose jusqu'à créer des webapps entièrement intégrées de la sorte, un seul script lançant a programmation de la carte Micropython, le lancement de l'appli Python serveur et le lancement de l'interface web dans le navigateur. Une sorte de "all-in-1" qui facilite l'utilisation par l'utilisateur final au plus simple : 1 seul double-clic et tout se lance !

Communication UART hardware directement avec le Raspberry Pi

Les cartes Micropython sont des cartes 3.3V et disposent d'un ou plusieurs modules UART "hardware" distincte de la communication "over USB" : on peut donc du coup directement réaliser une communication UART entre une Raspberry Pi et la carte Micropython.

Avec une carte Arduino UNO 5V, ce n'est pas possible sans une adaptation des niveaux de tension. Et de plus, l'UART d'une UNO est unique et est déjà utilisée pour la communication USB série.

A noter que dans le cas de la carte Pico Pi, vu son très bas prix, la carte Pi Pico vient fournir très facilement et simplement toutes les fonctions "bas niveau" pour le Raspberry Pi, via la communication UART. C'est une alliance naturelle du coup sur tous les projets mixant besoin d'un système et de fonction micro-contrôleurs.

Mesure analogique disponible en 12 bits

La mesure analogique en 3.3V / 12 bits est disponible, soit une précision de mesure de 0.8mV, ce qui est très intéressant, à comparer aux 4.8mV d'une Arduino 5V/10 bits.

Et, c'est presque idiot de le dire, mais la conversion analogique est disponible en natif, point qui est manquant sur le raspberry pi par exemple.

Auto-complétion de l'interpréteur

Une fonctionnalité très très utile, lorsque l'on utilise l'interpréteur, c'est l'auto-complétion : il suffit d'appuyer sur la touche de tabulation 2 fois de suite lorsque l'on est en train d'éditer une commande pour que les possibilités s'affichent, ce qui facilient grandement la saisie. Fonctionne avec le mode REPL dans RShell.

Apprendre MicroPython est un apprentissage à portée beaucoup plus large que le contexte microcontrôleur.

Ce qui est intéressant avec MicroPython, c'est que le langage que l'on apprend est à 80% valable également sur système "classique" : on n'apprend pour l'essentiel des choses réutilisables à l'identique sur son Raspberry Pi, sur son ordinateur. Seul un part que j'estime à 20% est spécifique au contexte micro-contrôleur du langage. Mais même cette part "spécifique" ne l'est pas tant que çà, car des librairies peu ou prou équivalentes peuvent être utilisées sur un système, notamment sur le Raspberry Pi.

Cela fonctionne aussi dans l'autre sens : si on connaît Python, alors on est très vite à l'aise en MicroPython. On connaît déjà 80% de ce langage et on a juste à "apprivoiser" les 20% qui concerne le caractère spécifique du micro-contrôleur.

Apprendre Micropython sur microcontrôleur permet d'isoler efficacement les situations de codage

L'intérêt d'un codage sur microcontrôleur avec MicroPython, c'est que cela permet d'isoler les situations de codage de problématiques inutiles, comme on pourrait les rencontrer sur un système plus "lourd". On peut s'exercer et voir dynamiquement le résultat de son code assez facilement. Cela rejoint la sensation d'un notebook Jupyter ou aussi de la saisie de commande dans l'interpréteur, mais ici à l'échelle de codes complet qui sont exécutés avec un résultat palpable immédiatement. Cela rend concret le résultat d'un codage.

Etc...