ESP32 MicroPython - Enregistrer des Données avec Horodatage sur Carte SD
Ce guide vous montre comment construire un enregistreur de données qui enregistre des entrées horodatées sur une carte Micro SD en utilisant l'ESP32 et MicroPython. Voici ce que nous allons couvrir :
L'enregistrement de données horodatées dans un seul fichier journal sur la carte Micro SD.
L'organisation des journaux dans plusieurs fichiers sur la carte Micro SD, en créant un fichier séparé pour chaque jour.
La date et l'heure sont obtenues depuis un module RTC DS3231 et écrites sur la carte Micro SD avec les lectures du capteur.
Les données enregistrées peuvent inclure tout type de mesure, par exemple :
Des lectures de capteurs de température, d'humidité ou d'autres capteurs.
Des événements d'accès depuis un système de contrôle d'accès.
Pour simplifier, ce guide utilise des lectures de deux broches d'entrée analogiques comme données d'exemple. Vous pouvez facilement modifier le code pour enregistrer tout autre type d'information.
Ou vous pouvez acheter les kits suivants:
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.
Besoin d'aide pour démarrer avec le module Micro SD Card ou le module RTC ? Consultez ces tutoriels étape par étape couvrant le brochage, le câblage et la programmation :

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
Le tableau de câblage ci-dessous montre comment connecter le module Micro SD Card et le module RTC DS3231 à l'ESP32 :
| Module Micro SD Card | ESP32 |
| VCC | 5V |
| GND | GND |
| MISO | GPIO19 |
| MOSI | GPIO23 |
| SCK | GPIO18 |
| CS | GPIO5 |
| Module RTC DS3231 | ESP32 |
| VCC | 3.3V |
| GND | GND |
| SDA | GPIO21 |
| SCL | GPIO22 |
※ Note:
Si votre shield (comme un shield Ethernet) dispose déjà d'un slot Micro SD Card intégré, vous pouvez ignorer le module externe et simplement insérer la carte directement dans le shield.
/*
* Ce code ESP32 MicroPython a été développé par newbiely.fr
* Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction.
* Pour des instructions complètes et des schémas de câblage, veuillez visiter:
* https://newbiely.fr/tutorials/esp32-micropython/esp32-micropython-log-data-with-timestamp-to-sd-card
*/
import machine
import os
import time
import sdcard
SPI_SCK_PIN = 18
SPI_MOSI_PIN = 23
SPI_MISO_PIN = 19
SPI_CS_PIN = 5
I2C_SDA_PIN = 21
I2C_SCL_PIN = 22
FILE_NAME = "/sd/log.txt"
i2c = machine.I2C(0, sda=machine.Pin(I2C_SDA_PIN), scl=machine.Pin(I2C_SCL_PIN))
DS3231_ADDR = 0x68
def bcd_to_dec(bcd):
return (bcd >> 4) * 10 + (bcd & 0x0F)
def get_datetime():
buf = i2c.readfrom_mem(DS3231_ADDR, 0x00, 7)
second = bcd_to_dec(buf[0])
minute = bcd_to_dec(buf[1])
hour = bcd_to_dec(buf[2])
day = bcd_to_dec(buf[4])
month = bcd_to_dec(buf[5] & 0x1F)
year = bcd_to_dec(buf[6]) + 2000
return (year, month, day, hour, minute, second)
spi = machine.SoftSPI(baudrate=1000000, polarity=0, phase=0,
sck=machine.Pin(SPI_SCK_PIN),
mosi=machine.Pin(SPI_MOSI_PIN),
miso=machine.Pin(SPI_MISO_PIN))
cs = machine.Pin(SPI_CS_PIN, machine.Pin.OUT)
try:
sd = sdcard.SDCard(spi, cs)
os.mount(sd, "/sd")
print("SD CARD INITIALIZED.")
except Exception as e:
print("SD CARD FAILED, OR NOT PRESENT!", e)
raise SystemExit
print("--------------------")
analog_pin_1 = machine.ADC(machine.Pin(36))
analog_pin_2 = machine.ADC(machine.Pin(39))
analog_pin_1.atten(machine.ADC.ATTN_11DB)
analog_pin_2.atten(machine.ADC.ATTN_11DB)
while True:
try:
f = open(FILE_NAME, "a")
print("Writing log to SD Card")
year, month, day, hour, minute, second = get_datetime()
timestamp = "{}-{}-{} {}:{}:{}".format(year, month, day, hour, minute, second)
analog_1 = analog_pin_1.read()
analog_2 = analog_pin_2.read()
f.write("{} analog_1 = {}, analog_2 = {}\n".format(timestamp, analog_1, analog_2))
f.close()
except Exception as e:
print("SD Card: Issue encountered while attempting to open the file", FILE_NAME, e)
time.sleep(2)
Voici les instructions pour configurer et exécuter votre code MicroPython sur l'ESP32 avec Thonny IDE :
Assurez-vous que Thonny IDE est installé sur votre ordinateur.
Confirmez que le firmware MicroPython est chargé sur votre carte ESP32.
Si c'est la première fois que vous utilisez un ESP32 avec MicroPython, consultez le guide
ESP32 - Premiers pas. pour des instructions étape par étape.
Effectuez le câblage comme indiqué sur l'image ci-dessus.
Connectez la carte ESP32 à votre ordinateur avec un câble USB.
Ouvrez Thonny IDE sur votre ordinateur.
Dans Thonny IDE, allez dans Outils Options.
Dans l'onglet Interpréteur, choisissez MicroPython (ESP32) dans le menu déroulant.
Assurez-vous que le bon port est sélectionné. Thonny IDE le détecte généralement automatiquement, mais vous devrez peut-être le sélectionner manuellement (comme COM3 sur Windows ou /dev/ttyACM0 sur Linux).
Naviguez vers Outils Gérer les packages dans Thonny IDE.
Recherchez "sdcard", puis trouvez la bibliothèque sdcard fournie par micropython-lib.
Cliquez sur sdcard, puis cliquez sur le bouton Installer pour installer la bibliothèque de carte SD.

Assurez-vous que la carte Micro SD est formatée en FAT16 ou FAT32 (recherchez des instructions en ligne si nécessaire)
Copiez le code MicroPython fourni et collez-le dans l'éditeur de Thonny.
Sauvegardez le code sur votre ESP32 en :
Cliquant sur le bouton Enregistrer ou en appuyant sur Ctrl+S.
Dans la boîte de dialogue d'enregistrement, choisissez Appareil MicroPython.
Nommez le fichier main.py.
Cliquez sur le bouton vert Exécuter (ou appuyez sur F5) pour exécuter le script.
Consultez le message dans le Shell en bas de Thonny.
>>> %Run -c $EDITOR_CONTENT
MPY: soft reboot
SD CARD INITIALIZED.
--------------------
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
Writing log to SD Card
MicroPython (ESP32) • CP2102 USB To UART Bridge Controller @ COM12 ≡
Retirez la carte Micro SD du module
Insérez-la dans un lecteur de carte SD USB connecté à votre PC
Ouvrez le fichier log.txt sur votre ordinateur — son contenu devrait ressembler à ceci :
Si vous n'avez pas de lecteur de carte SD USB, vous pouvez vérifier le contenu du fichier journal en exécutant le code MicroPython suivant sur l'ESP32.
/*
* Ce code ESP32 MicroPython a été développé par newbiely.fr
* Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction.
* Pour des instructions complètes et des schémas de câblage, veuillez visiter:
* https://newbiely.fr/tutorials/esp32-micropython/esp32-micropython-log-data-with-timestamp-to-sd-card
*/
import machine
import os
import sdcard
SPI_SCK_PIN = 18
SPI_MOSI_PIN = 23
SPI_MISO_PIN = 19
SPI_CS_PIN = 5
FILE_NAME = "/sd/log.txt"
spi = machine.SoftSPI(baudrate=1000000, polarity=0, phase=0,
sck=machine.Pin(SPI_SCK_PIN),
mosi=machine.Pin(SPI_MOSI_PIN),
miso=machine.Pin(SPI_MISO_PIN))
cs = machine.Pin(SPI_CS_PIN, machine.Pin.OUT)
try:
sd = sdcard.SDCard(spi, cs)
os.mount(sd, "/sd")
print("SD CARD INITIALIZED.")
except Exception as e:
print("SD CARD FAILED, OR NOT PRESENT!", e)
raise SystemExit
try:
f = open(FILE_NAME, "r")
while True:
ch = f.read(1)
if not ch:
break
print(ch, end="")
f.close()
except Exception as e:
print("SD Card: Issue encountered while attempting to open the file", FILE_NAME, e)
os.umount("/sd")
Stocker tous les journaux dans un seul fichier le fait grossir avec le temps, rendant la gestion plus difficile. Le code ci-dessous divise les journaux en plusieurs fichiers :
/*
* Ce code ESP32 MicroPython a été développé par newbiely.fr
* Ce code ESP32 MicroPython est mis à disposition du public sans aucune restriction.
* Pour des instructions complètes et des schémas de câblage, veuillez visiter:
* https://newbiely.fr/tutorials/esp32-micropython/esp32-micropython-log-data-with-timestamp-to-sd-card
*/
import machine
import os
import time
import sdcard
SPI_SCK_PIN = 18
SPI_MOSI_PIN = 23
SPI_MISO_PIN = 19
SPI_CS_PIN = 5
I2C_SDA_PIN = 21
I2C_SCL_PIN = 22
i2c = machine.I2C(0, sda=machine.Pin(I2C_SDA_PIN), scl=machine.Pin(I2C_SCL_PIN))
DS3231_ADDR = 0x68
def bcd_to_dec(bcd):
return (bcd >> 4) * 10 + (bcd & 0x0F)
def get_datetime():
buf = i2c.readfrom_mem(DS3231_ADDR, 0x00, 7)
second = bcd_to_dec(buf[0])
minute = bcd_to_dec(buf[1])
hour = bcd_to_dec(buf[2])
day = bcd_to_dec(buf[4])
month = bcd_to_dec(buf[5] & 0x1F)
year = bcd_to_dec(buf[6]) + 2000
return (year, month, day, hour, minute, second)
spi = machine.SoftSPI(baudrate=1000000, polarity=0, phase=0,
sck=machine.Pin(SPI_SCK_PIN),
mosi=machine.Pin(SPI_MOSI_PIN),
miso=machine.Pin(SPI_MISO_PIN))
cs = machine.Pin(SPI_CS_PIN, machine.Pin.OUT)
try:
sd = sdcard.SDCard(spi, cs)
os.mount(sd, "/sd")
print("SD CARD INITIALIZED.")
except Exception as e:
print("SD CARD FAILED, OR NOT PRESENT!", e)
raise SystemExit
print("--------------------")
analog_pin_1 = machine.ADC(machine.Pin(36))
analog_pin_2 = machine.ADC(machine.Pin(39))
analog_pin_1.atten(machine.ADC.ATTN_11DB)
analog_pin_2.atten(machine.ADC.ATTN_11DB)
while True:
year, month, day, hour, minute, second = get_datetime()
filename = "/sd/{:04d}{:02d}{:02d}.txt".format(year, month, day)
try:
f = open(filename, "a")
print("Writing log to SD Card")
timestamp = "{}-{}-{} {}:{}:{}".format(year, month, day, hour, minute, second)
analog_1 = analog_pin_1.read()
analog_2 = analog_pin_2.read()
f.write("{} analog_1 = {}, analog_2 = {}\n".format(timestamp, analog_1, analog_2))
f.close()
except Exception as e:
print("SD Card: Issue encountered while attempting to open the file", filename, e)
time.sleep(2)
Après une période d'exécution prolongée, si vous :
Retirez la carte Micro SD du module
L'insérez dans un lecteur de carte SD USB connecté à votre PC
Vous trouverez plusieurs fichiers journaux comme illustré ci-dessous :
※ NOS MESSAGES
N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !