Accueil Doc Commandes OS

// doc / outils

Commandes OS MicroPython

Gérer les fichiers sur l'ESP32 depuis le REPL ou un script : lister, créer, supprimer, renommer.

Les deux fichiers essentiels

boot.py

S'exécute en premier à chaque démarrage. Utilisé pour la configuration système : connexion WiFi, initialisation matérielle, paramètres globaux. Si absent, ignoré.

main.py

S'exécute après boot.py. C'est ton programme principal. Si absent, l'ESP32 reste en attente dans le REPL. C'est le fichier que tu crées pour tes projets.

Ordre de démarrage : reset → boot.pymain.py → REPL (si main.py absent ou terminé)

Le module os

CommandeDescriptionExemple
os.listdir() Liste les fichiers du dossier courant os.listdir() # ['boot.py', 'main.py']
os.listdir(path) Liste un dossier spécifique os.listdir('/lib')
os.mkdir(name) Crée un dossier os.mkdir('lib')
os.remove(path) Supprime un fichier os.remove('old.py')
os.rename(src, dst) Renomme ou déplace os.rename('a.py', 'b.py')
os.stat(path) Infos sur un fichier (taille, dates) os.stat('main.py')
os.getcwd() Dossier courant os.getcwd() # '/'
os.chdir(path) Changer de dossier os.chdir('/lib')
os.uname() Infos système (modèle, version) os.uname()

Exemples pratiques

Lister tous les fichiers

import os

# Fichiers à la racine
print(os.listdir())

# Avec taille
for f in os.listdir():
    stat = os.stat(f)
    print(f, "—", stat[6], "octets")

Créer une arborescence

import os

# Créer un dossier lib pour les modules
os.mkdir('lib')
os.mkdir('data')

# Vérifier
print(os.listdir())  # ['boot.py', 'main.py', 'lib', 'data']

Lire et écrire un fichier

import os

# Écrire dans un fichier
with open('config.txt', 'w') as f:
    f.write('ssid=MonWiFi\n')
    f.write('password=12345\n')

# Lire
with open('config.txt', 'r') as f:
    print(f.read())

# Supprimer
os.remove('config.txt')

Vider complètement la carte

import os

def supprimer_tout():
    for f in os.listdir():
        try:
            os.remove(f)
        except OSError:
            pass  # dossiers ignorés

# Ou depuis le REPL Thonny :
# View → Files → clic droit → Delete

Recharger un module modifié

Recopier un fichier ne suffit pas : l'ancienne version continue de tourner

Symptôme. Tu corriges une bibliothèque sur ton ordinateur, tu la recopies sur l'ESP32, tu relances — et tu obtiens exactement la même erreur qu'avant. Comme si la correction n'avait servi à rien.

Cause. MicroPython garde en mémoire tout module déjà importé, dans sys.modules. Un second import ne relit pas le fichier : il ressort la copie en mémoire. La nouvelle version est bien sur la carte, mais personne ne la lit.

Les deux parades :

# 1. Vider le cache pour ce seul module
import sys
del sys.modules['gdeh0213b73']
from gdeh0213b73 import init_epd    # relit vraiment le fichier

# 2. Plus simple et plus sûr : Ctrl+D dans Thonny
#    Le redémarrage à chaud vide tout le cache d'un coup.

Le réflexe à prendre : copier le fichier, puis Ctrl+D, puis relancer. Trois secondes qui évitent une demi-heure de recherche.

Les deux types de redémarrage

RedémarrageCommentEffet
À chaud (soft) Ctrl+D
machine.soft_reset()
Vide la RAM et le cache de modules, relance boot.py puis main.py. Le WiFi et les périphériques restent alimentés.
À froid (hard) machine.reset()
bouton EN de la carte
Redémarrage matériel complet, comme un débranchement. Tout repart de zéro, périphériques compris.

Le redémarrage à chaud suffit dans l'immense majorité des cas. Le redémarrage à froid sert quand un périphérique est bloqué — un bus I2C qui ne répond plus, par exemple.

Infos système utiles

import os, gc

# Version MicroPython et modèle de carte
print(os.uname())
# (sysname='esp32', nodename='esp32', release='1.x.x', ...)

# Mémoire libre (RAM)
gc.collect()
print("RAM libre :", gc.mem_free(), "octets")
print("RAM allouée :", gc.mem_alloc(), "octets")

# Espace disque (Flash)
fs = os.statvfs('/')
bloc = fs[0]
libre = fs[3]
total = fs[2]
print("Flash libre :", libre * bloc, "octets /", total * bloc, "octets")

Bonnes pratiques

Utiliser /lib pour les modules

Place tes modules tiers (.py) dans un dossier /lib. MicroPython l'ajoute automatiquement au chemin de recherche.

boot.py léger

Garde boot.py minimal — uniquement WiFi et config. Mets toute la logique dans main.py pour faciliter le débogage.

Sauvegarder les données

Pour stocker des mesures, écris dans un fichier .txt ou .csv sur la Flash. La Flash supporte ~100 000 cycles d'écriture.

Nettoyer la mémoire

Lance gc.collect() régulièrement dans les longues boucles pour libérer la mémoire RAM et éviter les MemoryError.

Gérer les fichiers avec Thonny

Un gestionnaire de fichiers visuel — plus pratique que la ligne de commande pour débuter.

Voir la fiche Thonny →

Les bibliothèques à copier dans /lib

Les drivers du fablab : câblage, API, et les pièges connus de chacun.

Voir les bibliothèques →