RP2040-GEEK
SD-Karte lesen
Anleitung für die Firmware CircuitPython
Bildbox 1 (klick hier)
RP2040-GEEK
SD-Karte lesen
Anleitung für die Firmware CircuitPython
![](bilder/bild_007.jpg)
![](bilder/bild_007.jpg)
![](bilder/bild_007.jpg)
Bildbox 1 (klick hier)
Im vorhergehenden Beispiel wurde das Display in Betrieb genommen und die SD-Karte eingebunden. In diesem Beispiel wollen wir das Programm erweitern und
den Inhalt der SD-Karte auslesen und auf dem Display anzeigen.
Los gehts
Zunächst öffnen Sie das vorige Programm in der Thonny IDE, markieren den gesamten Inhalt - gehen auf kopieren und fügen ihn in einem neuen Fenster ein. Jetzt speichern Sie unter einem neuen Namen wie z.B. "sd-karte-lesen.py". Im unteren Kasten ist der Programmcode noch einmal zu sehen.
1 import os 2 import time 3 import board 4 import busio 5 import sdcardio 6 import digitalio 7 import storage 8 from fourwire import FourWire 9 from adafruit_display_text import label 10 import terminalio 11 import displayio 12 from adafruit_st7789 import ST7789 13 14 # Display initialisieren 15 lcd_cs=board.GP9 16 lcd_dc=board.GP8 17 lcd_reset=board.GP12 18 # Release any resources currently in use for the displays 19 displayio.release_displays() 20 spi = busio.SPI(board.GP10, board.GP11) 21 display_bus = FourWire(spi, command=lcd_dc, chip_select=lcd_cs, reset=lcd_reset) 22 display = ST7789(display_bus, rotation=90, width=240, height=135, rowstart=40, colstart=53) 23 # Make the display context 24 splash = displayio.Group() 25 display.root_group = splash 26 27 # Make a background color fill 28 color_bitmap = displayio.Bitmap(display.width, display.height, 3) 29 color_palette = displayio.Palette(3) 30 color_palette[0] = 0x660088 31 color_palette[1] = 0x000000 32 color_palette[2] = 0xffffff 33 bg_sprite = displayio.TileGrid(color_bitmap, pixel_shader=color_palette, x=0, y=0) 34 splash.append(bg_sprite) 35 36 # Draw a label 37 text_area = label.Label(font=terminalio.FONT, text="\n RP2040 GEEK\n\n it work's" , color=0xFFFF00, scale=2, line_spacing=1 ) 38 text_group = displayio.Group(x=15, y=10) 39 text_group.append(text_area) # Subgroup for text scaling 40 splash.append(text_group) 41 42 # SD Karte mounten 43 SD_SCK = board.GP18 44 SD_MOSI = board.GP19 45 SD_MISO = board.GP20 46 cs = board.GP23 47 48 try: 49 card = busio.SPI(SD_SCK, SD_MOSI, SD_MISO) 50 sdcard = sdcardio.SDCard(card, cs) 51 vfs = storage.VfsFat(sdcard) 52 storage.mount(vfs, "/sd") 53 text_area.text = "\n SD-Karte\n erfolgreich\n gemountet." 54 start = 1 55 except OSError as exc: 56 error = exc.errno 57 print(error) 58 text_area.text = "\n\n keine SD-Karte\n\n vorhanden." 59 start = 0 60
Hinzugefügt sind hier bisher nur die Werte für eine Variable 'start' in den neuen Zeilen 54 und 59, die in
der nachfolgenden Funktion genutzt werden.
Bildbox 1 (klick hier)
Diese Funktion nenne ich 'print_directory' und füge sie ab Zeile 61 ein. Aufgerufen wird sie dann aus der 'while-Schleife ab Zeile 88.
![](bilder/bild_000.jpg)
Bildbox 1 (klick hier)
61 def print_directory(path, tabs=0): 62 for file in os.listdir(path): 63 stats = os.stat(path + "/" + file) 64 filesize = stats[6] 65 isdir = stats[0] & 0x4000 66 if filesize < 1000: 67 sizestr = str(filesize) + " Byte" 68 elif filesize < 1000000: 69 sizestr = "%0.1f KB" % (filesize / 1000) 70 else: 71 sizestr = "%0.1f MB" % (filesize / 1000000) 72 prettyprintname = "" 73 for _ in range(tabs): 74 prettyprintname += "" 75 #if (file[len(file)-4:len(file)]) == ".txt": 76 print(file) 77 prettyprintname += file 78 if isdir: 79 prettyprintname += "/" 80 text_area.text = 'Inhalt SD-Karte:\n------------------\n{0:<40}\n\nSIZE: {1:>10}'.format(prettyprintname, sizestr) 81 # recursively print directory contents 82 if isdir: 82 print_directory(path + "/" + file, tabs + 1) 84 time.sleep(1)
85 86 time.sleep(2) 87 88 while True: 89 if start == 0: 90 color_bitmap.fill(1) 91 text_area.text = "\nSD-Karte einsetzen\n\n und neu starten." 92 time.sleep(1) 93 if start == 1: 94 text_area.text = "" 95 color_bitmap.fill(1) 96 print_directory("/sd") 97 start = 2 98 else: 99 color_bitmap.fill(0) 100 text_area.text = "\n\n Fertig" 101 start = 1 102 time.sleep(3)
Die Variable 'start' wird benutzt, um eine entsprechende Meldung per Display anzuzeigen, wenn keine SD-Karte vorhanden ist.
Bei 'start = 1' wird die Funktion 'print_directory' aufgerufen. Während im Fall 'start = 2' der Vorgang beendet ist und
nach einer kuzen Pause (3 s) wiederholt wird. In den Zeilen 90 und 95 können Sie die Zuweisung der verschiedenen
Hintergründe, welche weiter oben (28 bis 34) definiert wurden, sehen.
Damit ist dieses Beispiel abgeschlossen.
![](bilder/bild_009.jpg)
Viel Spass und Erfolg beim Ausprobieren.
![](bilder/bild_009.jpg)
Viel Spass und Erfolg beim Ausprobieren.