"Uploader" un code depuis la carte
Dans diverses situations, on peut avoir besion de faire une copie d'un code présent sur la carte sur le poste principal, ce que j'appelle uploader un code.
Ici, petit point sur les différentes possibilités.
Avec pyboard
Pyboard, le couteau suisse de la gestion de la carte Micropython permet de le faire.
Déjà première, chose, pour mémoire, on peut lister les fichiers présents sur la carte en faisant :
python3 pyboard.py --device /dev/ttyUSB0 -f ls :
Ensuite, pour copier un fichier de la carte dans le répertoire courant de l'ordinateur, on fera :
python3 pyboard.py --device /dev/ttyUSB0 -f cp :boot.py boot.py
Le fichier est ensuite disponible sur l'ordinateur.
A partir d'un code Pythoon
Commencer par lancer une interpréteur Python dans le répertoire où on souhaite copier le fichier en provenance de la carte. . Par exemple Jupyter en faisant :
jupyter-qtconsole
Il est possible de faire la même chose en exécutant la ligne de commande correspondante depuis un code Python sur l'ordinateur en faisant :
import subprocess
cmd=['python3','./pyboard.py', '--device', '/dev/ttyUSB0' , '-f', 'cp', ':boot.py', 'boot.py'] # '--no-follow']
subprocess.run(cmd)
Out[36]: CompletedProcess(args=['python3', './pyboard.py', '--device', '/dev/ttyUSB0', '-f', 'cp', ':boot.py', 'boot.py'], returncode=0)
Note
Si on a un problème, tester la commande depuis le terminal pour être sûr qu'elle s'exécute bien. La commande ne fonctionnera pas si le REPL est utilisé par un autre programme (Thonny, etc. ) qu'il faudra fermer le cas échéant.
Si la commande s'exécute correctement, elle renvoie le code 0.
En mode REPL depuis un code python
Commencer par lancer une interpréteur Python dans le répertoire où on souhaite copier le fichier en provenance de la carte. . Par exemple Jupyter en faisant :
jupyter-qtconsole
Si on a besoin de faire la manip' à partir d'un code Python en mode REPL, on pourra faire :
import pyboard
pyb=pyboard.Pyboard('/dev/ttyUSB0', 115200)
pyb.enter_raw_repl()
# chargement d'un code présent sur la carte micropython
ret=pyb.exec("""f=open("boot.py","r")
c=f.read()
f.close()
print(c)
""")
print(ret)
b'# This file is executed on every boot (including wake-boot from deepsleep)\r\n#import esp\r\n#esp.osdebug(None)\r\n#import webrepl\r\n#webrepl.start()\r\nprint("boot.py")\r\n\r\n'
f=open("boot.py","w")
f.write(ret.decode()) # ret est au format bytes
Out[14]: 164
f.close()
# verification
f=open("boot.py","r")
c=f.read()
f.close()
print(c)
Ce qui donne :
# This file is executed on every boot (including wake-boot from deepsleep)
#import esp
#esp.osdebug(None)
#import webrepl
#webrepl.start()
print("boot.py")