Unterschiedliche Schriftgrösse mit SPI und ILI 9341

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Achim Klein
User
Beiträge: 41
Registriert: Dienstag 21. Februar 2023, 13:57

Hallo
Mit einem SPI Display 2,2" und dem IC ILI 9341 betreibe ich an einem Raspberry Pi Pico. Im Beispiel ist bereits die Schriftgrösse 8x8 angegeben.

Code: Alles auswählen

display.draw_text8x8(32, 32, '8x8 Font', color565(0, 0, 255))
in der Lib das benutzt:

Code: Alles auswählen

def draw_text8x8(self, x, y, text, color,  background=0,
                     rotate=0):
        """Draw text using built-in MicroPython 8x8 bit font.

        Args:
            x (int): Starting X position.
            y (int): Starting Y position.
            text (string): Text to draw.
            color (int): RGB565 color value.
            background (int): RGB565 background color (default: black).
            rotate(int): 0, 90, 180, 270
        """
        w = len(text) * 8
        h = 8
        # Confirm coordinates in boundary
        if self.is_off_grid(x, y, x + 7, y + 7):
            return
        # Rearrange color
        r = (color & 0xF800) >> 8
        g = (color & 0x07E0) >> 3
        b = (color & 0x1F) << 3
        buf = bytearray(w * 16)
        fbuf = FrameBuffer(buf, w, h, RGB565)
        if background != 0:
            bg_r = (background & 0xF800) >> 8
            bg_g = (background & 0x07E0) >> 3
            bg_b = (background & 0x1F) << 3
            fbuf.fill(color565(bg_b, bg_r, bg_g))
        fbuf.text(text, 0, 0, color565(b, r, g))
        if rotate == 0:
            self.block(x, y, x + w - 1, y + (h - 1), buf)
        elif rotate == 90:
            buf2 = bytearray(w * 16)
            fbuf2 = FrameBuffer(buf2, h, w, RGB565)
            for y1 in range(h):
                for x1 in range(w):
                    fbuf2.pixel(y1, x1,
                                fbuf.pixel(x1, (h - 1) - y1))
            self.block(x, y, x + (h - 1), y + w - 1, buf2)
        elif rotate == 180:
            buf2 = bytearray(w * 16)
            fbuf2 = FrameBuffer(buf2, w, h, RGB565)
            for y1 in range(h):
                for x1 in range(w):
                    fbuf2.pixel(x1, y1,
                                fbuf.pixel((w - 1) - x1, (h - 1) - y1))
            self.block(x, y, x + w - 1, y + (h - 1), buf2)
        elif rotate == 270:
            buf2 = bytearray(w * 16)
            fbuf2 = FrameBuffer(buf2, h, w, RGB565)
            for y1 in range(h):
                for x1 in range(w):
                    fbuf2.pixel(y1, x1,
                                fbuf.pixel((w - 1) - x1, y1))
            self.block(x, y, x + (h - 1), y + w - 1, buf2)
Wie kann ich Schriften z.B. mit 32x32 oder andere Ansichten erzeugen?
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

ist dass der Code den du benutzt:
https://github.com/rdagger/micropython-ili9341 ?

Der hat ein 'draw_text' das als Argument eine Schriftart entgegen nimmt. Schau dir mal die Kommentare in diesem Code dazu an und danach folgenden Code ink. Kommentare:
https://github.com/rdagger/micropython- ... cd_font.py

Vielleicht kannst du dir so deine Schriftart mit Schriftgröße erstellen.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Achim Klein
User
Beiträge: 41
Registriert: Dienstag 21. Februar 2023, 13:57

Habe da ein Problem was ich nicht verstehe. Kann verschiedene Programme für SPI laden. Ist fast alles kein Problem. Es ist ein Programm drauf "demo font". Damit kann man verschiedene Schriften darstellen. Dazu muss aber vorher die einzelnen fonts auf dem Pico gespeichert werden. Diese sind aber in C geschrieben. Wie bekomme ich die C-Datein auf den Pico?
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Kopieren? Die C-Dateien werden ja von dem Python-Programm zur Laufzeit geladen und in einem Verzeichnis `fonts/` erwartet.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Achim Klein
User
Beiträge: 41
Registriert: Dienstag 21. Februar 2023, 13:57

Das Verzeichnis "fonts" ist auf meinem Rechner. Wie sage ich dem Python Programm wo es diese findet? Was ist mit dem Pico wenn er autark (ohne Rechner) laufen soll?
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Achim Klein: Die Dateien müssen auf den Pico kopiert werden. Der sollte per USB doch auch als Massenspeicher verwendbar sein.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

So geht das AFAIK nicht. Micropython hat sein eigenes filesystem. Zur Laufzeit des Interpreters kann man darauf auch zugreifen, und es beschreiben. So landet auch der Quellcode auf dem System. Ohne immer den nervigen mass storage dance. Ich benutze dafür ampy. Man kann wahrscheinlich auch was mit Thonny direkt machen: https://github.com/thonny/thonny/wiki/M ... ther-files
Achim Klein
User
Beiträge: 41
Registriert: Dienstag 21. Februar 2023, 13:57

Das klingt alles super. Habe von den genannten Quellen die Libs und Beispiele geladen. Dabei ist mir aufgefallen das es wenigsten 3 verschiedne Libs mit unterschiedlichem Inhalt aber gleichen Namen gibt. Man kann z.B. mit einer 3 verschiedene Schriftgrössen machen, mit einer anderen mehrere verschiedene Schriftarten, noch eine andere kann man verschiedene Graphik z.B. Viereck, Strich, Kreis usw. Aber scheinbar nicht alles zusammen.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

Dann kannst du es dir ja zur Aufgabe machen, die verschiedenen Funktionalitäten zu synthetisieren, so das du einen für alle hast.
Antworten