Différences entre versions de « FEATHER-CHARGER-MODULE-FROZEN »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(6 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
 
{{FEATHER-CHARGER-MODULE-NAV}}
 
{{FEATHER-CHARGER-MODULE-NAV}}
 
{{traduction}}
 
  
 
{{ADFImage|FEATHER-CHARGER-MODULE-FROZEN-00.jpg}}
 
{{ADFImage|FEATHER-CHARGER-MODULE-FROZEN-00.jpg}}
Ligne 11 : Ligne 9 :
 
Une fois le code gelé ("frozen" en anglais), il peut être rapidement chargé et interprété par MicroPython sans besoin de mémoire et temps de traitement supplémentaire.
 
Une fois le code gelé ("frozen" en anglais), il peut être rapidement chargé et interprété par MicroPython sans besoin de mémoire et temps de traitement supplémentaire.
  
Avec MicroPython, vous pouvez geler vos propres modules et les ajouter au firmware en réalisant une compilation personnalisée du Firmware MicroPython (pour votre carte). {{traduction}} This allows you to write more complex modules than you might be able to run directly from .py Python code files as previously shown.
+
Avec MicroPython, vous pouvez geler vos propres modules et les ajouter au firmware en réalisant une compilation personnalisée du Firmware MicroPython (pour votre carte). Cela vous permet d'écrire des modules nettement plus complexes que vous pourrez importer directement dans vos fichiers .py (comme nous l'avons fait jusque maintenant).
  
Be aware that freezing modules is a bit advanced and requires you to make a custom build of MicroPython's firmware. For some boards like the ESP8266 it's relatively easy to build MicroPython firmware, but for others it might require more advanced knowledge of setting up and using compiler toolchains, etc.
+
Sachez que les modules gelés (''Frozen Modules'') est une technique avancées qui nécessite la compilation d'un firmware MicroPython personalisé. Pour certaines cartes comme l'ESP8266, il est assez facile de compiler le firmware MicroPython mais d'autres cartes nécessiterons des connaissances plus avancées pour préparer et utiliser la chaîne de compilation.
  
Before you look at freezing modules make sure you can compile MicroPython firmware for your board. For the ESP8266 check out [https://learn.adafruit.com/building-and-running-micropython-on-the-esp8266/overview this handy guide on how to compile MicroPython firmware] using a special Linux-based virtual machine. For other boards like the pyboard, WiPy, etc. for now you'll need to check the [https://github.com/micropython/micropython MicroPython source] to see how to setup their toolchains and compile firmware.
+
Assurez vous de pouvoir compiler un firmware MicroPython pour votre carte avant de vous lancer dans la technique des modules gelés. Pour l'ESP8266, voyez le tutoriel Adafruit "[https://learn.adafruit.com/building-and-running-micropython-on-the-esp8266/overview guide on how to compile MicroPython firmware]" qui utilise une machine virtuelle spéciale basée sur Linux ([https://www.vagrantup.com/docs/ Vagrant]). Pour les autres cartes tels que pyboard, WiPy, etc. vous pouvez consulter le [https://github.com/micropython/micropython GitHub des sources de MicroPython] pour voir comment configurer leur chaîne de compilation et compiler leur firmware.
  
Also be aware freezing modules is somewhat new for boards like the ESP8266 and the process might change over time. If the steps below have issues, check the latest documentation, code on GitHub, and MicroPython forums to see if more up to date information on freezing modules is availble.
+
Gardez également à l'esprit que la technique "Frozen Module" est assez récent pour une carte comme l'ESP8266 et que ce processus pourraît changer à l'avenir. Si vous rencontrez un problème avec l'une des étapes ci-dessous alors référez vous ) la documentation officielle, code sur GitHub et les Forums MicroPython pour obtenir des informations plus récentes.
  
For this guide we'll look specifically at the ESP8266 and how to add a frozen module to the board's MicroPython firmware. Start by looking at the source of the MicroPython ESP8266 firmware. If you're using the Vagrant virtual machine from the [https://github.com/micropython/micropython previously mentioned firmware building guide] then you'll want to enter the VM with SSH and navigate to the '''~/micropython/esp8266''' folderNotice there are two subdirectories, '''scripts''' and '''modules''':
+
Dans ce guide, nous allons plus particulièrement nous concentrer sur l'ESP8266 et comment ajouter des modules gelés (''Frozen Modules'') au Firmware de la carte. Nous allons commencer par nous intéresser aux code source du firmware MicroPython pour ESP8266. Si vous utiliser utilisez une machine virtuelle Vagrant comme [https://learn.adafruit.com/building-and-running-micropython-on-the-esp8266/overview mentionné précédemment à propos de ce guide de compilation] alors vous aurez besoin de vous connecter sur la machine virtuelle en utilisant une session SSH. Ceci fait, naviguez jusqu'au répertoire '''~/micropython/esp8266'''.  Notez qu'il y a les sous-répertoires '''scripts''' et '''modules''':
  
 
{{ADFImage|FEATHER-CHARGER-MODULE-FROZEN-21.png}}
 
{{ADFImage|FEATHER-CHARGER-MODULE-FROZEN-21.png}}
  
There's an important difference between these two folders.  The '''scripts''' folder is for Python code that will be 'baked-in' to the firmware but '''not frozen''' into more efficient and smaller code. Everything in the scripts folder is just stored as the raw Python code in the board's flash memory. This saves you from having to copy that code onto the board's filesystem, but doesn't save a lot of memory or processing time.
+
Il y a une différence importante entre ces deux répertoires!
 +
 
 +
Le répertoire '''scripts''' est destiné au code Python qui sera inclus dans le Firmware mais '''non gelés''' (''Not Frozen''). Le code sera moins condensé et moins efficace. Tout ce qui se trouve dans le répertoire '''scripts''' sera stocké comme du code Python brute dans la mémoire flash de la carte. Cela vous évite de devoir copier les fichiers -vous même- les fichiers sur le système de fichier de la carte {{underline|mais ne permet pas d'économiser de la mémoire et du temps de traitement}} car le code Python doit toujours être interprété.
 +
 
 +
Le répertoire  '''modules''' est destiné au code Python qui sera gelé dans le Firmware. Ce code est transformé en [https://fr.wikipedia.org/wiki/Bytecode bytecode] (''wikipedia'') avant d'être intégré au firmware. Le bytecode est beaucoup plus efficace et c'est dans ce répertoire que vous devez placer les scripts que vous voulez "geler" pour économiser de la mémoire.
  
The '''modules''' folder is for Python code that will be frozen into more efficient bytecode.  This is where you want to place scripts that you'd like freeze to save memory.
+
Nous allons essayer d'ajouter un nouveau module "gelé" pour tester rapidement la fonctionnalité. Créez un fichier '''test.py''' à l'intérieur du répertoire '''modules'''.  
  
Try adding a new frozen module as a quick test.  Inside the '''modules''' folder create a '''test.py''' file and add the following code to it:
+
Ajoutez le code suivant à votre fichier '''test.py''':
  
 
  <syntaxhighlight lang="python">
 
  <syntaxhighlight lang="python">
Ligne 37 : Ligne 39 :
 
  </syntaxhighlight>
 
  </syntaxhighlight>
  
Now rebuild the ESP8266 MicroPython firmware. From inside the VM's '''~/micropython/esp8266''' folder run:
+
Maintenant, recompilez votre firmware MicroPython pour ESP8266. Exécutez la commande suivante depuis le répertoire '''~/micropython/esp8266''' de votre machine virtuelle:
  
 
  <nowiki>make</nowiki>
 
  <nowiki>make</nowiki>
  
Notice in the output the '''MPY modules/test.py''' line, this shows the '''test.py''' module was picked up by the build and frozen into bytecode:
+
Notez la ligne '''MPY modules/test.py''' dans les messages de compilation. Cela indique que le module '''test.py''' a été sélectionné par la compilation et gelé en bytecode:
  
 
{{ADFImage|FEATHER-CHARGER-MODULE-FROZEN-22.png}}
 
{{ADFImage|FEATHER-CHARGER-MODULE-FROZEN-22.png}}
  
If you don't see this line for your module then try running the '''make clean''' command and then '''make''' command again.
+
Si vous ne constatez pas cette ligne pour les modules que vous tentez de geler alors essayez d'exécuter '''make clean''' puis encore une fois '''make'''.
 +
 
 +
Vous pouvez maintenant copier et flasher le nouveau firmware fraîchement compiler sur votre ESP8266.  
  
Now copy out the newly built firmware and flash it to the ESP8266. Remember you're now using a development build so debug output will be enabled and features like the WebREPL must be manually started.
+
Souvenez vous que vous utilisez une compilation de type "développement". Les messages de débogage sont donc actif et des fonctionnalités tels que le WebREPL doivent être activés manuellement.
  
Connect to the REPL of the board with the new firmware and try using the test module's functions by running:
+
Connectez vous en REPL sur votre carte exécutant votre nouveau firmware personnalisé. Essayez les fonctions du module "test" en saisissant les commandes suivantes:
  
 
  <syntaxhighlight lang="python">
 
  <syntaxhighlight lang="python">
Ligne 59 : Ligne 63 :
 
{{ADFImage|FEATHER-CHARGER-MODULE-FROZEN-23.png}}
 
{{ADFImage|FEATHER-CHARGER-MODULE-FROZEN-23.png}}
  
You should see the module import and functions work just like if the .py file was on the filesystem!
+
Le module doit pouvoir être importé sans erreur... et l'appel des fonctions {{fname|add()}} et {{fname|substract()}} doit fonctionner exactement de la même façon que si le ficher .py était stocké dans le système de fichier!
  
You can also freeze Python packages inside the '''modules''' folder. Just create a directory for each package and put inside it an '''__init__.py''' and other source files for the package.
+
Vous pouvez également geler des paquets/packages Python à l'intérieur du répertoire '''modules'''. Créez simplement un sous répertoire pour chacun des paquets/packages que vous désirez geler (et n'oubliez surtout pas de placer le fichier '''__init__.py''' à l'intérieur de celui-ci}.
  
Using the '''scripts''' folder to save Python module sources in flash memory is just like using the modules folder above. However note with the scripts folder you cannot put packages inside it, only single .py source files will currently work.  
+
Utiliser le répertoire '''scripts''' pour sauver des modules Python en mémoire Flash fonctionne exactement sur le même principe que le répertoire '''modules''' ci-dessus. Cependant, vous ne pourrez pas créer paquet/package dans le répertoire '''scripts''', seul de simples fichiers .py peuvent y être placés.  
  
Remember the '''scripts''' folder is only for scripts that will be saved as-is to flash memory. The '''modules''' folder is for freezing modules and packages so they're in flash memory and more efficient to load and store. As you develop your own complex MicroPython scripts and modules consider freezing them in the MicroPython firmware to reduce memory usage and increase performance!
+
Encore un dernier rappel: Le répertoire '''scripts''' est uniquement destiné à recevoir des fichiers Python directement sauvé dans la mémoire flash. Le répertoire '''modules''' contient des fichiers et paquet/package '''gelés/frozen''' qui sont -eux aussi- stockés en mémoire flash {{underline|mais au stockage et chargement plus efficace}}. Si vous développez des modules et scripts MicroPython complexes alors prenez temps de considérer l'approche "Frozen module" pour réduire l'empreinte mémoire et accroître les performances!
  
 
{{FEATHER-CHARGER-MODULE-TRAILER}}
 
{{FEATHER-CHARGER-MODULE-TRAILER}}

Version actuelle datée du 12 novembre 2016 à 13:03


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.

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Dans la section précédentes, nous avons appris a créer et charger des modules et paquet/package Python sur notre carte MicroPython. C'est une façon facile et rapide de charger des modules, cependant, il y a également des limitations importantes concernant le chargement et l'exécution de module et paquet depuis le système de fichier. La plus grande limitation concerne concerne l'interpréteur Python qui doit charger le code et en faire l'analyse syntaxique (Wikipedia - aussi dit "parsing" en anglais). Cette opération requière du temps mais aussi de la mémoire, mémoire très limitée sur les microcontrôleurs. Vous pourriez même trouver des codes sources tellement grand qu'ils ne pourraient pas être chargé par l'interpréteur de la carte MicroPython!

Il existe une façon de pré-compiler les modules pour qu'ils soient "inclus" dans le firmware MicroPython et qu'ils utilisent moins de mémoire. MicroPython peut comprimer presque tous les éléments du langage Python dans quelques kilooctets de mémoire en "gelant" le code Python. Cela permet de stocker un code sous un format plus efficace appelé byte-code (du Pyhton déja interprété). Une autre approche permet même de compiler ce code en instruction native (pour le microcontrôleur de la carte). Ces deux dernières approches étant beaucoup plus efficace que des fichiers Python.

Une fois le code gelé ("frozen" en anglais), il peut être rapidement chargé et interprété par MicroPython sans besoin de mémoire et temps de traitement supplémentaire.

Avec MicroPython, vous pouvez geler vos propres modules et les ajouter au firmware en réalisant une compilation personnalisée du Firmware MicroPython (pour votre carte). Cela vous permet d'écrire des modules nettement plus complexes que vous pourrez importer directement dans vos fichiers .py (comme nous l'avons fait jusque maintenant).

Sachez que les modules gelés (Frozen Modules) est une technique avancées qui nécessite la compilation d'un firmware MicroPython personalisé. Pour certaines cartes comme l'ESP8266, il est assez facile de compiler le firmware MicroPython mais d'autres cartes nécessiterons des connaissances plus avancées pour préparer et utiliser la chaîne de compilation.

Assurez vous de pouvoir compiler un firmware MicroPython pour votre carte avant de vous lancer dans la technique des modules gelés. Pour l'ESP8266, voyez le tutoriel Adafruit "guide on how to compile MicroPython firmware" qui utilise une machine virtuelle spéciale basée sur Linux (Vagrant). Pour les autres cartes tels que pyboard, WiPy, etc. vous pouvez consulter le GitHub des sources de MicroPython pour voir comment configurer leur chaîne de compilation et compiler leur firmware.

Gardez également à l'esprit que la technique "Frozen Module" est assez récent pour une carte comme l'ESP8266 et que ce processus pourraît changer à l'avenir. Si vous rencontrez un problème avec l'une des étapes ci-dessous alors référez vous ) la documentation officielle, code sur GitHub et les Forums MicroPython pour obtenir des informations plus récentes.

Dans ce guide, nous allons plus particulièrement nous concentrer sur l'ESP8266 et comment ajouter des modules gelés (Frozen Modules) au Firmware de la carte. Nous allons commencer par nous intéresser aux code source du firmware MicroPython pour ESP8266. Si vous utiliser utilisez une machine virtuelle Vagrant comme mentionné précédemment à propos de ce guide de compilation alors vous aurez besoin de vous connecter sur la machine virtuelle en utilisant une session SSH. Ceci fait, naviguez jusqu'au répertoire ~/micropython/esp8266. Notez qu'il y a les sous-répertoires scripts et modules:

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Il y a une différence importante entre ces deux répertoires!

Le répertoire scripts est destiné au code Python qui sera inclus dans le Firmware mais non gelés (Not Frozen). Le code sera moins condensé et moins efficace. Tout ce qui se trouve dans le répertoire scripts sera stocké comme du code Python brute dans la mémoire flash de la carte. Cela vous évite de devoir copier les fichiers -vous même- les fichiers sur le système de fichier de la carte mais ne permet pas d'économiser de la mémoire et du temps de traitement car le code Python doit toujours être interprété.

Le répertoire modules est destiné au code Python qui sera gelé dans le Firmware. Ce code est transformé en bytecode (wikipedia) avant d'être intégré au firmware. Le bytecode est beaucoup plus efficace et c'est dans ce répertoire que vous devez placer les scripts que vous voulez "geler" pour économiser de la mémoire.

Nous allons essayer d'ajouter un nouveau module "gelé" pour tester rapidement la fonctionnalité. Créez un fichier test.py à l'intérieur du répertoire modules.

Ajoutez le code suivant à votre fichier test.py:

def add(a, b):
        return a + b

def subtract(a, b):
        return a - b

Maintenant, recompilez votre firmware MicroPython pour ESP8266. Exécutez la commande suivante depuis le répertoire ~/micropython/esp8266 de votre machine virtuelle:

make

Notez la ligne MPY modules/test.py dans les messages de compilation. Cela indique que le module test.py a été sélectionné par la compilation et gelé en bytecode:

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Si vous ne constatez pas cette ligne pour les modules que vous tentez de geler alors essayez d'exécuter make clean puis encore une fois make.

Vous pouvez maintenant copier et flasher le nouveau firmware fraîchement compiler sur votre ESP8266.

Souvenez vous que vous utilisez une compilation de type "développement". Les messages de débogage sont donc actif et des fonctionnalités tels que le WebREPL doivent être activés manuellement.

Connectez vous en REPL sur votre carte exécutant votre nouveau firmware personnalisé. Essayez les fonctions du module "test" en saisissant les commandes suivantes:

import test
test.add(1, 1)
test.subtract(1, 1)

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Le module doit pouvoir être importé sans erreur... et l'appel des fonctions add() et substract() doit fonctionner exactement de la même façon que si le ficher .py était stocké dans le système de fichier!

Vous pouvez également geler des paquets/packages Python à l'intérieur du répertoire modules. Créez simplement un sous répertoire pour chacun des paquets/packages que vous désirez geler (et n'oubliez surtout pas de placer le fichier __init__.py à l'intérieur de celui-ci}.

Utiliser le répertoire scripts pour sauver des modules Python en mémoire Flash fonctionne exactement sur le même principe que le répertoire modules ci-dessus. Cependant, vous ne pourrez pas créer paquet/package dans le répertoire scripts, seul de simples fichiers .py peuvent y être placés.

Encore un dernier rappel: Le répertoire scripts est uniquement destiné à recevoir des fichiers Python directement sauvé dans la mémoire flash. Le répertoire modules contient des fichiers et paquet/package gelés/frozen qui sont -eux aussi- stockés en mémoire flash mais au stockage et chargement plus efficace. Si vous développez des modules et scripts MicroPython complexes alors prenez temps de considérer l'approche "Frozen module" pour réduire l'empreinte mémoire et accroître les performances!


Source: MicroPython Basics: Loading Modules
Créé par Tony DiCola pour AdaFruit Industries.

Traduit par Meurisse D. pour MCHobby

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.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com