Copier un fichier sur la flash

La carte Micropython dispose d'une mémoire Flash dans laquelle sont placés les fichiers micropython *.py utiles.

On a 2 cas de figure :

  • soit le fichier est un fichier qui est du "code actif", un script Micropython que vous avez écrit.

  • soit le fichier est un fichier qui est une librairie, appelée par un code actif. C'est le même statut qu'un "module".

Note

Fondamentalement, d'un point de vue Micropython, c'est la même chose dans tous les cas, c'est du code Micropython. La seule chose qui va changer, c'est le comportement du code : dans un script "actif", des fonctions sont immédiatement appelées et exécutées au lancement, dans un script "librairie", en général, ce n'est qu'un ensemble de fonctions mais aucune n'est exécutée tant qu'elle n'est pas appelée dans un code "actif".

Note

Lorsque l'on fait un import avec Micropython, on a grosso modo 2 cas de figures :

  • soit on importe des modules qui sont natifs à Micropython et sont directement appelable sans qu'il n'y ait rien de plus à faire que d'avoir installé Micropython (une fois pour toute à la première utilisation, ou encore après une mise à jour)

  • soit on importe des fichiers *.py qui sont présents sur la flash et se comporteront comme des modules. Pour les distinguer des modules natifs, j'ai tendance à les appeler des "librairies" car il faut les placer sur la carte. Mais en soi, c'est strictement la même chose qu'un module.

Solution 1 : A partir de l'éditeur Thonny

C'est la façon la plus simple de copier un code sur la carte : sélectionner le menu Device > Upload script as main script (ou faire CTRL + U) ce qui copie le code actuel dans le main.py.

Noter que cette solution est également valable pour uploader une librairie : ouvrir le fichier de la librairie dans l'éditeur et sélectionner le menu Device > Upload current script with current name ce qui copie le code le fichier sur la carte en préservant son nom. C'est de plus une façon élégante de mettre au point une librairie qui sera simultanément en copie sur le poste fixe et sur la carte.

Solution 2 : gestionnaire de fichier (pas disponible pour toutes les cartes)

Une autre solution est la plus simple et la plus immédiate : on ouvre la carte micropython qui apparaît sur le système comme un volume. C'est à l'espace en mémoire Flash auquel on accède ainis. On peut alors copier/coller un fichier *.py écrit en Micropython sur la carte.

Solution 3 : Avec l'interpréteur ?

A priori, avec l'interpréteur, on ne peut pas interagir avec le poste principal, seulement avec la carte Python. Sauf RSHell qui permet cela. Enfin, sur le Pi Pico, cela a l'air de poser problème. (Mars 2021)

Par contre, on peut réaliser facilement des opérations sur les fichiers de la carte à l'aide des fonctions du module uos

Solution 2 : Avec Pyboard

On peut réaliser des opérations sur le système de fichier de la carte avec Pyboard :

python3 pyboard.py --device /dev/ttyACM3 -f cp gpio_out_led_timer.py :main.py

Noter qu'ici, on fait "d'une pierre 2 coups" en copiant sur la carte et en renommant simultanément le fichier

Note

Les chemins correspondant à la carte microPython lorsqu'ils sont appelés depuis Pyboard.py sont précédés d'un : Le : représente la racine de la Flash de la carte.

A noter que l'on peut facilement réaliser de la sorte quelques opérations simples :

Afficher le contenu du fichier boot.py

python3 pyboard.py --device /dev/ttyACM3 -f cat :boot.py

Lister le contenu de la Flash :

python3 pyboard.py --device /dev/ttyACM3 -f ls :

Ce qui donne par exemple :

         304 main.py
        2721 pybcdc.inf
         528 README.txt
         302 boot.py
       13474 upyduino.py
           7 test.txt
           0 test/
        7255 lcd_api.py
        3091 pyb_i2c_lcd.py

Effacer un fichier sur la carte :

python3 pyboard.py --device /dev/ttyACM3 -f rm :trans.py