howto Carte Pico(W)

Comment accéder à distance à l’interpréteur Python ?

  1. Depuis un IDE (→ VSCode, Thonny)

  2. Avec un émulateur de terminal série en le configurant avec la configuration suivante :

    • baud rate : 115200 bauds

    • data bits : 8

    • parity : none

    • stop bits : 1

      • La fin de ligne doit être CR + LF

      • Avec PuTTY, RealTerm aucun contrôle de flux n’est nécessaire. Cependant, avec Termite, il faut mettre en place un contrôle de flux RTS/CTS pour obtenir un prompt. 🤔

  3. Avec l’outil mpremote

    Exemples de commandes :
    pip install --user mpremote (1)
    python -m mpremote help (2)
    python -m mpremote connect list (3)
    python -m mpremote connect COM27 (4)
    python -m mpremote run free.py (5)
    python -m mpremote fs ls (6)
    python -m mpremote mip install https://raw.githubusercontent.com/mcauser/micropython-tm1637/master/tm1637.py (7)
    python -m mpremote cp :fs-info.py . (8)
    python -m mpremote cp ./get-exif.py : (9)
    python -m mpremote cp ./tm1637.py :/lib/tm1637.py (10)
    1 Installation de l’outil avec pip. Remarque : ce paquet n’est pas présent dans les dépôts Anaconda
    2 Aide sur les commandes disponibles dans mpremote
    3 Commande qui affiche les ports série sur lesquels une carte Pico est branchée
    4 Accès au REPL de la carte Pico(W) sur le port indiqué (ici COM27)
    5 Exécution en RAM du script python free.py présent sur la machine depuis laquelle on accède à la carte Pico(W)
    6 Liste les fichiers présents sur la Pico(W)
    7 Installation du module tm1637
    8 copie le fichier fs-info.py présent dans la racine de la Pico(W) dans le répertoire courant du PC de développement
    9 copie le fichier `get-exif.py``présent dans le répertoire courant du PC de développement dans la racine de la Pico(W)
    10 copie le fichier tm1637.py présent dans le répertoire courant du PC de développement dans le répertoire \lib de la Pico(W)
  4. Avec l’outil rshell :

    Pour l’utiliser, il faut d’abord l’installer :

    python -m pip install rshell
    conda install pyreadline3 (1)
    1 cette installation est nécessaire sur Windows sous peine d’avoir l’erreur “AttributeError: module 'collections' has no attribute 'Callable'” lors du lancement de l’exécution de rshell

    Une fois installé, on peut l’exécuter en lui fournissant le port où est connecté la Pico(W) :

    (rpi-pico)
    [C:\Users\claud]
    (00:03:37) > rshell -p com27
    Using buffer-size of 32
    Connecting to com27 (buffer-size 32)...
    Trying to connect to REPL  connected
    Retrieving sysname ... rp2
    Testing if ubinascii.unhexlify exists ... Y
    Retrieving root directories ... /lib/
    Setting time ... Aug 20, 2024 16:15:09
    Evaluating board_name ... pyboard (1)
    Retrieving time epoch ... Jan 01, 1970
    Welcome to rshell. Use the exit command to exit rshell.
    C:\Users\claud> boards (2)
    pyboard @ COM27 connected Epoch: 1970 Dirs: /lib /pyboard/lib
    C:\Users\claud> df (3)
    Filesystem    Block size  Blocks  Used  Available  Capacity  Mounted on
    /lib@pyboard        4096     212     6        206        3%  /pyboard/lib
    C:\Users\claud> cd /pyboard (4)
    /pyboard> ls (5)
    lib/       fs-info.py
    /pyboard> cp fs-info.py /Users/claud/fs.py (6)
    Copying '/pyboard/fs-info.py' to '/Users/claud' ...
    1 Nom sous lequel la carte est reconnue
    2 Commande qui affiche les cartes connectées ainsi que les répertoires mappés dessus
    3 Affiche le taux d’utilisation de la mémoire flash attribuée au système de fichiers
    4 se déplace à la racine du système de fichiers
    5 affiche les fichiers/répertoires du répertoire courant
    6 Copie le fichier fs-info.py dans le répertoire C:\Windows\Users\claud du PC de développement

Comment afficher les ressources disponibles ?

  • Aide sur les modules :

    >>> help('modules') (1)
    __main__          asyncio/__init__  hashlib           rp2
    _asyncio          asyncio/core      heapq             select
    _boot             asyncio/event     io                socket
    _boot_fat         asyncio/funcs     json              ssl
    _onewire          asyncio/lock      lwip              struct
    [...]
    >>> import json
    >>> help(json) (2)
    object <module 'json'> is of type module
      __name__ -- json
      dump -- <function>
      dumps -- <function>
      load -- <function>
      loads -- <function>
    >>> import machine
    >>> help(machine.Pin.board) (3)
    object <class 'board'> is of type type
      GP0 -- Pin(GPIO0, mode=ALT, pull=PULL_DOWN, alt=31)
      GP1 -- Pin(GPIO1, mode=ALT, pull=PULL_DOWN, alt=31)
      [...]
      LED -- Pin(EXT_GPIO0, mode=IN)
      WL_GPIO0 -- Pin(EXT_GPIO0, mode=IN)
      [...]
    1 Liste des modules présents sur la carte. Noter la présence de simples quotes autour de modules
    2 Liste des fonctions disponibles dans le module json après son importation
    3 Liste des constantes prédéfinies désignant les broches
  • Mémoire disponible :

    On peut exécuter le script suivant :

    free.py
    import os
    
    stat = os.statvfs("/")
    size = stat[1] * stat[2]
    free = stat[0] * stat[3]
    used = size - free
    
    KB = 1024
    MB = 1024 * 1024
    
    print("Size : {:,} bytes, {:,} KB, {} MB".format(size, size / KB, size / MB))
    print("Used : {:,} bytes, {:,} KB, {} MB".format(used, used / KB, used / MB))
    print("Free : {:,} bytes, {:,} KB, {} MB".format(free, free / KB, free / MB))
    
    if   size > 8 * MB : board, flash = "Unknown", 16 * MB
    elif size > 4 * MB : board, flash = "Unknown",  8 * MB
    elif size > 2 * MB : board, flash = "Unknown",  4 * MB
    elif size > 1 * MB : board, flash = "Pico",     2 * MB
    else               : board, flash = "Pico W",   2 * MB
    print("{} board with {} MB Flash".format(board, flash // MB))
    Resultat d’exécution :
    C:\Users\claud>python -m mpremote run ./free.py
    Size : 868,352 bytes, 848 KB, 0.828125 MB
    Used : 16,384 bytes, 16 KB, 0.015625 MB
    Free : 851,968 bytes, 832 KB, 0.8125 MB
    Pico W board with 2 MB Flash

    On peut aussi obtenir l’information depuis rshell

    /pyboard> df (3)
    Filesystem    Block size  Blocks  Used  Available  Capacity  Mounted on
    /lib@pyboard        4096     212     6        206        3%  /pyboard/lib

🞄  🞄  🞄