Micro SD-kaart (Pico)

Nog niet eerder heb ik de (micro) SD-kaart als tutorial beschreven. Omdat ik een barometer gebouwd heb en een SD-kaart voor opslag wil gebruiken, leek het mij een goed moment te onderzoeken wat er bij komt kijken om een (micro) SD-kaart met een Pico te verbinden en hoe je informatie erop opslaat.

In deze tutorial laat ik zien hoe je een micro SD-kaartmodule (type Mini TF) met de Pico (W) verbindt. Op basis van de code van Rui en Sara Santos laat ik zien hoe je er een bestand naartoe schrijft, dit leest en verwijdert.

Daar gaan we…


Thonny IDE
Ik ga er van uit dat je weet hoe Thonny IDE werkt en hoe je de Raspberry Pi Pico ermee verbind. Weet je het niet of twijfel je? Kijk dan hier waar ik uitleg hoe je het doet.


Een tijd geleden heb ik de goedkoopste micro SD-kaartmodule gekocht, zonder te kijken welke modellen er allemaal zijn. De duurdere modellen zijn voorzien van spanningsregelaars en andere zaken waardoor de modules iets ‘makkelijker’ aan te sluiten zijn. In de praktijk maakt dit niet zo veel uit. Ook mijn mini TF- module is eenvoudig om aan te sluiten en werkt zoals het bedoeld is.

De Micro SD-kaartmodule, model mini TF

In deze tutorial gebruiken we SPI om de SD-kaartmodule met de Pico te laten communiceren.

Verbindingstabel

Verbindt de micro SD-kaartmodule en de Pico volgens onderstaande tabel.

De MicroSD-kaart formatteren

Voordat je verder gaat met de tutorial, moet je de microSD-kaart eerst formatteren. Plaats de SD-kaart in je pc, open de Verkenner, zoek de SD-kaart en formatteer de kaart als FAT32. Plaats daarna de geformatteerde SD-kaart in de module.

Thonny IDE

Open Thonny IDE en zorg ervoor dat de Pico, waarop de SD-kaartmodule aangesloten is, met Thonny verbonden is.

Bibliotheek installeren

Gelukkig is er een bibliotheek (sdcard.py) beschikbaar die de SD-kaartmodule ondersteunt, dat scheelt een hoop coderegels. Deze moet geladen zijn anders werkt het MicroPython script niet.

  • Ga in Thonny naar het tabblad Hulpmiddelen – Pakketten beheren
  • Zoek naar sdcard en klik op [Search micropython and PyPi]
  • Het resultaat is de sdcard @ micropython-lib SDCard block device driver
  • Klik op de bibliotheek en vervolgens op [Installeren].

De bibliotheek wordt nu in de \lib-map van de Pico geplaatst.

Testen van de opstelling

Om er zeker van te zijn dat alles goed aangesloten is hebben Rui en Sara Santos een micropython script geschreven dat dit test. Deze code is de basis om door te bouwen met de schrijf-, lees- en verwijder-functies.

Kopieer onderstaande code en plak deze in een leeg bestand in Thonny, sla deze op de Pico op als test1_sdkaart.py en start het programma (groene knop met witte pijl).

# Importeer de modules en/of onderdelen ervan
from machine import SPI, Pin
import sdcard, os

# Pico headerpinnen
SPI_BUS  = 0
SCK_PIN  = 2
MOSI_PIN = 3
MISO_PIN = 4
CS_PIN   = 5
SD_MOUNT_PATH = '/sd'

try:
    # Initialiseer de SPI communicatie op SPI BUS 0
    spi = SPI(SPI_BUS,sck=Pin(SCK_PIN), mosi=Pin(MOSI_PIN), miso=Pin(MISO_PIN))
    cs = Pin(CS_PIN)
    sd = sdcard.SDCard(spi, cs)

    # Koppel/mount de micro SD-kaart
    os.mount(sd, SD_MOUNT_PATH)

    # Toon de bestanden op de micro SD-kaart
    print ("De kaart is actief. De volgende info is van de kaart gelezen:")
    print(os.listdir(SD_MOUNT_PATH))
    
except Exception as e:
    print('Er is een fout opgetreden:', e)

Het enige dat op mijn SD-kaart aangetroffen is het volgende:

De opstelling werkt! We kunnen verder.

Als je andere SPI-pinnen op de Pico wilt gebruiken, moet je de code dienovereenkomstig aanpassen. Houd er ook rekening mee dat, afhankelijk van de gebruikte pinnen, je mogelijk de SPI-bus moet wijzigen. Op de pinout van de Raspberry Pi Pico kun je zien welke pinnen zich op SPI-bus 1 of 0 bevinden.

Bestand maken

Nu we weten dat de opstelling werkt, gaan we een stap verder. De volgende code maakt een bestand aan, er wordt een waarde naartoe geschreven en het bestand wordt gelezen.

Open een nieuw bestand (test2_sdkaart.py) in Thonny en kopieer onderstaande code erin.

# Importeer de modules en/of onderdelen ervan
from machine import SPI, Pin
import sdcard, os

# Pico headerpinnen
SPI_BUS  = 0
SCK_PIN  = 2
MOSI_PIN = 3
MISO_PIN = 4
CS_PIN   = 5
SD_MOUNT_PATH = '/sd'
FILE_PATH = 'sd/sd_file.txt'

try:
    # Initialiseer de SPI communicatie op SPI BUS 0
    spi = SPI(SPI_BUS,sck=Pin(SCK_PIN), mosi=Pin(MOSI_PIN), miso=Pin(MISO_PIN))
    cs = Pin(CS_PIN)
    sd = sdcard.SDCard(spi, cs)

    # Koppel/mount de micro SD-kaart
    os.mount(sd, SD_MOUNT_PATH)
    print("SD kaart is gekoppeld")

    # Toon de bestanden van de SD-kaart
    print(os.listdir(SD_MOUNT_PATH))
    
    # Creëer nieuw bestand op de micro SD-kaart
    with open(FILE_PATH, "w") as file:
        # Schrijf naar het bestand
        file.write("Testing microSD Card \n")
        
    # Controleer of het bestand aangemaakt is:
    print(os.listdir(SD_MOUNT_PATH))
    
    # Open het bestand in lees-mode
    with open(FILE_PATH, "r") as file:
        # lees het bestand
        content = file.read()
        print("File content:", content)  
    
except Exception as e:
    print('Er is een fout opgetreden:', e)
Het resultaat van bovenstaande code

Aangezien de commentaren van de onderdelen in het codeoverzicht helder zijn, leg ik de onderdelen niet verder uit. Mocht je er toch vragen over hebben, plaats dan hieronder een reactie.

Bestanden verwijderen

Het verwijderen van een bestand op de microSD-kaart is eenvoudig. We gebruiken de opdracht os.remove() en het bestandspad als argument.

Je kunt eenvoudig de volgende regel aan het vorige voorbeeld toevoegen om sd_file.txt te verwijderen.

# Verwijder het bestand van de micro SD-kaart
os.remove(FILE_PATH)

De volledige code (test3_sdkaart.py) vind je hieronder:

# Importeer de modules en/of onderdelen ervan
from machine import SPI, Pin
import sdcard, os

# Pico headerpinnen
SPI_BUS  = 0
SCK_PIN  = 2
MOSI_PIN = 3
MISO_PIN = 4
CS_PIN   = 5
SD_MOUNT_PATH = '/sd'
FILE_PATH = 'sd/sd_file.txt'

try:
    # Initialiseer de SPI communicatie op SPI BUS 0
    spi = SPI(SPI_BUS,sck=Pin(SCK_PIN), mosi=Pin(MOSI_PIN), miso=Pin(MISO_PIN))
    cs = Pin(CS_PIN)
    sd = sdcard.SDCard(spi, cs)
    # Koppel/mount de micro SD-kaart
    os.mount(sd, SD_MOUNT_PATH)
    # Toon de bestanden van de SD-kaart
    print(os.listdir(SD_MOUNT_PATH))
    
    # Creëer nieuw bestand op de micro SD-kaart
    with open(FILE_PATH, "w") as file:
        # Schrijf naar het bestand
        file.write("Testing microSD Card \n")
        
    # Controleer of het bestand aangemaakt is:
    print(os.listdir(SD_MOUNT_PATH))
    
    # Open het bestand in lees-mode
    with open(FILE_PATH, "r") as file:
        # lees het bestand
        content = file.read()
        print("File content:", content)
    
    # Verwijder het bestand van de micro SD-kaart
    os.remove(FILE_PATH)
    
    # Controleer dat het bestand verwijderd is
    print(os.listdir(SD_MOUNT_PATH))    
    
except Exception as e:
    print('Er is een fout opgetreden:', e)

Controleer nogmaals de inhoud van de microSD-kaart om zeker te weten dat het bestand is verwijderd.

Het resultaat van bovenstaande code. Het bestand is verwijderd.

Veel plezier ermee! Mocht je vragen of opmerkingen hebben, laat dan hieronder een reactie achter.

Have A Nice Day!

Geef als eerste een reactie

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd.


*