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.py → main.py → REPL (si main.py absent ou terminé)
Le module os
| Commande | Description | Exemple |
|---|---|---|
| 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é
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émarrage | Comment | Effet |
|---|---|---|
| À 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 →