Micropython en Font op een E-Paper

Rob W.

Honourable Member

Ik ben wat aan het stoeien met een e-paper displaytje aan een Raspberry Pi Pico.
Werkt leuk en ook een BMP208 uitlezen en op het display tonen gaat prima:

Alleen is die tekst wel een beetje klein..

Nu heb ik nog geen manier gevonden om het standaard font te vergroten, wel een programma om zelf een font te maken:https://kapusta.cc/2020/03/20/fontedit/

Dat ziet er goed uit en geeft dan ook code die je moet kunnen gebruiken. Helaas zit er geen werkend voorbeeld bij voor micropython :/
Wel een stukje pseudo code:

code:


# Pseudocode for retrieving data for a specific character:
# 
# bytes_per_char = font_height * (font_width / 8 + ((font_width % 8) ? 1 : 0))
# offset = (ascii_code(character) - ascii_code(' ')) * bytes_per_char
# data = ubuntu_mono_24pt[offset] 

Dit direct in mijn code plakken werkt uiteraard niet :)

code:


font_width = 16
font_height = 28
bytes_per_char = font_height * (font_width / 8 + ((font_width % 8) ? 1 : 0))
offset = (ascii_code(character) - ascii_code(' ')) * bytes_per_char
data = ubuntu_mono_24pt[offset]

Resulteerd in een 'Syntax Error: invalid syntax' op de derde regel code (de 'bytes_per_char' regel)

Het gebruikte display is een Waveshare 2.9 inch zwart wit EPD https://www.waveshare.com/pico-epaper-2.9.htm
En ik gebruik hun voorbeeldcode. (inclusief de font code is het bijna 800 regels, dus het leek mij niet handig om de hele code zo in te voegen :))

Wie helpt mij op de goede weg?

Leest mee sinds 19 augustus 2001..
Arco

Special Member

Ik gebruik dan meestal de fonttabel * 2, is het simpelste om 2x zo grote letters te krijgen...
Voor regelmatig wisselende waardes weergeven heb je wel een epaper nodig dat 'partial refresh' ondersteunt (anders ziet 't er niet uit...)

[Bericht gewijzigd door Arco op vrijdag 12 november 2021 14:18:45 (43%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
big_fat_mama

Zie Paulinha_B

Komt de syntax error niet van die bitwise operatoren?

code:

import math

toevoegen, of iets in dier voege?

hoe beter de vraag geschreven, zoveel te meer kans op goed antwoord
Rob W.

Honourable Member

Op 12 november 2021 14:15:52 schreef Arco:
Ik gebruik dan meestal de fonttabel * 2, is het simpelste om 2x zo grote letters te krijgen...
Voor regelmatig wisselende waardes weergeven heb je wel een epaper nodig dat 'partial refresh' ondersteunt (anders ziet 't er niet uit...)

Dat zou voor mij in principe ook goed zijn.. in eerste instantie wil ik enkel dat alles groter wordt.
En ja, deze doet partial refresh :) erg leuk

Ik snap sowieso al niet waar hij het font vandaan haalt. Ik verwacht dat hij dat ergens importeert of da het in de code staat gedefiniëert. Maar daar vind ik het niet in terug. Wel worden deze dingen geïmporteert:

code:

import machine
from time import sleep
from machine import Pin, SPI
import utime
import framebuf

Mogelijk dat er een systeemfont in Machine zit.. zal eens wat zoeken..

Het toevoegen van math geeft geen extra fouten, dus das een pluspunt, maar lost de andere fout nog niet op ;)

EDIT:
Gevonden; de tekst word gemaakt door de framebuf:

code:



Drawing text

FrameBuffer.text(s, x, y[, c])

Write text to the FrameBuffer using the the coordinates as the upper-left corner of the text. The color of the text can be defined by the optional argument but is otherwise a default value of 1. All characters have dimensions of 8x8 pixels and there is currently no way to change the font.

Afkomstig van: https://docs.micropython.org/en/latest/library/framebuf.html

[Bericht gewijzigd door Rob W. op vrijdag 12 november 2021 16:09:28 (20%)

Leest mee sinds 19 augustus 2001..
Rob W.

Honourable Member

Vandaag een groot deel van de dag aan het worstelen geweest met de code.. Helaas nog geen succes :(

Het probleem lijkt hem in de framebuf library te zitten. Die wil de karakters niet groter maken. Ik heb een poging gedaan om een andere framebuf lib te importeren, namelijk die van Adafruit. Die heeft wel een optie om de karakters te vergroten:

code:


text(string, x, y, color, *, font_name='font5x8.bin', size=1)

    Place text on the screen in variables sizes. Breaks on to next line.

        Does not break on line going off screen.

Jammer genoeg krijg ik die niet aan de praat. De code loopt wel maar er lijkt alleen iets in een hoek van het display te gebeuren. Maar daar kan ik geen chocola van maken.

Ik had dit als een klein tussendoor projectje verzonnen.. valt toch tegen :/

Leest mee sinds 19 augustus 2001..
Arco

Special Member

Zelf een paar functies maken om characters op een grafisch display te zetten stelt niet echt veel voor...

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Rob W.

Honourable Member

Voor een geoefend programmeur zal het vast een eitje zijn. Voor iemand als ik, die bijna alles met copy-paste aan elkaar knoopt is het toch lastig :)

Maar ik geef het nog niet op, ik blijf zoeken, proberen en hopen dat er iemand met een gouden tip langs komt O-)

Leest mee sinds 19 augustus 2001..