dimanche 24 octobre 2021

Écriture et lecture de fichiers avec le Raspberry Pi Pico (micropython)

Puisque l'environnement MicroPython comporte un système de fichiers, il est très facile de créer et de lire des fichiers dans la mémoire flash interne du Raspberry Pi Pico. De cette façon, vous pouvez stocker des informations dont votre script a besoin pour bien fonctionner (des préférences de l'utilisateur, par exemple) , enregistrer des mesures prises périodiquement (data logging), etc.  

Évidemment, vos fichiers ne doivent pas être trop volumineux (nous disposons d'un espace total de 1,4 Mo) et leur mise à jour ne doit pas être trop fréquente (afin de ne pas provoquer une usure prématurée de votre Raspberry Pi Pico). Pour de nombreuses applications, l'utilisation d'une carte SD (ou d'un autre périphérique de stockage) s'avère préférable, voire nécessaire.


Exemple #1

Dans ce premier exemple, un nombre aléatoire est écrit à l'intérieur d'un fichier texte intitulé "hasard.txt". Le fichier sera automatiquement créé s'il n'existait pas déjà. Puisque j'ai utilisé l'argument "a" (append), le nouveau nombre est ajouté à la fin du fichier, dont le contenu initial demeure intact.

Dans un deuxième temps, le fichier est lu (notez l'utilisation de l'argument "r": read) et son contenu est affiché dans la console.

-

'''
Écriture d'un nombre aléatoire dans un fichier
enregistré dans la mémoire flash interne du
Raspberry Pi Pico.
Plus d'infos:
https://electroniqueamateur.blogspot.com/2021/10/ecriture-et-lecture-de-fichiers-avec-le.html
'''
import machine, random # pour la génération du nombre aléatoire
random.seed(machine.ADC(26).read_u16()) # obtention de la graine du générateur pseudo-aléatoire
file = open ("hasard.txt", "a") # fichier ouvert en écriture
file.write(str(random.randint(0, 100000))) # on ajoute un nombre aléatoire
file.write('\n') # on passe à la ligne suivante
file.close() # fermeture du fichier
file = open ("hasard.txt", "r") # fichier ouvert en lecture
print("Contenu du fichier: ")
print(file.read()) # afichage du contenu du fichier
file.close() # fermeture du fichier

-

Exemple #2

Dans ce deuxième exemple, j'enregistre dans un fichier la date et l'heure de la dernière exécution du script. Dans un premier temps, on ouvre le fichier "date.txt" pour connaître la date et l'heure de l'exécution précédente du fichier.  Il est possible que ce fichier n'existe pas encore, d'où l'utilisation de try/except pour éviter que le script s'interrompe avec un message d'erreur.

Ensuite, le fichier est ouvert en écriture pour remplacer l'ancienne date par la nouvelle (cette fois, l'argument est "w", write, et le contenu précédent est donc remplacé par la nouvelle information).

-

'''
Lecture / écriture de fichiers avec un Raspberry Pi Pico.
Le fichier "date.txt" renferme la date de la dernière exécution du script.
On ouvre d'abord le fichier pour lire son contenu, puis on l'ouvre à nouveau pour
y inscrire la nouvelle date.
Plus d'infos:
https://electroniqueamateur.blogspot.com/2021/10/ecriture-et-lecture-de-fichiers-avec-le.html
'''
from machine import RTC # pour connaître la date et l'heure
rtc = RTC()
demarrage = rtc.datetime() # obtention de la date et de l'heure
print("Date actuelle: {:02d}-{:02d}-{:04d}".format(demarrage[2],demarrage[1],demarrage[0]))
print("Heure actuelle: {:02d}:{:02d}:{:02d}".format(demarrage[4],demarrage[5],demarrage[6]))
print("")
# ouverture du fichier en lecture
try:
file = open ("date.txt", "r")
print("Execution precedente de ce script:")
print(file.read())
file.close()
except: # si le fichier n'existe pas
print("Il s'agit de la premiere execution de ce script.")
# mise à jour du fichier (on remplace la date précédente par la nouvelle):
file = open ("date.txt", "w")
file.write("Date: {:02d}-{:02d}-{:04d}".format(demarrage[2],demarrage[1],demarrage[0]))
file.write('\n')
file.write("Heure: {:02d}:{:02d}:{:02d}".format(demarrage[4],demarrage[5],demarrage[6]))
file.close()

-

Gestion des fichiers

Si vous programmez votre Pico avec Thonny, le volet "Fichiers" affiche la liste de tous les fichiers enregistrés dans la mémoire interne du Pico. Il est possible d'effacer un fichier grâce à un clic droit de la souris­.

e

(Si ce volet n'est pas visible, vous pouvez le faire apparaître en cochant "Fichiers" dans le menu "Affichage".)


Il est également possible de gérer les fichiers grâce à un script en micropython.  Le script ci-dessous, par exemple, affiche la liste des fichiers présents sur le Pico:

-

'''
On affiche la liste des fichiers enregistrés
dans la mémoire flash interne du Raspberry Pi Pico
'''
import os
print("Liste des fichiers:")
print(os.listdir())

-

À lire également

Yves Pelletier (Facebook)