Micropython versus Circuit Python

La société Adafruit, bien connue pour ses développements de matériels, a développé une version alternative de Micropython, appelée CircuitPython. A part le fait qu'il s'agisse d'une réalisation portée par Adafruit, et que l'on peut donc du coup considérer comme ayant l'intention de favoriser leurs produits, il n'est pas évident de prime abord de voir la différence.

De ce que j'en comprends, Adafruit tente ici d'uniformiser l'utilisation de Python entre le Raspberry Pi et les cartes à Microcontrôleur. En soi l'idée est éventuellement bonne, mais je pense que Python / Micropython est déjà facile à porter de l'un à l'autre, tant MicroPython c'est avant tout du Python.

Le projet CircuitPython présente lui-même les différences avec MicroPython : https://circuitpython.readthedocs.io/en/latest/README.html#differences-from-micropython

Ce qu'en disent des usagers de Micropython :

< "Interesting. But i do not like to use another flavour of MicroPython. Circuitpython tries to have the same API on any platform including RasPi, making the interface for peripherals like I2C or SPI very bulky. Porting driver code from Circuitpython to Micropython typically results in trowing away pretty many lines of code."

Voir cette discusion : https://forum.micropython.org/viewtopic.php?f=12&t=6783&sid=e8e1a0471ab721e4c5aeda89a66e839f&start=10

Mon sentiment est le suivant :

  • Le projet MicroPython est porté/développé indépendemment de toute entité commerciale, ayant inévitablement ses intérêt propres, et à ce titre, l'expérience dans le monde du libre, montre qu'un projet indépendant est la meilleure garantie de longévité et de soutien communautaire. Donc, utiliser MicroPython est de ce point de vue le bon choix.

  • La liste des modules de CircuitPython est longue ( https://circuitpython.readthedocs.io/en/latest/shared-bindings/index.html) et lorsque l'on vient de Python, on est loin de se sentir en terrain connu. A la différence de MicroPython où l'essentiel de l'implémentation correspond aux mot-clés CPython, aux fonctions builtin, aux modules standards... auxquels s'ajoute des modules et classes simples pour l'accès au hardware. En venant de Python, on est tout de suite en terrain connu, familier et on comprend la logique des classes spécifiques.

  • Les tentatives de "simplification" sont souvent une perte de l'accès au sous-jacent de façon directe... Bien que l'ambition soit probablement noble, je me méfie de ces tentatives de "simplification"

  • Le portage de MicroPython vers différentes cartes a déjà ses petites subtibilités... et il semble que de rajouter de la complexité en faisant une version alternative de la version du langage Python lui-même n'est pas efficiente. Mieux vaut se concentrer sur l'amélioration de Micropython lui-même et participer au projet.

  • Le développement de MicroPython est efficace, et il n'y a pas de raison de vouloir faire "cavalier seul" sur le développement du code

  • Il est facile d'apporter une couche d'abstraction à la façon de programmer une carte avec MicroPython SANS CREER UNE ALTERNATIVE DU LANGAGE, mais simplement en utilisant une librairie qui crée la couche d'abastraction. C'est d'ailleurs l'ambition de notre librairie uPyduino. Mais c'est très différent d'une implémentation différente de Micropython. C'est un module Micropython qui vient ajouter l'abstraction.

  • L'arrivée de la Pi Pico change la donne et Micropython natif va être la référence sur ces cartes : il est "de facto" la version de référence du langage Micropython porté sur micro-contrôleur.

Donc, au final, CicrcuitPython apparaît comme une tentative de Adafruit de "rafler la mise" sur le portage Python sur micro-contrôleur... là où il faudrait rester au maximum peu-spécifique et communautaire, dans l'esprit du langage Python lui-même. Ce qui n'empêcherait pas de l'abastraction, mais en surcouche de MicroPython via une librairie dédiée. CircuitPython vient apporter à mon sens de la confusion.

Sortie de la Teensy 4.1 en may 2020 : https://www.pjrc.com/store/teensy41.html Supporte CicruitPyton mais pas Micropython. Signalé ici : https://forum.micropython.org/viewtopic.php?f=12&t=6783&start=20

çà ressemble terriblement à un Pi Pico... qui lui est à 4€... et supporte Micropython en natif.

Le prix aura le dernier mot dans ce contexte, et l'avantage est clairement au Pi Pico. D'ailleurs l'adoption initiale de la Pi Pico, avec plus d'un million de carte vendue, est très explicite !