Micropython, un python allégé ?

L'autre jour quelqu'un me faisait la remarque que Micropython était un python allégé... sous entendu "pas très intéressant au final". Ceci m'incite à faire quelques remarques à ce sujet.

Avant tout, sur Micropython.fr, nous rassemblons une triple expérience dans la durée qui nous permet de correctement appréhender la situation du petit monde des langages micro-contrôleurs, notamment dans un usage DIY :

  • une excellente connaissance d'Arduino et de ses évolutions, depuis 2010,
  • une expérience de codage en Python sur système Gnu/Linux depuis 2012,
  • une expérience d'utilisation de Micropython depuis 2017.

Bref, quand on en parle, c'est du vécu !

Micropython, un Python allégé certes... encore que.

Micropython, porté par son codeur principal Damien George, finalement a débuté en 2014 quasiment comme un projet expérimental : dans quelle mesure était-il possible de porter le langage Python sur une base à microcontrôleur.

Aujourd'hui, presque 7 ans après le début du développement, l'implémentation de Micropython sur microcontrôleur consiste en :

  • le portage complet des mots-clés, des objets Python et des fonctions built-in... ce qui est en soi constitue déjà une base essentielle.

  • le portage d'une 20aine de modules standards, certes dans un format allégé et finalement adapté au contexte du microcontrôleur, mais avec à chaque fois les fonctions essentielles. Notamment, les modules re (expressions régulières), time, sys, os, io, math et même cmath sont portés en Micropython et à ce titre élèvent Micropython, selon moi, au rang de "micro-OS", en tout cas, très au-dessus d'un langage compilé.

Bref, on a l'essentiel et même un peu plus !

Micropython, des modules et classes dédiés dans un contexte micro-contrôleur

A côté de ce coeur, commun finalement à Micro-Python et CPython, le langage MicroPython implémente logiquement des modules spécifiques au contexte micro-contrôleur pour donner accès aux ressources matérielles, à savoir aux broches E/S (classe Pin), à la mesure analogique (classe ADC), aux impulsions (classe PWM), etc. C'est somme toute logique.

Plusieurs modules dédiés à certains matériels ou protocoles de communication sont par ailleurs également implémentés dans MicroPython, notamment les classes I2C, SPI, UART mais aussi les classes OneWire, Nrf04, DHT, etc. Bref, tout ce qu'on attend aujourd'hui d'une plateforme à micro-contrôleur.

Du côté communautaire, de nombreuses librairies et classes dédiées ont également été développée, notamment pour base ESP32, mais facile à porter sur n'importe quel autre base, à savoir des librairies pour afficheur LCD i2C, OLED, ruban LEDs Neopixels,

Micropython, un portage multi-cartes important

Un point fort de Micropython est aussi sa capacité à être porté facilement vers des architectures très différentes, ce qui permet d'une part de garantir l'existence de cartes dans la durée d'une part, et d'autre part permet de faire face à des besoins différents assez facilement. On peut par exemple utiliser Micropython avec une 20 aine de plateformes à microcontrôleur différentes à ce jour.

On peut notamment signaler à ce titre le portage de Micropython sur base "RISC V", une gamme opensource de micrcontrôleur.

Et c'est probablement pas fini...

Avec l'arrivée du Raspberry Pi Pico, une carte capable de faire tourner Micropython au prix imbattable de 4€, les développements associés à Micropython ne vont que continuer de se développer.

Pour preuve, déjà un portage de la fameuse librairie Numpy est annoncé.

Les PIO enfin sur la carte PI Pico, viennent permettre d'implémenter des fonctions rapides, temps réel, levant finalement presque tous les obstacles de Micropython, sans parler des DMA (Direct Acces Memory) potentiellement également intéressante.

Les microcontrôleurs, vont de leur côté, probablement aussi continuer d'évoluer, et les capacités se faisant de plus en plus importantes à prix réduit, les possibilités de Micropython n'auront de cesse de s'enrichir.

Au final

Au final, l'essentiel du langage Python est implémenté avec Micropython et lorsque l'on est codeur Python, on retrouve vraiment ce qu'on connaît et ce que l'on aime : difficile même de sentir la différence avec un interpréteur Python système lorsque l'on utilise l'interpréteur Micropython, c'est dire !

Et Micropython a d'ors et déjà atteint un niveau de développement qui en fait un langage Microcontrôleur majeur, notamment depuis l'arrivée d'une carte telle que la Pi Pico qui vient lever l'obstacle "prix" à son utilisation large et diffuse. "1,2,3... à vos picos !"

Liens intéressants