Il s'agit du projet MicroPython, qui vise à mettre en place une implémentation de Python 3.x sur des microcontrôleurs et des petits systèmes embarqués. Vous pouvez trouver le site officiel sur micropython.org.
AVERTISSEMENT : ce projet est en phase bêta et est sujet à des modifications de la base de code, y compris des changements de nom à l'échelle du projet et des changements d'API.
MicroPython implémente toute la syntaxe de Python 3.4 (y compris les exceptions, with
, yield from
, etc., ainsi que les mots-clés async
/ await
de Python 3.5 et certaines fonctionnalités sélectionnées des versions ultérieures). Les types de données de base suivants sont fournis : str
(y compris la prise en charge de base d'Unicode), bytes
, bytearray
, tuple
, list
, dict
, set
, frozenset
, array.array
, collections.namedtuple
, classes et instances. Les modules intégrés incluent os
, sys
, time
, re
et struct
, etc. Certains ports prennent en charge le module _thread
(multithreading), socket
et ssl
pour la mise en réseau et asyncio
. Notez que seul un sous-ensemble des fonctionnalités de Python 3 est implémenté pour les types de données et les modules.
MicroPython peut exécuter des scripts sous forme de source textuelle (fichiers .py) ou à partir de bytecode précompilé (fichiers .mpy), dans les deux cas, soit à partir d'un système de fichiers sur l'appareil, soit "gelés" dans l'exécutable MicroPython.
MicroPython fournit également un ensemble de modules spécifiques à MicroPython pour accéder aux fonctionnalités et périphériques spécifiques au matériel tels que GPIO, Timers, ADC, DAC, PWM, SPI, I2C, CAN, Bluetooth et USB.
Consultez la documentation en ligne pour la référence de l'API, les informations sur l'utilisation de MicroPython et la manière dont il est implémenté.
Nous utilisons GitHub Discussions comme forum et Discord pour discuter. Ce sont d'excellents endroits pour poser des questions et des conseils à la communauté ou pour discuter de vos projets basés sur MicroPython.
Pour les bogues et les demandes de fonctionnalités, veuillez soulever un problème et suivre les modèles disponibles.
Pour plus d'informations sur le pyboard MicroPython, la carte officiellement prise en charge par la campagne Kickstarter originale, consultez les schémas, le brochage et la documentation.
MicroPython est un projet open source et accueille les contributions. Pour être productif, assurez-vous de suivre les directives des contributeurs et les conventions du code. Notez que MicroPython est sous licence MIT et que toutes les contributions doivent suivre cette licence.
Ce référentiel contient les composants suivants :
py/ -- l'implémentation principale de Python, comprenant le compilateur, le runtime et la bibliothèque principale.
mpy-cross/ -- le compilateur croisé MicroPython qui est utilisé pour transformer les scripts en bytecode précompilé.
ports/ -- code spécifique à la plate-forme pour les différents ports et architectures sur lesquels MicroPython s'exécute.
lib/ -- sous-modules pour les dépendances externes.
tests/ -- cadre de test et scripts de test.
docs/ -- documentation utilisateur au format Sphinx reStructuredText. Ceci est utilisé pour générer la documentation en ligne.
extmod/ -- modules supplémentaires (non essentiels) implémentés en C.
tools/ -- divers outils, dont le module pyboard.py.
examples/ -- quelques exemples de scripts Python.
"make" est utilisé pour construire les composants, ou "gmake" sur les systèmes basés sur BSD. Vous aurez également besoin de bash, gcc et Python 3.3+ disponibles en tant que commande python3
(si votre système ne dispose que de Python 2.7, invoquez make avec l'option supplémentaire PYTHON=python2
). Certains ports (rp2 et esp32) utilisent également CMake.
MicroPython fonctionne sur une large gamme de microcontrôleurs, ainsi que sur des systèmes de type Unix (notamment Linux, BSD, macOS, WSL) et Windows.
Les cibles du microcontrôleur peuvent être aussi petites que 256 Ko de Flash + 16 Ko de RAM, bien que les appareils dotés d'au moins 512 Ko de Flash + 128 Ko de RAM permettent une expérience beaucoup plus complète.
Les ports Unix et Windows permettent à la fois le développement et le test de MicroPython lui-même, ainsi que de fournir une alternative légère à CPython sur ces plateformes (en particulier sur les systèmes Linux embarqués).
Le port "minimal" fournit un exemple de port MicroPython très basique et peut être compilé à la fois en tant que binaire Linux autonome ainsi que pour ARM Cortex M4. Commencez par ceci si vous souhaitez porter MicroPython sur un autre microcontrôleur. De plus, le port « à bras nu » est un exemple de configuration minimale absolue et est utilisé pour suivre la taille du code du runtime principal et de la VM.
De plus, les ports suivants sont fournis dans ce référentiel :
cc3200 – Texas Instruments CC3200 (y compris PyCom WiPy).
esp32 -- SoC Espressif ESP32 (y compris ESP32S2, ESP32S3, ESP32C3, ESP32C6).
esp8266 -- SoC expressif ESP8266.
mimxrt -- NXP m.iMX RT (y compris Teensy 4.x).
nrf -- Nordic Semiconductor nRF51 et nRF52.
pic16bit -- Micropuce PIC 16 bits.
powerpc -- IBM PowerPC (y compris Microwatt)
qemu -- Cible émulée basée sur QEMU (pour les tests)
renesas-ra -- Famille Renesas RA.
rp2 -- Raspberry Pi RP2040 (y compris Pico et Pico W).
samd -- Microchip (anciennement Atmel) SAMD21 et SAMD51.
stm32 -- Famille STMicroelectronics STM32 (incluant F0, F4, F7, G0, G4, H7, L0, L4, WB)
webassembly — Port Emscripten ciblant les navigateurs et NodeJS.
zephyr -- RTOS Zephyr.
La plupart des ports nécessitent que le compilateur croisé MicroPython soit d'abord construit. Ce programme, appelé mpy-cross, est utilisé pour précompiler des scripts Python en fichiers .mpy qui peuvent ensuite être inclus (gelés) dans le firmware/exécutable d'un port. Pour créer mpy-cross, utilisez :
$ cd mpy-cross $ make
La machine virtuelle et le runtime MicroPython de base n'ont pas de dépendances externes, mais un port donné peut dépendre de pilotes tiers ou de HAL de fournisseurs. Ce référentiel comprend plusieurs sous-modules liés à ces dépendances externes. Avant de compiler un port donné, utilisez
$ cd ports/name $ make submodules
pour garantir que tous les sous-modules requis sont initialisés.