Différences entre versions de « MicroPython.présentation »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(50 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 +
{{MicroPython.presentation-NAV}}
 
== Introduction ==
 
== Introduction ==
 
 
{{bloc-etroit|text=
 
{{bloc-etroit|text=
'''MicroPython''' est une version rapide, optimisée et allégée du langage de programmation Python 3 ([http://python.org Python.org]) '''pour système embarqué'''.
+
'''Micro Python''' est une version rapide, optimisée et allégée du langage de programmation Python 3 ([http://python.org Python.org]) '''pour système embarqué'''.
  
'''La carte MicroPython''' est une petite carte électronique qui exécute MicroPython en ''[http://en.wikipedia.org/wiki/Bare_machine bare metal]'' et vous offre un système d'exploitation Python bas niveau permettant de contrôler toute sorte de projets électroniques.
+
'''PyBoard, la carte Micro Python''' est une petite carte électronique qui exécute Micro Python en ''[http://en.wikipedia.org/wiki/Bare_machine bare metal]'' et vous offre un système d'exploitation Python bas niveau permettant de contrôler toute sorte de projets électroniques.
  
Grâce au lancement de [ttps://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers MicroPython en KickStarter], il a été possible de concevoir la carte en y incluant:
+
Grâce au lancement de [https://www.kickstarter.com/projects/214379695/micro-python-python-for-microcontrollers Micro Python en KickStarter], il a été possible de concevoir la carte en y incluant:
 
* Le support de connexion Wi-Fi à l'aide du module CC3000.  Micro Python incluera une bibliothèque permettant vous permettant de vous connecter via Wi-Fi. Il est donc possible d'ajouter un module CC3000. Ce module se connecte via les broches du bus SPI sur la carte Micro Python.
 
* Le support de connexion Wi-Fi à l'aide du module CC3000.  Micro Python incluera une bibliothèque permettant vous permettant de vous connecter via Wi-Fi. Il est donc possible d'ajouter un module CC3000. Ce module se connecte via les broches du bus SPI sur la carte Micro Python.
 
* Le support Ethernet à l'aide d'un module WIZ820io module. Similaire au module CC3000, le module WIZ820io se branche également sur la carte micro Python via le module le bus SPI et une bibliothèque développée dans ce but.
 
* Le support Ethernet à l'aide d'un module WIZ820io module. Similaire au module CC3000, le module WIZ820io se branche également sur la carte micro Python via le module le bus SPI et une bibliothèque développée dans ce but.
 
* Le support de communication sans-fil basse consommation avec le NRF24L01+ (et une bibliothèque adéquate).  
 
* Le support de communication sans-fil basse consommation avec le NRF24L01+ (et une bibliothèque adéquate).  
  
MicroPython est un projet logiciel open-source (sous licence MIT) que vous pouvez utiliser dans vos propres projets. }}
+
Micro Python est un projet logiciel open-source (sous licence MIT) que vous pouvez utiliser dans vos propres projets. }}
  
{{traduction}}
+
{{MPImage|upython-with-micro.jpg|640px}}
  
Python is a scripting language that is very easy to learn, yet highly expressive and very powerful, and has a huge existing community. Running on a small microcontroller, Micro Python allows you to effortlessly blink LEDs, read voltages, make motors and servos move, play sounds, write data to SD cards, communicate wirelessly, and be the brains of your robot, among countless other things. It is the perfect choice to control your next project!
+
Python est une langage de scripting vraiment très facile à apprendre, très expressif, vraiment {{underline|très}} puissant et disposant d'une gigantesque communauté. En fonctionnant sur un microcontroleur, Micro Python permet de faire clignoter des LEDs sans aucun effort, lire des tensions, faire bouger des moteurs et servo moteurs, jouer du son, écrire/lire des données sur la carte micro SD, établir des communications sans fils (avec un module complémentaire) et devenir ce cerveau que votre robot attend désespérément. Il y a tant d'autres d'opportunité accessible à PyBoard et MicroPyhton.... c'est un choix parfait pour votre prochain projet!
  
When building an electronics project, like an intruder detector or a smart robot, a microcontroller is used as the "brain", and does all the decision making and control. There are two kinds of things that a microcontroller typically needs to do.  It must do low-level control of lights, LCD displays, motors, etc, as well as high-level tasks such as reading and writing data and images, communicating wirelessly, and being an artificial intelligence. Micro Python allows you to do both low-level and high-level control, by augmenting the Python language with inline assembler and native types, as described below.
+
Lors de la conception d'un projet électronique, tel qu'un détecteur d'intrusion or a robot intelligent, le microcontroleur est utilisé en tant que "cerveau" et prend toutes les décisions d'action et de vérifications. Un microcontroleur a typiquement besoin de faire deux choses: (1) il doit être capable d'agir au niveau matériel (dit "''low level''") pour commander des lumières, écran LCD, moteurs, être très réactif, etc, (2) ainsi que des opération de haut niveau (dit "''high level''") comme comme lire et écrire des données, images, communiquer sans fil ou disposer d'une "intelligence artificiel".
 +
 
 +
Micro Python à ceci d'extraordinaire qu'il permet le contrôle low-level et high-level en agrémentant le language Python avec de l'assembleur inline et des types natifs (comme présenté ci-dessous).
  
 
== Comment l'utiliser? ==
 
== Comment l'utiliser? ==
  
The Micro Python board comes preinstalled with Micro Python and is suitable for everyone, whether a beginner or an expert robot builderIt requires no set-up, no compiling and no soldering, and if you don't know Python it is very easy to learn the language.
+
La carte Micro Python est flashée (pré-installée) avec Micro Python pour le rendre instantanément accessible aussi bien au néophyte, au débutant, développeur curieux, maker qu'à l'expert, ingénieur ou roboticienLa carte ne requière aucune installation/configuration, pas de compilateur, pas de soudure et si vous ne connaissez pas Python vous le découvrirez qu'il est très facile à apprendre.
  
You plug the board into your PC (Windows, Mac and Linux all work) using a USB cable. It then acts just like a USB flash drive.
+
Vous branchez votre carte PyBoard sur votre ordinateur (fonctionne sur Windows, Mac et Linux) en utilisant un cable USB. PyBoard se comporte alors comme un lecteur Flash USB.
  
To control servo motors, it is a simple as writing the following code:
+
Contrôler des servo moteurs est aussi simple que d'écrire les quelques lignes de code suivantes:
  
 
  <nowiki>pyb.servo(1, 45) # mettre le servo 1 a 45 degres
 
  <nowiki>pyb.servo(1, 45) # mettre le servo 1 a 45 degres
 
pyb.servo(2, 90) # set servo 2 a 90 degres</nowiki>
 
pyb.servo(2, 90) # set servo 2 a 90 degres</nowiki>
  
Put this code in a text file and copy it to the Micro Python USB flash drive, press the reset button on the board and it will run! You can also open a terminal emulator (freely available for Windows, Mac and Linux) to connect to the board over USB and type these commands directly to the board (which gives you a Python command line), and it will run them as soon as you press the enter key.
+
Placez ce code dans un fichier texte puis copier le sur le lecteur Flash de Micro Python. Presser le bouton "''Reset''" (réinitialisation) de la carte et il fonctionnera! Vous pouvez également ouvrir un terminal émulateur (disponible gratuitement pour Windows, Mac et Linux) pour vous connecter sur la carte via USB et tapez ces commandes directement sur la carte (la ligne de commande Python est vraiment pratique), le moteur bougera immédiatement après que vous ayez pressé la touche Return/Entrée/Retour clavier.
  
To flash an LED once a second, you could use the following code:
+
Pour faire clignoter une LED une fois par seconde, vous pouvez utiliser le code suivant:
  
 
  <nowiki>while True:  # Faire une boucle infinie
 
  <nowiki>while True:  # Faire une boucle infinie
Ligne 40 : Ligne 42 :
 
     pyb.delay(1000)</nowiki>
 
     pyb.delay(1000)</nowiki>
  
To read the accelerometer and print out the x-axis value:
+
Lire l’accéléromètre et afficher la valeur de l'axe-x:
  
 
  <nowiki>accel = pyb.mma() # obtenir les donnees de l accelerometre
 
  <nowiki>accel = pyb.mma() # obtenir les donnees de l accelerometre
 
print( accel[0] ) # afficher la donnee de l axe-X</nowiki>
 
print( accel[0] ) # afficher la donnee de l axe-X</nowiki>
  
You have the full Python programming language at your disposal, and can write functions and classes, make lists and dictionaries, do string processing, read and write files (to the SD card or built-in flash storage), and have more sophisticated features such as generators, closures, list comprehension and exception handling. The possibilities for programming are endless!
+
Vous avez à votre disposition un langage de programmation Python complet. Vous pouvez écrire des fonctions et des classes, faire créer des listes et dictionnaires, faire du traitement de chaine de caractère (les ''string''), lire et écrire des fichiers (sur la carte SD ou la flash de stockage interne). Micro Python dispose même de fonctionnalités avancées tels que les générateurs, les [http://www.programiz.com/python-programming/closure closures] <small>(programiz.com)</small>, les [http://fgallaire.flext.net/comprehension-de-liste-en-python-map-filter/ comprehension list] <small>(fgallaire.flext.net)</small> et gestion d'exception. Les possibilités de programmation sont infinies!
 +
 
 +
La carte dispose de nombreuses broches d'entrées/sorties que vous pouvez connecter sur d'autres circuits et vous pouvez y souder des fils pour inclure Micro Python dans vos propres projets.
 +
 
 +
 
 +
La carte peut fonctionner sans PC, pour autant qu'elle soit connectée sur une source d'alimentation/accu fournissant une tension entre 3.6V et 10V.
 +
 
 +
 
 +
Dans l'attente de la constitution/traduction de [http://wiki.mchobby.be/index.php?title=MicroPython-Accueil tutoriel en Français], vous pouvez trouver des [http://micropython.org instructions en ligne sur le site MicroPython.org] (''anglais'') incluant exemples et projets. Même avec la seule carte Micro Python vous pouvez déjà réaliser de chouette choses, tels que faire un enregistrement des données de l'accéléromètre, réaliser une souris USB en Python et utiliser la ligne de commande via USB série.
 +
 
 +
== PyBoard et les autres cartes ==
 +
 
 +
Comment Micro Python se positionne t'il par rapport aux autres cartes?
  
 +
=== Comparé à Arduino ===
 +
La carte Micro Python est nettement plus puissante et plus facile à programmer. Vous n'avez pas besoin de complilateur sur votre PC.
  
The board has many input/output pins which can be connected to other circuits, and you can solder on wires to make it part of your own project.  The board can run without a PC, as long as it is connected to a battery or other power supply between 3.6V and 10V.
+
=== Comparé à Raspberry-Pi ===
 +
La Micro Python est moins cher, plus petite, plus simple (vous pouvez même en faire une vous même, ou modifier la conception de la carte pour qu'elle rencontre vos besoins) et PyBoard utilise moins de puissance.
  
 +
=== Comparé à d'autres cartes ===
 +
La plupart des autres cartes sont programmées en C. Le C est un langage de bas niveau et peut-être difficile à programmer correctement.
  
Some of the rewards on offer include a kit of parts with the Micro Python board.  These kits allow you to get started programming and building things straight away.  There will be a set of online instructions explaining exactly how to get it all working, and detailing some example projects.  Even with just the Micro Python board on its own you can still do some pretty nifty things, such as logging accelerometer data, making a Python USB mouse, and using the USB serial Python command line.  These projects will also be explained online for you to follow.
+
D'autre part, Python est un langage de très haut niveau, ce qui signifie que Python est plus simple, nécessite moins de code pour réaliser des tâches identique à celle programmée en C.
  
 +
== Logiciel Micro Python ==
 +
Micro Python est évidemment une ré-écriture complète (en partant de rien) du langage de programmation Python. Il est écrit en C ANSI, proprement et inclus un parser complet, compilateur byte-code Python, une machine virtuelle, un environnement d'exécution, un ''garbage collector'' (dit 'ramasse miette' en France) et support de bibliothèque... le tout fonctionnant sur le microcontrolleur.  Le compilateur peu générer du ''byte code'' ou du code machine natif (configurable par fonction en utilisant un décorateur Python). Micro Python supporte également l'''inline assembler''.  Toutes les taches de compilations sont effectuées sur le microcontroleur... pas besoin de logiciel sur le PC.
  
You may be wondering how the Micro Python board compares with other, similar boards.  Compared with an Arduino, the Micro Python board is more powerful, easier to program, and you don't need a compiler on your PC. Compared with a Raspberry Pi, the Micro Python board is cheaper, smaller, simpler (you can make one yourself, or even modify the design to fit your needs) and it uses less power.  Most other boards are programmed in C, which is a low-level language and can be difficult to program correctly.  On the other hand, Python is a very high-level language, which means that Python has simpler, smaller code to do the same thing as C.
+
Micro Python supporte actuellement les processeurs ARM 32-bits avec le jeu d'instruction Thumb v2, comme c'est le cas pour la gamme des microcontrôleurs Cortex-M. Micro Python a été testé sur la puce STM32F405.
  
== Logiciel MicroPython ==
+
Micro Python dispose des fonctionnalités suivantes:
Certainly!  Micro Python is a complete rewrite, from scratch, of the Python scripting language. It is written in clean, ANSI C and includes a complete parser, compiler, virtual machine, runtime system, garbage collector and support libraries to run on a microcontroller. The compiler can compile to byte code or native machine code, selectable per function using a function decorator. It also supports inline assembler. All compilation happens on the chip, so there is no need for any software on your PC.
+
* Implémentation {{underline|complète}} de la grammaire de Python 3 (mais pas encore toutes les bibliothèques standard de Python).
 +
* Implémentation d'un lexer (''analyse syntaxique''), parser, compilateur, machine virtuelle et environnement d'exécution.
 +
* Peut exécuter des fichier et dispose également d'une interface en ligne de commande (REPL ou read-evaluate-print-loop boucle-lire-évaluer-imprimer).
 +
* Le code Python est ompilé en un ''byte code'' compressé qui fonctionne sur la machine virtuelle intégrée à PyBoard.
 +
* L'utilisation de la mémoire est minimiser en stockant les objets de manière efficace. Les entiers qui tiennent sur 31-bits n'allouent pas un objet sur la heap (le ''tas''), et ne nécessite, par conséquent, de la mémoire que sur la stack (la ''pile'').
 +
* En utilisant les décorateurs Python, vous pouvez éventuellement compiler une fonction en core machine natif. Le code natif nécessite plus de mémoire mais fonctionne 2 fois plus vite que du byte code.  De telles fonctions implémente toujours le langage Python complet.
 +
* Une fonction peu éventuellement être compilée pour utiliser des entiers natif (native integer) comme nombre à la place d'objet Python.  Une telle fonction s'exécute presque aussi vite que la fonction équivalent en C et peut toujours être appelée depuis Python (et appelé du code Python). Ces fonctions peuvent être utilisées pour exécuter des procédures ''time-critical'' (dont le temps nécessaire à sont exécution est un élément critique). Ce type de fonction est bien adapté aux interruption.
 +
* Une implémentation assembleur inline permet d'avoir un accès complet sur la machine sous-jacente. Les fonctions assembleurs peuvent être appelées depuis Python comme si elles étaient des fonctions normales.
 +
* La mémoire est gérée en utilisant un garbage collector (''ramasse miette'') simple et rapide (''fast mark-sweep''). Une collecte complete nécessite moins de 4ms. De nombreuses fonction peuvent être écrites pour ne pas utiliser de mémoire sur la heap (le ''tas'') et permettant ainsi d'éviter l'usage du Garbage Collector.
  
Micro Python currently supports 32-bit ARM processors with the Thumb v2 instruction set, such as the Cortex-M range used in low-cost microcontrollers. It has been tested on an STM32F405 chip.
+
== PyBoard, la carte Micro Python ==
 +
La carte Micro Python (PyBoard pour les intimes) est une carte de développement électronique basée sur un microcontroleur STM32F405 qui exécute Micro Python. Ce microcontroleur est un des plus puissant disponible sur le marché et à été spécialement sélectionné parce qu'il permettrait à Micro Python de fonctionner à son plein potentiel.  
  
Micro Python has the following features:
+
Le microcontroleur est cadencé à 168MHz (fréquence d'horloge), dispose de 1Mb de Flash et de 192Kb de RAM, un très large espace mémoire pour écrire de complexes scripts Python. La carte mesure 33x40 mm comme présenté sur l'image ci-dessous.
  
* Full implementation of the Python 3 grammar (but not yet all of Python's standard libraries).
+
{{MPImage|MicroPython-presentation-00.jpg|800px}}
* Implements a lexer, parser, compiler, virtual machine and runtime.
 
* Can execute files, and also has a command line interface (a read-evaluate-print-loop, or REPL).
 
* Python code is compiled to a compressed byte code that runs on the built-in virtual machine.
 
* Memory usage is minimised by storing objects in efficient ways.  Integers that fit in 31-bits do not allocate an object on the heap, and so require memory only on the stack.
 
* Using Python decorators, functions can be optionally compiled to native machine code, which takes more memory but runs around 2 times faster than byte code.  Such functions still implement the complete Python language.
 
* A function can also be optionally compiled to use native machine integers as numbers, instead of Python objects.  Such code runs at close to the speed of an equivalent C function, and can still be called from Python, and can still call Python.  These functions can be used to perform time-critical procedures, such as interrupts.
 
* An implementation of inline assembler allows complete access to the underlying machine.  Inline assembler functions can be called from Python as though they were a normal function.
 
* Memory is managed using a simple and fast mark-sweep garbage collector.  It takes less than 4ms to perform a full collection.  A lot of functions can be written to use no heap memory at all and therefore require no garbage collection.
 
  
== La carte MicroPython (sous le capot) ==
+
La carte intègre une interface USB qui se présente comme un périphérique série (CDC VCP) ainsi que comme un périphérique de stockage USB amovible (MSC, l'équivalent de votre clé USB). Lorsque PyBoard est connecté sur un PC, vous pouvez ouvrir un programme de communication série (terminal telnet/minicom ou [http://www.putty.org/ Putty]) et interagir la carte par l'intermédiaire d'une ligne de commande Python. Vous pouvez également afficher des message (fonction ''print'') et saisir des entrées puisque le périphérique série agit en tant que stdin et stdout (entrée et sortie console, standard simple hérité du monde Unix). La carte se comporte également comme un périphérique de stockage (un lecteur Flash USB) vous permettant de facilement copier vos scripts sur le système de fichier de la carte ou de la carte SD. Ces fichiers peuvent être exécutés indépendamment du PC.
The Micro Python board is an electronics development board that runs Micro Python, and is based on the STM32F405 microcontroller. This microcontroller is one of the more powerful ones available, and was chosen so that Micro Python could run at its full potential. The microcontroller is clocked at 168MHz and has 1MiB flash and 192KiB RAM, which is plenty for writing complex Python scripts. The board measures 33x40 mm and is pictured below.
 
  
{{MPImage|MicroPython.présentation-00.jpg}}
 
  
The board has a built-in USB interface that presents itself as a serial device (CDC VCP) as well as a removable storage device (MSC).  When connected to a PC, you can open a serial communications program and interact with the board through a Python command line.  You can also print messages and read input, since the serial device acts like stdin and stdout.  The board also acts as a storage device (a USB flash drive) and you can easily copy your Python scripts to the board's local filesystem or SD card, and they are then executed independent of the PC.
+
Alimenté par une pile/accu, la carte est capable de compiler et exécuter des scripts Python sans besoin d'une connexion PC. Il y a un connecteur carte Micro SD pour stocker de grandes quantités de donnée, 4 LEDs, des boutons poussoirs, une horloge temps réel, un accéléromètre et 30 broches d'entrée/sortie (dite ''GPIO'' ou 'I/O'.  Les broche d'I/O inclus: 5 USART (pour Port Série), 2 bus SPI, 2 bus I2C, 14 broches ADC (convertisseur Analogique->digital), 2 broches DAC (convertisseur Digital->Analogique) ainsi que 4 port pour Servo Moteurs (avec alimentation).
  
 +
[[Fichier:MicroPython-presentation-01.jpg|800px]]
  
Powered by a battery, the board can compile and execute Python scripts without any PC connection. There is a Micro SD slot for storing large amounts of data, 2 LEDs, a switch, a real-time clock, an accelerometer, and 30 general purpose I/O pins. The I/O pins include: 5 USARTs, 2SPIs, 2 I2C busses, 14 ADC pins, 2 DAC pins, and 4 servo ports with power.
+
Il y a une broche spéciale BOOT0, qui est utilisée pour reprogrammer le microcontroleur. En connectant BOOT0 sur 3.3V (la broche juste à côté) et en réinitialisant (''reset'') la carte, vous placez la carte en mode DFU "''device firmware upgrade''". C'est le mode USB standard qui vous permet de faire une mise-à-jour de Micro Python sur le microcontroleur en utilisant des logiciel librement disponible pour Windows, Mac et Linux). Elle vous permet également de téléverser votre propre version de Micro Python si vous désirez la modifier, voire téléverser vos propres programmes écrit directement en C.
  
  
There is a special pin, BOOT0, which is used to reprogram the microcontroller. By connecting the BOOT0 pin to the 3.3V pin next to it, and resetting the board with the reset button, you enter the "device firmware upgrade" mode.  This is a standard USB mode and allows you to easily put an updated version of Micro Python onto the microcontroller (using freely available software for Windows, Mac and Linux).  It also allows you to download your own version of Micro Python if you want to modify it, or even download your own C program.
+
La carte Micro Python est adapté pour tous, peu importe le niveau de connaissance en programmation ou éléectronique. Avec quelques lignes de code Python dans un fichier texte, le bédutant pourra faire clignoter les LEDs et réagir en fonction des données de l'accéléromètre, le tout sans soudure, ni connexion de composant, ni installation de logiciel sur votre l'ordinateur.
  
  
The Micro Python board is suitable for everyone, regardless of knowledge in hardware or softwareWith a few lines of Python code in a text file, anyone can start flashing LEDs and responding to accelerometer input, all without soldering, or connecting components, or installing software on your PC.
+
PyBoard c'est de nombreuses broches aux fonctionnalités multiples. Avec PyBoard vous avez sous la main:
 +
* '''30 GPIO''' - Broches d'entrées/sorties pouvant servir à de nombreuses applications. Avec un GPIO, vous pouvez commander des LEDs, des relais (via transistor ou UNL2803), des moteurs (via L293). Lire l'état de boutons et senseurs. Commander des périphériques tels que des écrans LCD, afficheurs graphiques, des cartes d'extension, etc.
 +
* '''2 bus I2C''' - Pour commander des périphériques à l'aide de 3 fils.
 +
* '''2 bus SPI'''
 +
* '''2 bus CAN'''
 +
* '''5 UARTs''' - Un port série c'est un outil de communication très utile... en avoir 5 c'est absolument génial.
 +
* '''20 PWMs''' - Permettant de produire des signaux permettant de contrôler des servo-moteurs ou la puissance d'une LED (voyez "[AdaFruit_PWM_Driver#C.27est_quoi_PWM c'est quoi PWM]" dans cet autre tutoriel)
 +
* '''16 ADC''' - Convertisseur Analogique->Digital permettant de lire une tension analogie (pratique pour utiliser des senseurs flex, photo-résistance, potentiomètre, etc).
 +
* '''2 DAC''' - Très rares sur les cartes de prototypages, les convertisseurs Digital->Analogique permettent de produire des tensions analogiques en sortie. Grâce à cela, vous pouvez produire divers types de signaux (en dent de scie, sinusoide, ... et même du son).
 +
* '''13 timers''' - Les [http://fr.wikipedia.org/wiki/Timer_%28microcontr%C3%B4leur%29 timers] permettent de mesurer des durées et d'exécuter du code/fonction à intervalle régulier. C'est un élément de synchronisation important lorsque l'on désire écrire des applications avancées.   
 +
* '''16 ext int''' - Les interruptions externes permettent d'interrompre le programme principal pour exécuter du code (fonction d’interruption) lorsqu'une broche change d'état. Cela permet d'écrire des programmes réagissant instantanément à changement de conditions physique autour du la carte. Exemple: arrêter immédiatement des moteurs si l'arrêt d'urgence est activé.
 +
* '''1 RTC''' - L'horloge temps réel vous permet de connaître l'heure, de mesurer des laps de temps assez grand, de créer des exécutions basées sur un calendrier, de réaliser des horloges. Le RTC est un élément utile qui manque souvent dans les plateformes de prototypage (comme c'est la cas pour Raspberry, Arduino ou encore de Spark Core où le RTC n'est pas exploitée)
 +
* '''4 LEDs''' - Les LEDs/DELs sont bien pratiques pour informer l'utilisateur sur l'état du programme. En avoir sur la carte permet de tester/prototyper rapidement du code sans avoir besoin de faire des raccordements.
 +
* '''1 Accéléromètre''' - PyBoard fut conçue avec la robotique comme finalité. Du coup, Damien à intégrer un accéléromètre à même la carte. Un tel dispositif permet de mesurer les accélération (cas pratique: un smartphone qui tombe) mais surtout l’accélération terrestre G sur les 3 axes. Cette accélération terrestre responsable de la gravité est dirigée vers le centre de la terre, en mesurant cette accélération sur 3 axes, il est donc possible de déterminer la position/orientation 3D de la carte par rapport au sol (cas pratique: la rotation automatique des écrans sur un smartphone, tenue d'équilibre pour un robot bipède).
  
 
== Pour les friands de détails ==
 
== Pour les friands de détails ==
===  
+
=== PyBoard sous le capot ===
The Micro Python implementation is a complete rewrite of Python specifically designed to be run on a microcontroller with minimal flash storage and minimal RAM. When design decisions were made, the first priority was to minimise RAM usage, then minimise code size, and, finally, to execute quickly. Some of the important features of the implementation are listed below.
+
 
 +
* Microcontroleur STM32F405RG ([http://www.st.com/web/en/resource/technical/document/datasheet/DM00037051.pdf fiche technique])
 +
* CPU Cortex-M4 cadencé 168 MHz avec unité de calcul flottant à 32-bit.
 +
* 1 Mb de mémoire Flash pour le stockage, 192 Kb de RAM.
 +
* Connecteur USB microB avec support logiciel USB Série, périphérique de stockage de masse USB, et USB HID (souris, clavier).
 +
* connecteur pour carte micro SD.
 +
* Accéléromètre 3-axes MMA7660 FreeScale ([http://www.freescale.com.cn/files/sensors/doc/data_sheet/MMA7660FC.pdf?fpsp=1 fiche technique]). Jusqu'à 64 échantillonnages 6-bit par seconde par axe.
 +
* 4 LEDs, 1 bouton Reset, un bouton utilisateur.
 +
* Un régulateur 3.3V LDO (à faible perte) de 300mA. Alimenté depuis le connecteur USB ou alimentation externe entre 3.6V et 10V.
 +
* Horloge Temps Réel (RTC) avec date et heure.
 +
* 30 broches d'entrée/sortie GPIO, 28 sont tolérantes 5V (excepté en mode ADC / Analogique->Digital).
 +
* Communication:
 +
** 2 bus SPI,  
 +
** 2 bus CAN,
 +
** 2 bus I2C,
 +
** 5 USART (port série).
 +
* 14x entrées analogiques avec résolution 12-bit, Valeur entre 0 et 4095 (ADC, Analogic to Digital Converter).
 +
* 2x sorties analogiques (DAC, Digital to Analogic Converter).
 +
* Dimension de la carte: 33 x 40mm.
 +
* Poids de la carte: 6 grammes.
 +
* Connexion sur la carte: 46 trous avec empattement standard de 2.54mm.
  
* Follows the Python 3.3 grammar and language semantics.  This means that Micro Python produces equivalent byte code (up to optimisations) to the official CPython version 3.3.
+
=== Brochage ===
* Size of space-optimised binary compiled to Thumb v2 machine code: around 60KiB.  This includes the parser, compiler, runtime and garbage collector, but excludes all other code, including file system support and libraries related to the specific microcontroller. This size will increase if more Python libraries are added.
+
{{MPImage|pybv10-pinout.jpg|640px}}
* Size of all code, including FAT support, SD card, USB serial, USB mass storage, USB HID, Bluetooth, LCD, servo, timer: about 110KiB.
 
* Minimum RAM required to compile and execute "print('hello world')": around 4KiB.
 
* Memory is managed using a fast, non-precise, mark-sweep garbage collector.  This eliminates reference counting overhead in flash code size and object RAM size.  A fast CPU and small amount of RAM means that a complete garbage collection takes under 4ms. The garbage collector RAM overhead is 2 bits per 32 bytes = 1KiB for 128KiB usable RAM.
 
* Size of int object: 4 bytes, stored on the stack or directly in a tuple/list/dictionary.
 
* Size of other objects: 32 bytes, plus extra for, eg, elements of a list.
 
* Limit on number of objects: none, so long as there is enough RAM.
 
* The grammar is encoded in a compact table using EBNF which is interpreted on-the-fly when parsing.
 
* RAM is minimised during compilation by performing 3 separate passes over the same data structure.
 
* There are 4 types of code emitters, selectable per function by function decorators: (compressed) byte code, native code, native code with native types, and inline assembler.  Byte code runs on a virtual machine, similar to CPython.  Native code has each byte code unrolled to its equivalent machine code, and supports the full Python language.  It takes about 2-3 times more RAM, but runs about 2-3 times faster than byte code.  The third type, native code with native types, has byte code unrolled to machine code and further assumes that integers are smaller than 31 bits, so that it can use a single machine instruction for integer and pointer operations.  You can think of it as "Python syntax, C semantics".  For tight loops that perform arithmetic and bit manipulation (common on a microcontroller), it can perform close to the speed of the equivalent C program.  The fourth code emitter is inline assembler.  It uses the Python grammar, but is interpreted as a list of machine code instructions.  Inline assembler can be called from normal Python code with integer and pointer arguments.
 
* Python exceptions are handled using a variant of setjmp/longjmp.  This reduces the amount of flash and RAM needed to implement exceptions.
 
* A function (byte code, native or inline assembler) can be called on an interrupt long as it does not allocate heap memory (since it can be called while a garbage collection is taking place).  In practice this is not a big restriction, as you can do a lot of things using only memory on the stack.  For example, you can make loops with while/for, do integer arithmetic and bitwise operations (but no bignums), call other functions and access and overwrite elements of collections like bytearrays (but not create new ones).
 
  
=== MicroPython sur PC ===
+
=== L'interpréteur Micro Python ===
The Micro Python language can also run on a PC (it was developed under Linux on a 64-bit machine) and can be used as a lean version of Python where low memory usage is important. The PC version of Micro Python (compiling to byte code) actually runs faster than CPython for the various benchmarks I have tested, and the native compilation option makes Micro Python run significantly faster than CPython.
+
Micro Python est une ré-écriture complète d'un interpréteur Python spécialement, ré-écriture conduite pour fonctionner sur des systèmes MicroControleur ayant une mémoire RAM et Flash limitée. Lorsque des décisions de conceptions se présentait, la première priorité était celles permettant de minimiser l'utilisation de la RAM, puis minimisation de la taille du code, et finalement celle permettant d'augmenter la vitesse d'exécution.
  
=== Mini système d'exploitation Python ===
+
Certaines caractéristiques importantes de l'implémentation de Python son reprise ci-dessous.
You can think of Micro Python as a "mini Python operating system", and the boot-up process proceeds as follows:
+
* Suivre la grammaire de Python 3.3 ainsi que la sémantique du langage. Cela signifie que Micro Python produit un byte code équivalent (jusqu'à l'optimisation) à va version 3.3 CPython officiel.
* Power on, or hard reset. If the DFU (device firmware upgrade) header is enabled (across BOOT0 and 3.3V pin) then the device enters DFU mode, allowing you to upgrade the Micro Python binary, or download your own C/C++ program.
+
* La taille du binaire optimisé (en code machine Thumb v2) fait '''environ 60Kb'''.<br />Cela inclus le parser, compilateur, environnement d'exécution et garbage collector MAIS exclus tous les autre code comme le système de fichier et bibliothèques spécifiques au microcontroleur. Cette taille augmente si vous ajoutez plus de bibliothèques.
* Otherwise, it goes into boot mode and the boot-LED turns on.
+
* La taille de tout le code, incluant le support FAT, carte SD, USB série, périphérique de stockage USB, USB HID, Bluetooth, LCD, servo, timer fait '''environ 110 Kb'''.
* Checks for a local filesystem on the flash. If none exists, or it is corrupt, a fresh one is created.
+
* La taille minimale de la RAM requise pour compiler et exécuter "print('hello world')" est d''''environ 4 Kb'''.
* Checks for /boot.py. If it doesn't exist, a fresh one is created.
+
* La mémoire est gérée en utilisant un garbage collector (''ramasse miette') rapide, non-precise, mark-sweep. Cela élimine la surcharge de code provoquée par une implémentation en "reference counting" (compteur de référence) en mémoire Flash. La taille des objet en RAM diminue par la même occasion. Avec un CPU rapide et une petite quantité de RAM, la processus de collection (garbage collection) prend moins de 4ms. La surcharge de RAM du garbage collector est de 2 bits par 32 bytes soit 1 Kb pour 128Kb de mémoire RAM utilisable.
* Runs /boot.py to configure USB and other low-level parameters that can't be changed without a reset.
+
* Taille des objets int (entier): 4 bytes, stocké sur la stack (''pile'') ou directement dans un tuple/list/dictionnaire.
* Sets up USB interfaces, depending on the configuration in boot.py.  The default is a CDC VCP (virtual communications port, to redirect stdio) and an MSD (mass storage device for the flash and SD card).  The MSD allows Linux/Mac/Windows to access the flash and SD card filesystem just like a USB flash drive. This way you can easily copy Python scripts to the board, and copy data files back.
+
* Taille des autres objets: 32 bytes, plus extra pour, par exemple, les éléments d'une liste.
* Boot-up finishes successfully and the boot-LED turns off.
+
* Limite sur le nombre d'objets: aucune, pour autant qu'il y a assez de RAM.
* The main Python script is run if it existsDefault is /src/main.py. This is your main Python program and it can do whatever you like!
+
* La grammaire est encodée dans une table compacte en  utilisant EBNF qui permet de faire une interprétation à la volée pendant la phase de parsin.
* If the main script doesn't exist, or exits, REPL (read-evaluate-print-loop) mode is enteredThis gives you a standard Python interpreter prompt over the USB serial device.  Exiting from this will soft-reset the board.
+
* La RAM est minimisée durant la compilation en effectuant 3 passes séparée sur les mêmes structures de données.
 +
* Il y a 4 types de générateur de code (''code emitters''), sélectionnable à l'aide de décorateur de fonction Python:
 +
** byte code (compressé),
 +
** code natif avec type natif,
 +
** code natif avec support du langage python,
 +
** Assembleur inline assembler.
 +
* Exécution du code:
 +
** Le byte code est exécuté sur une machine virtuelle, similaire à CPython.
 +
** Le code natif ou chaque byte code est décompressé en sont équivalent 'code machine' et supporte pleinement le langage Python. Cela consomme 2 à 3 fois plus de RAM mais s'exécute aussi 2 à 3 fois plus vite que du byte code.
 +
** Le code natif avec type natif vois sont byte code décomposé en code machine et suppose que les entiers font moins de de 31 bits (ce qui permet d'utiliser des instructions machines simples pour des opérations sur les entiers et les pointeurs). Vous pouvez penser à cela comme "syntaxe Python, sémantique C". Pour les boucles effectuant des opération arithmétiques et manipulations de bit, l'exécution est presque aussi rapide qu'un programme en C.
 +
** L'emission d'assembleur inline utilise la grammaire Python mais interprète une liste d'instruction code machine. L'assembleur Inline peut être appelé depuis un code Python normal avec des entiers et pointeurs comme arguments.
 +
* Les exceptions Python sont gérées en utilisant une variante de setjmp/longjmpCela réduit la quantité mémoire Flash et RAM nécessaire pour implémenter les exceptions.
 +
* Une fonction (byte code, native ou assembleur inline) peut être appelé sur une interruption pour autant qu'il n'alloue pas de mémoire sur la heap (le ''Tas'', étant donné qu'une interruption ne peut pas être appelée durant une phase de collecte garbage collecteur). Dans la pratique, cela ne représente pas une grande restriction étant donné qu'il est possible beaucoup de choses uniquement en utilisant la mémoire accessible sur la stack (la ''pile'').  Par exemple, vous pouvez faire des boucles avec while/for, réaliser des opérations arithmétiques entière et manipulations booléennes (mais pas des grands nombres), appeler d'autres fonctions, accéder et écraser des éléments d'une collection tels que bytearrays (mais pas en créer un nouveau).
  
=== Carte MicroPython (sous le capot) ===
+
=== Micro Python sur PC ===
 +
Le langage Micro Python peut aussi être exécuté sur un PC (il a été développé sous Linux avec une machine 64-bit) et peut être utilisé comme une version légère de Python où l'économie de mémoire est important.  La version PC de Micro Python (compilant du byte code) fonctionne plus rapidement que CPython  dans différents benchmarks testé par Damien George, et l'option de compilation native rend Micro Python significativement plus rapide que CPython.
  
* STM32F405RG microcontroller.
+
Vous trouverez cette version PC sur le [https://github.com/micropython/micropython GitHub de Micro Python].
* 168 MHz Cortex-M4 CPU with 32-bit hardware floating point.
 
* 1 MiB flash storage, 192 KiB RAM.
 
* Micro-B USB connector, with software support for USB serial, USB mass storage, and USB HID (mouse, keyboard).
 
* Micro SD slot.
 
* MMA7660 3-axis accelerometer, up to 64 6-bit samples per second per axis.
 
* 4 LEDs, 1 reset switch, 1 user switch.
 
* 3.3V LDO regulator at 300mA, power from USB or external voltage source between 3.6V and 10V.
 
* Real-time clock with date and time.
 
* 30 general purpose I/O lines, 28 are 5V tolerant (unless in ADC mode).
 
* Communication: 2x SPI, 2x CAN, 2x I2C, 5x USART.
 
* 14x 12-bit ADC pins (analog signal in).
 
* 2x DAC pins (analog signal out).
 
* Board dimensions: 33mm by 40mm.
 
* Board weight: 6 grams.
 
* Board I/O connectors: 46 holes, standard 0.1 inch separation.
 
  
=== Brochage ===
+
=== Séquence de Boot Micro Python ===
[[Fichier:pybv10-pinout.jpg]]
+
Vous pouvez voir Micro Python comme un "mini système d'exploitation Python" et le processus de démarrage fonctionne comme suit:
 +
* Mise sous tension ou Reset (réinitialisation matérielle).
 +
** SI le connecteur DFU (device firmware upgrade) est actif (BOOT0 sur 3.3V) ALORS le périphérique rentre en mode DFU et vous permet ainsi de faire des mise-à-jour du binaire Micro Python ou téléverser vos propres programmes C/C++.
 +
* SINON la carte entre en mode "boot" et la LED boot s'allume.
 +
 
 +
Le mode Boot...
 +
* Vérifie la présence d'un système de fichier dans la mémoire Flash.
 +
** SI non existante ou corrompue ALORS crée un nouveau système de fichier est créé.
 +
* Vérifie la présence de {{fname|/boot.py}}.
 +
** SI non existant ALORS un tout nouveau fichier est {{fname|boot.py}} est créé.
 +
* Exécute {{fname|/boot.py}} pour configuration USB et autres paramètres de bas-niveau qui ne peuvent pas être modifiés sans un Reset.
 +
* Initialise l'interface USB, en fonction de la configuration de {{fname|boot.py}}.  Par défaut, c'est un CDC VCP (virtual communications port, pour rediriger stdio) et MSD (mass storage device, périphérique de stockage de masse pour la Flash et carte SD).<br />Le MSD permet à un PC Linux/Mac/Windows d'accéder au système de fichier de la Flash et de la carte SD comme s'il s'agissait d'un lecteur USB. De cette façon, vous pouvez facilement copier des scripts Python sur la carte... ou placer et récupérer des fichiers.
 +
* La séquence de Boot terminée avec succès, la LED boot s’éteint.
 +
 
 +
Après la séquence de boot:
 +
* Le script Python principal (nommé "''main''" en anglais) est exécuté s'il existe.<br />Par défaut, c'est le fichier {{fname|/src/main.py}}. Il s'agit de votre programme Python principal et il peut faire tout ce que vous voulez!
 +
* SI le script principal n'existe pas (ou s'il est terminé)<br />ALORS la carte rentre en mode REPL (read-evaluate-print-loop, boucle-lecture-evaluation-affichage). Cela vous offre un Interpréteur Python Standard via la connexion USB série.<br />Sortir de ce mode exécutera une reset logiciel (''soft-reset'') de la carte.
 +
 
 +
== Licence Micro Python ==
 +
Micro Python rst sous licence MIT.
 +
 
 +
J'ai repris le texte de licence tel que disponible sur le site MicroPython.org ([http://docs.micropython.org/en/latest/license.html docs.micropython.org/en/latest/license.html])
 +
 
 +
<nowiki>The MIT License (MIT)
 +
 
 +
Copyright (c) 2013, 2014 Damien P. George, and others
 +
 
 +
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the
 +
Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
 +
Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
 +
 
 +
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 +
 
 +
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
 +
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 +
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.</nowiki>
 +
 
 +
== Où Acheter ==
 +
Vous pouvez vous procurer {{cl|56|une carte Micro Python PyBoard}} chez MCHobby (vendus uniquement sur stock)!
 +
 
 +
{{MicroPython.présentation-TRAILER}}

Version actuelle datée du 22 novembre 2018 à 21:51


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Introduction

Micro Python est une version rapide, optimisée et allégée du langage de programmation Python 3 (Python.org) pour système embarqué.

PyBoard, la carte Micro Python est une petite carte électronique qui exécute Micro Python en bare metal et vous offre un système d'exploitation Python bas niveau permettant de contrôler toute sorte de projets électroniques.

Grâce au lancement de Micro Python en KickStarter, il a été possible de concevoir la carte en y incluant:

  • Le support de connexion Wi-Fi à l'aide du module CC3000. Micro Python incluera une bibliothèque permettant vous permettant de vous connecter via Wi-Fi. Il est donc possible d'ajouter un module CC3000. Ce module se connecte via les broches du bus SPI sur la carte Micro Python.
  • Le support Ethernet à l'aide d'un module WIZ820io module. Similaire au module CC3000, le module WIZ820io se branche également sur la carte micro Python via le module le bus SPI et une bibliothèque développée dans ce but.
  • Le support de communication sans-fil basse consommation avec le NRF24L01+ (et une bibliothèque adéquate).

Micro Python est un projet logiciel open-source (sous licence MIT) que vous pouvez utiliser dans vos propres projets.

Upython-with-micro.jpg
Crédit: MicroPython micropython.org

Python est une langage de scripting vraiment très facile à apprendre, très expressif, vraiment très puissant et disposant d'une gigantesque communauté. En fonctionnant sur un microcontroleur, Micro Python permet de faire clignoter des LEDs sans aucun effort, lire des tensions, faire bouger des moteurs et servo moteurs, jouer du son, écrire/lire des données sur la carte micro SD, établir des communications sans fils (avec un module complémentaire) et devenir ce cerveau que votre robot attend désespérément. Il y a tant d'autres d'opportunité accessible à PyBoard et MicroPyhton.... c'est un choix parfait pour votre prochain projet!

Lors de la conception d'un projet électronique, tel qu'un détecteur d'intrusion or a robot intelligent, le microcontroleur est utilisé en tant que "cerveau" et prend toutes les décisions d'action et de vérifications. Un microcontroleur a typiquement besoin de faire deux choses: (1) il doit être capable d'agir au niveau matériel (dit "low level") pour commander des lumières, écran LCD, moteurs, être très réactif, etc, (2) ainsi que des opération de haut niveau (dit "high level") comme comme lire et écrire des données, images, communiquer sans fil ou disposer d'une "intelligence artificiel".

Micro Python à ceci d'extraordinaire qu'il permet le contrôle low-level et high-level en agrémentant le language Python avec de l'assembleur inline et des types natifs (comme présenté ci-dessous).

Comment l'utiliser?

La carte Micro Python est flashée (pré-installée) avec Micro Python pour le rendre instantanément accessible aussi bien au néophyte, au débutant, développeur curieux, maker qu'à l'expert, ingénieur ou roboticien. La carte ne requière aucune installation/configuration, pas de compilateur, pas de soudure et si vous ne connaissez pas Python vous le découvrirez qu'il est très facile à apprendre.

Vous branchez votre carte PyBoard sur votre ordinateur (fonctionne sur Windows, Mac et Linux) en utilisant un cable USB. PyBoard se comporte alors comme un lecteur Flash USB.

Contrôler des servo moteurs est aussi simple que d'écrire les quelques lignes de code suivantes:

pyb.servo(1, 45) # mettre le servo 1 a 45 degres
pyb.servo(2, 90) # set servo 2 a 90 degres

Placez ce code dans un fichier texte puis copier le sur le lecteur Flash de Micro Python. Presser le bouton "Reset" (réinitialisation) de la carte et il fonctionnera! Vous pouvez également ouvrir un terminal émulateur (disponible gratuitement pour Windows, Mac et Linux) pour vous connecter sur la carte via USB et tapez ces commandes directement sur la carte (la ligne de commande Python est vraiment pratique), le moteur bougera immédiatement après que vous ayez pressé la touche Return/Entrée/Retour clavier.

Pour faire clignoter une LED une fois par seconde, vous pouvez utiliser le code suivant:

while True:  # Faire une boucle infinie
     pyb.led( True )  # allumer la LED
     pyb.delay(1000)  # Attendre 1000 millisecondes (1 seconde)
     pyb.led( False ) # eteindre la LED
     pyb.delay(1000)

Lire l’accéléromètre et afficher la valeur de l'axe-x:

accel = pyb.mma() # obtenir les donnees de l accelerometre
print( accel[0] ) # afficher la donnee de l axe-X

Vous avez à votre disposition un langage de programmation Python complet. Vous pouvez écrire des fonctions et des classes, faire créer des listes et dictionnaires, faire du traitement de chaine de caractère (les string), lire et écrire des fichiers (sur la carte SD ou la flash de stockage interne). Micro Python dispose même de fonctionnalités avancées tels que les générateurs, les closures (programiz.com), les comprehension list (fgallaire.flext.net) et gestion d'exception. Les possibilités de programmation sont infinies!

La carte dispose de nombreuses broches d'entrées/sorties que vous pouvez connecter sur d'autres circuits et vous pouvez y souder des fils pour inclure Micro Python dans vos propres projets.


La carte peut fonctionner sans PC, pour autant qu'elle soit connectée sur une source d'alimentation/accu fournissant une tension entre 3.6V et 10V.


Dans l'attente de la constitution/traduction de tutoriel en Français, vous pouvez trouver des instructions en ligne sur le site MicroPython.org (anglais) incluant exemples et projets. Même avec la seule carte Micro Python vous pouvez déjà réaliser de chouette choses, tels que faire un enregistrement des données de l'accéléromètre, réaliser une souris USB en Python et utiliser la ligne de commande via USB série.

PyBoard et les autres cartes

Comment Micro Python se positionne t'il par rapport aux autres cartes?

Comparé à Arduino

La carte Micro Python est nettement plus puissante et plus facile à programmer. Vous n'avez pas besoin de complilateur sur votre PC.

Comparé à Raspberry-Pi

La Micro Python est moins cher, plus petite, plus simple (vous pouvez même en faire une vous même, ou modifier la conception de la carte pour qu'elle rencontre vos besoins) et PyBoard utilise moins de puissance.

Comparé à d'autres cartes

La plupart des autres cartes sont programmées en C. Le C est un langage de bas niveau et peut-être difficile à programmer correctement.

D'autre part, Python est un langage de très haut niveau, ce qui signifie que Python est plus simple, nécessite moins de code pour réaliser des tâches identique à celle programmée en C.

Logiciel Micro Python

Micro Python est évidemment une ré-écriture complète (en partant de rien) du langage de programmation Python. Il est écrit en C ANSI, proprement et inclus un parser complet, compilateur byte-code Python, une machine virtuelle, un environnement d'exécution, un garbage collector (dit 'ramasse miette' en France) et support de bibliothèque... le tout fonctionnant sur le microcontrolleur. Le compilateur peu générer du byte code ou du code machine natif (configurable par fonction en utilisant un décorateur Python). Micro Python supporte également l'inline assembler. Toutes les taches de compilations sont effectuées sur le microcontroleur... pas besoin de logiciel sur le PC.

Micro Python supporte actuellement les processeurs ARM 32-bits avec le jeu d'instruction Thumb v2, comme c'est le cas pour la gamme des microcontrôleurs Cortex-M. Micro Python a été testé sur la puce STM32F405.

Micro Python dispose des fonctionnalités suivantes:

  • Implémentation complète de la grammaire de Python 3 (mais pas encore toutes les bibliothèques standard de Python).
  • Implémentation d'un lexer (analyse syntaxique), parser, compilateur, machine virtuelle et environnement d'exécution.
  • Peut exécuter des fichier et dispose également d'une interface en ligne de commande (REPL ou read-evaluate-print-loop boucle-lire-évaluer-imprimer).
  • Le code Python est ompilé en un byte code compressé qui fonctionne sur la machine virtuelle intégrée à PyBoard.
  • L'utilisation de la mémoire est minimiser en stockant les objets de manière efficace. Les entiers qui tiennent sur 31-bits n'allouent pas un objet sur la heap (le tas), et ne nécessite, par conséquent, de la mémoire que sur la stack (la pile).
  • En utilisant les décorateurs Python, vous pouvez éventuellement compiler une fonction en core machine natif. Le code natif nécessite plus de mémoire mais fonctionne 2 fois plus vite que du byte code. De telles fonctions implémente toujours le langage Python complet.
  • Une fonction peu éventuellement être compilée pour utiliser des entiers natif (native integer) comme nombre à la place d'objet Python. Une telle fonction s'exécute presque aussi vite que la fonction équivalent en C et peut toujours être appelée depuis Python (et appelé du code Python). Ces fonctions peuvent être utilisées pour exécuter des procédures time-critical (dont le temps nécessaire à sont exécution est un élément critique). Ce type de fonction est bien adapté aux interruption.
  • Une implémentation assembleur inline permet d'avoir un accès complet sur la machine sous-jacente. Les fonctions assembleurs peuvent être appelées depuis Python comme si elles étaient des fonctions normales.
  • La mémoire est gérée en utilisant un garbage collector (ramasse miette) simple et rapide (fast mark-sweep). Une collecte complete nécessite moins de 4ms. De nombreuses fonction peuvent être écrites pour ne pas utiliser de mémoire sur la heap (le tas) et permettant ainsi d'éviter l'usage du Garbage Collector.

PyBoard, la carte Micro Python

La carte Micro Python (PyBoard pour les intimes) est une carte de développement électronique basée sur un microcontroleur STM32F405 qui exécute Micro Python. Ce microcontroleur est un des plus puissant disponible sur le marché et à été spécialement sélectionné parce qu'il permettrait à Micro Python de fonctionner à son plein potentiel.

Le microcontroleur est cadencé à 168MHz (fréquence d'horloge), dispose de 1Mb de Flash et de 192Kb de RAM, un très large espace mémoire pour écrire de complexes scripts Python. La carte mesure 33x40 mm comme présenté sur l'image ci-dessous.

MicroPython-presentation-00.jpg
Crédit: MicroPython micropython.org

La carte intègre une interface USB qui se présente comme un périphérique série (CDC VCP) ainsi que comme un périphérique de stockage USB amovible (MSC, l'équivalent de votre clé USB). Lorsque PyBoard est connecté sur un PC, vous pouvez ouvrir un programme de communication série (terminal telnet/minicom ou Putty) et interagir la carte par l'intermédiaire d'une ligne de commande Python. Vous pouvez également afficher des message (fonction print) et saisir des entrées puisque le périphérique série agit en tant que stdin et stdout (entrée et sortie console, standard simple hérité du monde Unix). La carte se comporte également comme un périphérique de stockage (un lecteur Flash USB) vous permettant de facilement copier vos scripts sur le système de fichier de la carte ou de la carte SD. Ces fichiers peuvent être exécutés indépendamment du PC.


Alimenté par une pile/accu, la carte est capable de compiler et exécuter des scripts Python sans besoin d'une connexion PC. Il y a un connecteur carte Micro SD pour stocker de grandes quantités de donnée, 4 LEDs, des boutons poussoirs, une horloge temps réel, un accéléromètre et 30 broches d'entrée/sortie (dite GPIO ou 'I/O'. Les broche d'I/O inclus: 5 USART (pour Port Série), 2 bus SPI, 2 bus I2C, 14 broches ADC (convertisseur Analogique->digital), 2 broches DAC (convertisseur Digital->Analogique) ainsi que 4 port pour Servo Moteurs (avec alimentation).

MicroPython-presentation-01.jpg

Il y a une broche spéciale BOOT0, qui est utilisée pour reprogrammer le microcontroleur. En connectant BOOT0 sur 3.3V (la broche juste à côté) et en réinitialisant (reset) la carte, vous placez la carte en mode DFU "device firmware upgrade". C'est le mode USB standard qui vous permet de faire une mise-à-jour de Micro Python sur le microcontroleur en utilisant des logiciel librement disponible pour Windows, Mac et Linux). Elle vous permet également de téléverser votre propre version de Micro Python si vous désirez la modifier, voire téléverser vos propres programmes écrit directement en C.


La carte Micro Python est adapté pour tous, peu importe le niveau de connaissance en programmation ou éléectronique. Avec quelques lignes de code Python dans un fichier texte, le bédutant pourra faire clignoter les LEDs et réagir en fonction des données de l'accéléromètre, le tout sans soudure, ni connexion de composant, ni installation de logiciel sur votre l'ordinateur.


PyBoard c'est de nombreuses broches aux fonctionnalités multiples. Avec PyBoard vous avez sous la main:

  • 30 GPIO - Broches d'entrées/sorties pouvant servir à de nombreuses applications. Avec un GPIO, vous pouvez commander des LEDs, des relais (via transistor ou UNL2803), des moteurs (via L293). Lire l'état de boutons et senseurs. Commander des périphériques tels que des écrans LCD, afficheurs graphiques, des cartes d'extension, etc.
  • 2 bus I2C - Pour commander des périphériques à l'aide de 3 fils.
  • 2 bus SPI
  • 2 bus CAN
  • 5 UARTs - Un port série c'est un outil de communication très utile... en avoir 5 c'est absolument génial.
  • 20 PWMs - Permettant de produire des signaux permettant de contrôler des servo-moteurs ou la puissance d'une LED (voyez "[AdaFruit_PWM_Driver#C.27est_quoi_PWM c'est quoi PWM]" dans cet autre tutoriel)
  • 16 ADC - Convertisseur Analogique->Digital permettant de lire une tension analogie (pratique pour utiliser des senseurs flex, photo-résistance, potentiomètre, etc).
  • 2 DAC - Très rares sur les cartes de prototypages, les convertisseurs Digital->Analogique permettent de produire des tensions analogiques en sortie. Grâce à cela, vous pouvez produire divers types de signaux (en dent de scie, sinusoide, ... et même du son).
  • 13 timers - Les timers permettent de mesurer des durées et d'exécuter du code/fonction à intervalle régulier. C'est un élément de synchronisation important lorsque l'on désire écrire des applications avancées.
  • 16 ext int - Les interruptions externes permettent d'interrompre le programme principal pour exécuter du code (fonction d’interruption) lorsqu'une broche change d'état. Cela permet d'écrire des programmes réagissant instantanément à changement de conditions physique autour du la carte. Exemple: arrêter immédiatement des moteurs si l'arrêt d'urgence est activé.
  • 1 RTC - L'horloge temps réel vous permet de connaître l'heure, de mesurer des laps de temps assez grand, de créer des exécutions basées sur un calendrier, de réaliser des horloges. Le RTC est un élément utile qui manque souvent dans les plateformes de prototypage (comme c'est la cas pour Raspberry, Arduino ou encore de Spark Core où le RTC n'est pas exploitée)
  • 4 LEDs - Les LEDs/DELs sont bien pratiques pour informer l'utilisateur sur l'état du programme. En avoir sur la carte permet de tester/prototyper rapidement du code sans avoir besoin de faire des raccordements.
  • 1 Accéléromètre - PyBoard fut conçue avec la robotique comme finalité. Du coup, Damien à intégrer un accéléromètre à même la carte. Un tel dispositif permet de mesurer les accélération (cas pratique: un smartphone qui tombe) mais surtout l’accélération terrestre G sur les 3 axes. Cette accélération terrestre responsable de la gravité est dirigée vers le centre de la terre, en mesurant cette accélération sur 3 axes, il est donc possible de déterminer la position/orientation 3D de la carte par rapport au sol (cas pratique: la rotation automatique des écrans sur un smartphone, tenue d'équilibre pour un robot bipède).

Pour les friands de détails

PyBoard sous le capot

  • Microcontroleur STM32F405RG (fiche technique)
  • CPU Cortex-M4 cadencé 168 MHz avec unité de calcul flottant à 32-bit.
  • 1 Mb de mémoire Flash pour le stockage, 192 Kb de RAM.
  • Connecteur USB microB avec support logiciel USB Série, périphérique de stockage de masse USB, et USB HID (souris, clavier).
  • connecteur pour carte micro SD.
  • Accéléromètre 3-axes MMA7660 FreeScale (fiche technique). Jusqu'à 64 échantillonnages 6-bit par seconde par axe.
  • 4 LEDs, 1 bouton Reset, un bouton utilisateur.
  • Un régulateur 3.3V LDO (à faible perte) de 300mA. Alimenté depuis le connecteur USB ou alimentation externe entre 3.6V et 10V.
  • Horloge Temps Réel (RTC) avec date et heure.
  • 30 broches d'entrée/sortie GPIO, 28 sont tolérantes 5V (excepté en mode ADC / Analogique->Digital).
  • Communication:
    • 2 bus SPI,
    • 2 bus CAN,
    • 2 bus I2C,
    • 5 USART (port série).
  • 14x entrées analogiques avec résolution 12-bit, Valeur entre 0 et 4095 (ADC, Analogic to Digital Converter).
  • 2x sorties analogiques (DAC, Digital to Analogic Converter).
  • Dimension de la carte: 33 x 40mm.
  • Poids de la carte: 6 grammes.
  • Connexion sur la carte: 46 trous avec empattement standard de 2.54mm.

Brochage

Pybv10-pinout.jpg
Crédit: MicroPython micropython.org

L'interpréteur Micro Python

Micro Python est une ré-écriture complète d'un interpréteur Python spécialement, ré-écriture conduite pour fonctionner sur des systèmes MicroControleur ayant une mémoire RAM et Flash limitée. Lorsque des décisions de conceptions se présentait, la première priorité était celles permettant de minimiser l'utilisation de la RAM, puis minimisation de la taille du code, et finalement celle permettant d'augmenter la vitesse d'exécution.

Certaines caractéristiques importantes de l'implémentation de Python son reprise ci-dessous.

  • Suivre la grammaire de Python 3.3 ainsi que la sémantique du langage. Cela signifie que Micro Python produit un byte code équivalent (jusqu'à l'optimisation) à va version 3.3 CPython officiel.
  • La taille du binaire optimisé (en code machine Thumb v2) fait environ 60Kb.
    Cela inclus le parser, compilateur, environnement d'exécution et garbage collector MAIS exclus tous les autre code comme le système de fichier et bibliothèques spécifiques au microcontroleur. Cette taille augmente si vous ajoutez plus de bibliothèques.
  • La taille de tout le code, incluant le support FAT, carte SD, USB série, périphérique de stockage USB, USB HID, Bluetooth, LCD, servo, timer fait environ 110 Kb.
  • La taille minimale de la RAM requise pour compiler et exécuter "print('hello world')" est d'environ 4 Kb.
  • La mémoire est gérée en utilisant un garbage collector (ramasse miette') rapide, non-precise, mark-sweep. Cela élimine la surcharge de code provoquée par une implémentation en "reference counting" (compteur de référence) en mémoire Flash. La taille des objet en RAM diminue par la même occasion. Avec un CPU rapide et une petite quantité de RAM, la processus de collection (garbage collection) prend moins de 4ms. La surcharge de RAM du garbage collector est de 2 bits par 32 bytes soit 1 Kb pour 128Kb de mémoire RAM utilisable.
  • Taille des objets int (entier): 4 bytes, stocké sur la stack (pile) ou directement dans un tuple/list/dictionnaire.
  • Taille des autres objets: 32 bytes, plus extra pour, par exemple, les éléments d'une liste.
  • Limite sur le nombre d'objets: aucune, pour autant qu'il y a assez de RAM.
  • La grammaire est encodée dans une table compacte en utilisant EBNF qui permet de faire une interprétation à la volée pendant la phase de parsin.
  • La RAM est minimisée durant la compilation en effectuant 3 passes séparée sur les mêmes structures de données.
  • Il y a 4 types de générateur de code (code emitters), sélectionnable à l'aide de décorateur de fonction Python:
    • byte code (compressé),
    • code natif avec type natif,
    • code natif avec support du langage python,
    • Assembleur inline assembler.
  • Exécution du code:
    • Le byte code est exécuté sur une machine virtuelle, similaire à CPython.
    • Le code natif ou chaque byte code est décompressé en sont équivalent 'code machine' et supporte pleinement le langage Python. Cela consomme 2 à 3 fois plus de RAM mais s'exécute aussi 2 à 3 fois plus vite que du byte code.
    • Le code natif avec type natif vois sont byte code décomposé en code machine et suppose que les entiers font moins de de 31 bits (ce qui permet d'utiliser des instructions machines simples pour des opérations sur les entiers et les pointeurs). Vous pouvez penser à cela comme "syntaxe Python, sémantique C". Pour les boucles effectuant des opération arithmétiques et manipulations de bit, l'exécution est presque aussi rapide qu'un programme en C.
    • L'emission d'assembleur inline utilise la grammaire Python mais interprète une liste d'instruction code machine. L'assembleur Inline peut être appelé depuis un code Python normal avec des entiers et pointeurs comme arguments.
  • Les exceptions Python sont gérées en utilisant une variante de setjmp/longjmp. Cela réduit la quantité mémoire Flash et RAM nécessaire pour implémenter les exceptions.
  • Une fonction (byte code, native ou assembleur inline) peut être appelé sur une interruption pour autant qu'il n'alloue pas de mémoire sur la heap (le Tas, étant donné qu'une interruption ne peut pas être appelée durant une phase de collecte garbage collecteur). Dans la pratique, cela ne représente pas une grande restriction étant donné qu'il est possible beaucoup de choses uniquement en utilisant la mémoire accessible sur la stack (la pile). Par exemple, vous pouvez faire des boucles avec while/for, réaliser des opérations arithmétiques entière et manipulations booléennes (mais pas des grands nombres), appeler d'autres fonctions, accéder et écraser des éléments d'une collection tels que bytearrays (mais pas en créer un nouveau).

Micro Python sur PC

Le langage Micro Python peut aussi être exécuté sur un PC (il a été développé sous Linux avec une machine 64-bit) et peut être utilisé comme une version légère de Python où l'économie de mémoire est important. La version PC de Micro Python (compilant du byte code) fonctionne plus rapidement que CPython dans différents benchmarks testé par Damien George, et l'option de compilation native rend Micro Python significativement plus rapide que CPython.

Vous trouverez cette version PC sur le GitHub de Micro Python.

Séquence de Boot Micro Python

Vous pouvez voir Micro Python comme un "mini système d'exploitation Python" et le processus de démarrage fonctionne comme suit:

  • Mise sous tension ou Reset (réinitialisation matérielle).
    • SI le connecteur DFU (device firmware upgrade) est actif (BOOT0 sur 3.3V) ALORS le périphérique rentre en mode DFU et vous permet ainsi de faire des mise-à-jour du binaire Micro Python ou téléverser vos propres programmes C/C++.
  • SINON la carte entre en mode "boot" et la LED boot s'allume.

Le mode Boot...

  • Vérifie la présence d'un système de fichier dans la mémoire Flash.
    • SI non existante ou corrompue ALORS crée un nouveau système de fichier est créé.
  • Vérifie la présence de /boot.py.
    • SI non existant ALORS un tout nouveau fichier est boot.py est créé.
  • Exécute /boot.py pour configuration USB et autres paramètres de bas-niveau qui ne peuvent pas être modifiés sans un Reset.
  • Initialise l'interface USB, en fonction de la configuration de boot.py. Par défaut, c'est un CDC VCP (virtual communications port, pour rediriger stdio) et MSD (mass storage device, périphérique de stockage de masse pour la Flash et carte SD).
    Le MSD permet à un PC Linux/Mac/Windows d'accéder au système de fichier de la Flash et de la carte SD comme s'il s'agissait d'un lecteur USB. De cette façon, vous pouvez facilement copier des scripts Python sur la carte... ou placer et récupérer des fichiers.
  • La séquence de Boot terminée avec succès, la LED boot s’éteint.

Après la séquence de boot:

  • Le script Python principal (nommé "main" en anglais) est exécuté s'il existe.
    Par défaut, c'est le fichier /src/main.py. Il s'agit de votre programme Python principal et il peut faire tout ce que vous voulez!
  • SI le script principal n'existe pas (ou s'il est terminé)
    ALORS la carte rentre en mode REPL (read-evaluate-print-loop, boucle-lecture-evaluation-affichage). Cela vous offre un Interpréteur Python Standard via la connexion USB série.
    Sortir de ce mode exécutera une reset logiciel (soft-reset) de la carte.

Licence Micro Python

Micro Python rst sous licence MIT.

J'ai repris le texte de licence tel que disponible sur le site MicroPython.org (docs.micropython.org/en/latest/license.html)

The MIT License (MIT)

Copyright (c) 2013, 2014 Damien P. George, and others

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the 
Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the 
Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A 
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Où Acheter

Vous pouvez vous procurer une carte Micro Python PyBoard chez MCHobby (vendus uniquement sur stock)!



Source: Micro Python Python for microcontrollers écrit par/written by Damien P.George

Traduit par Meurisse D. pour MCHobby.be - Translated by Meurisse D. for MCHobby.be

Traduit avec l'autorisation de micropython.org - Translated with the authorisation of micropython.org

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.