Texte mit unterschiedlichen Fonts darstellen: Unterschied zwischen den Versionen

Aus Micropython Referenz
Zur Navigation springen Zur Suche springen
Peter (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Peter (Diskussion | Beiträge)
Zeile 16: Zeile 16:
[[https://espresso-ide.readthedocs.io/projects/micropython-oled/en/latest/content/getting_started.html micropython-oled]]
[[https://espresso-ide.readthedocs.io/projects/micropython-oled/en/latest/content/getting_started.html micropython-oled]]


=== example1.py ===
Bei der Espresso-IDE handelt es sich wohl um eine IDE, die über Websockets mit dem ESP32 kommuniziert. Das ist aber letztlich egal, weil ich ohnehin Thonny benutze. Mir geht es hier nur um die Beispiele. Da gab es einige Fehlermeldungen aud dem Raspberry Pi Pico, die aber in der Hardware begründet waren. So mus beim Raspi Pico noch die ID der I2C-Hardware angegeben werden, weil dieser 2 davon hat. Außerdem musste die Zeile 'Pin(16, Pin.OUT, value=1)' gelöscht werden. Deren Sinn erschließt sich mir nicht. Beim Raspi Pico liegt auf Pin 16 sda, so dass es nur Probleme geben kann. Hier der erste Versuch:
 
=== example1.py - Original ===


   >>> from machine import Pin, I2C
   >>> from machine import Pin, I2C
Zeile 36: Zeile 38:
Hier hängt sich die REPL auf.
Hier hängt sich die REPL auf.


Das selbe Programm jetzt aus dem Text-Editor heraus:
Nun das korregierte sample1.py:
  from machine import Pin, I2C
  from machine import Pin, I2C
  from oled import Write, GFX, SSD1306_I2C
  from oled import Write, GFX, SSD1306_I2C
Zeile 45: Zeile 47:
   
   
  i2c = I2C(0, scl=scl, sda=sda)
  i2c = I2C(0, scl=scl, sda=sda)
Pin(16, Pin.OUT, value=1)
   
   
  oled = SSD1306_I2C(128, 64, i2c)
  oled = SSD1306_I2C(128, 64, i2c)
Zeile 64: Zeile 65:
  oled.show()
  oled.show()


Auch jetzt hängt sich das Programm ohne Fehlermeldung auf!
Offenbar bleibt es schon in dieser Zeile hängen:
oled = SSD1306_I2C(128, 64, i2c)
Die Ausgabe:
Pin(16, mode=OUT)
erscheint noch. Dann geht nichts mehr.
Diese Zeile ist der Übeltäter:
Pin(16, Pin.OUT, value=1)
Nachdem sie auskommentiert wurde funktionierte das Beispielprogramm!


Hier die Liste der enthaltenen Fonts:
Hier die Liste der enthaltenen Fonts:

Version vom 16. März 2023, 20:30 Uhr

Ich habe im Internet die folgenden Links zum obigen Thema gefunden:

[[1]] [[2]] [[3]] [[4]] [[5]] [[6]] [[7]] [[8]]

Grundsätzlich handelt es sich wohl um das Modulpaket micropython-oled mit dem verschiedene Fonts auf dem Oled-Display dargestellt werden können.

Erster Versuch mit micropython-oled

[micropython-oled]

Bei der Espresso-IDE handelt es sich wohl um eine IDE, die über Websockets mit dem ESP32 kommuniziert. Das ist aber letztlich egal, weil ich ohnehin Thonny benutze. Mir geht es hier nur um die Beispiele. Da gab es einige Fehlermeldungen aud dem Raspberry Pi Pico, die aber in der Hardware begründet waren. So mus beim Raspi Pico noch die ID der I2C-Hardware angegeben werden, weil dieser 2 davon hat. Außerdem musste die Zeile 'Pin(16, Pin.OUT, value=1)' gelöscht werden. Deren Sinn erschließt sich mir nicht. Beim Raspi Pico liegt auf Pin 16 sda, so dass es nur Probleme geben kann. Hier der erste Versuch:

example1.py - Original

 >>> from machine import Pin, I2C
 >>> from oled import Write, GFX, SSD1306_I2C
 >>> from oled.fonts import ubuntu_mono_15, ubuntu_mono_20
 >>> scl = Pin(17)
     sda = Pin(16)
 >>> i2c = I2C(scl=scl, sda=sda)
     Pin(16, Pin.OUT, value=1)
 Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
 TypeError: 'id' argument required
 >>> i2c = I2C(0, scl=scl, sda=sda)
     Pin(16, Pin.OUT, value=1)
 Pin(16, mode=OUT)
 >>> oled = SSD1306_I2C(128, 64, i2c)
     gfx = GFX(128, 64, oled.pixel)

Hier hängt sich die REPL auf.

Nun das korregierte sample1.py:

from machine import Pin, I2C
from oled import Write, GFX, SSD1306_I2C
from oled.fonts import ubuntu_mono_15, ubuntu_mono_20

scl = Pin(17)
sda = Pin(16)

i2c = I2C(0, scl=scl, sda=sda)

oled = SSD1306_I2C(128, 64, i2c)
gfx = GFX(128, 64, oled.pixel)

write15 = Write(oled, ubuntu_mono_15)
write20 = Write(oled, ubuntu_mono_20)

write15.text("Espresso IDE", 0, 0)
write15.text("micropython-oled", 0, 15)

gfx.line(0, 32, 127, 32, 1)
gfx.line(0, 33, 127, 33, 1)

write20.text("1234567890", 0, 35)
write15.text("Ubuntu Mono font", 0, 52)

oled.show()


Hier die Liste der enthaltenen Fonts:


>>> dir(Write)
['__class__', '__init__', '__module__', '__name__', '__qualname__', '__bases__', '__dict__', 'text', 'char']
>>> dir(GFX)
['__class__', '__init__', '__module__', '__name__', '__qualname__', '__bases__', '__dict__', 'fill_rect', 'line', 'rect', '_slow_hline', '_slow_vline',  'circle', 'fill_circle', 'triangle', 'fill_triangle']
>>> dir(SSD1306_I2C)
['__class__', '__init__', '__module__', '__name__', '__qualname__', '__bases__', '__dict__', 'fill', 'invert', 'pixel', 'scroll', 'text', 'show', 'poweron', 'init_display', 'write_cmd', 'poweroff', 'contrast', 'write_framebuf']
>>> oled.fill(0)
>>> 

oled.fill(0) funktioniert nicht.

>>> gfx.fill_rect(0,0,127,63, 0)
>>>

... auch nicht. Vielleicht liegt es an der REPL?

Nee lag an mir:

>>> %Run -c $EDITOR_CONTENT
>>> oled.fill(0)
>>> oled.show()
>>> 

tut was es soll. Display komplett schwarz.

Hier ein weiterer Versuch:

>>> oled.fill(0)
>>> oled.show()
>>> write20.text('12.236 Volt', 0, 0)
>>> oled.show()
>>> write20.text('1025 mA', 0, 20)
>>> oled.show()
>>> write20.text(12.236 * 1025 / 10000, ' Watt' , 0, 40)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/lib/oled/write.py", line 54, in text
TypeError: 'float' object isn't iterable
>>> watt = 12.236 * 1025 / 10000
>>> write20.text(watt, ' Watt' , 0, 40)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/lib/oled/write.py", line 54, in text
TypeError: 'float' object isn't iterable
>>> write20.text(watt, + ' Watt' , 0, 40)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported type for __pos__: 'str'
>>> write20.text(str(watt) + ' Watt' , 0, 40)
>>> oled.show()
>>> oled.fill(0)
>>> oled.show()
>>> write20.text(str(12.236 * 1025 / 10000) + ' Watt' , 0, 40)
>>> oled.show()
>>> oled.fill(0)
>>> oled.show()
>>> write20.text('%.3f Watt'%(12.236 * 1025 / 10000), 0, 40)
>>> oled.show()
>>> 



Zurück