Jump to content

Wie kann ich PIL auf dem Red Brick nutzen?


Uhlhorn
 Share

Recommended Posts

Hi,

 

ich bin ja noch Python-Anfänger. Ich habe nun ein Script geschrieben, welches PIL verwendet. Übertrage ich es auf den Red Brick erhalte ich die Fehlermeldung:

 

     ImportError: No module named 'PIL'

 

Wie bekomme ich denn PIL auf den Red Brick?

Link to comment
Share on other sites

„Wenn andere Bibliotheken, wie die Installierten genutzt werden sollen, dann können diese entweder mit dem eigenen Programm hochgeladen werden oder aber mittels apt-get, pip, pear, npm oder ähnlichen Paketmanagern installiert werden.“

(Gefunden: Doku RED Brick)

 

Leider steht da nicht, wie man diese mit dem eigenen Programm hochlädt. Auch eine Suche bei YouTube und Google hat nichts Brauchbares ergeben. Und die Paketmanager, die ich ausprobiert habe, benötigen Internet, welches aber auf dem Red Brick nicht verfügbar ist.

 

Wie installiere ich das nun? Oder wie lade ich diese Bibliotheken hoch?!?

 

Ich habe schon die Programme aus meinem lokalen PIL-Ordner mit meinem Programm hochgeladen. Es hat leider nichts geholfen.

 

Ich bin jetzt völlig gestrandet und weiß nicht mehr weiter. :-(

Link to comment
Share on other sites

Am einfachsten ist es wenn du den RED Brick dafür kurz ins Internet bringst, z.B. mit einem WIFI USB Stick.

Das ist es leider nicht, weil ich keinen WLAN-Stick habe. Ich nutze seit Mitte der 90er Jahre Computer von Apple, und Apple brachte als einer der ersten Hersteller weltweit WLAN ausgestattete Rechner auf den Markt. Seit diesem Zeitpunkt hatte ich nie wieder einen Computer ohne WLAN. Daher gab es für mich auch nie die Notwendigkeit einen WLAN-Stick anzuschaffen.

 

Ich müsste erst einen WLAN-Stick bestellen und mehrere Tage auf die Lieferung warten. Und ich bräuchte ihn auch nur für diesen Zeck, sonst nicht.

 

Nein, ich beziehe mich auf Eure Aussage: „Wenn andere Bibliotheken […] genutzt werden sollen, dann können diese […] mit dem eigenen Programm hochgeladen werden […]“ DAS möchte ich gerne machen. Ich weiß aber nicht wie das geht, das wird nämlich nicht erklärt.

 

Den externen Link schaue ich mir natürlich auch an. Danke dafür. ;-) Vielleicht bekomme ich es ja hin.

Link to comment
Share on other sites

Ich habe inzwischen

Pillow-5.4.1.tar.gz

heruntergeladen und auf den Red Brick kopiert. Dann musste ich erst mal herausfinden, wo das Teil liegt, denn die Dokumentation erklärt leider nicht, wo die hochgeladenen Dateien liegen (➢Verbesserungsvorschlag!).

 

Falls das hier ein anderer Anfänger liest:

Sie liegen im Userverzeichnis unter „programs“ „Name des Programms“/bin/.

 

In meinem Fall heißt das Programm: OLED_Hello_World. Daraus ergibt sich der Pfad:

~/programs/OLED_Hello_World/bin/

 

Hier bekommt man das File: Pillow 5.4.1 – Download files

 

Dann habe ich, wie auf der Website beschrieben,

tar xvfz Pillow-5.4.1.tar.gz

erfolgreich ausgeführt. Nun muss ich aber den Namen der .whl-Datei haben, um

pip install …

ausführen zu können. Woher bekommt man den?!?

 

Also habe ich mit

sudo updatedb

die Locate-Datenbank aktualisiert und mit

locate ".whl"

nach den Wheel-Datein gesucht. Doch eine Wheel-Datei für PIL oder Pillow ist nicht dabei.

locate „pil*.whl"

bringt ebenfalls kein Treffer.

 

Gemäß der Website sollte aber eine .whl-Datei vorhanden sein oder entstehen. Das ist aber nicht der Fall. :-(

 

pip install Pillow

wirft auch jedem menge unverständlicher Fehlermeldungen raus.

Screenshot_2019-03-03_19_25_10.png.e91bc9c123234505ac56819bb13b207b.png

Screenshot_2019-03-03_19_51_41.thumb.png.8d69a39f6661b8b6b0e1fdacd8864c80.png

Link to comment
Share on other sites

Hab das gerade ausprobiert, am einfachsten ist es wenn du PIL über die Debian Pakete installierst:

 

Diese drei runterladen:

 

* https://packages.debian.org/stretch/armhf/python-pil/download

* https://packages.debian.org/stretch/armhf/python3-pil/download

* https://packages.debian.org/stretch/armhf/libwebpdemux2/download

 

Das ist PIL für Python 2 und 3 sowie eine Abhängigkeit von beiden.

 

Auf dem RED Brick dann:

 

sudo dpkg -i libwebpdemux2_0.5.2-1_armhf.deb python3-pil_4.0.0-4_armhf.deb python-pil_4.0.0-4_armhf.deb 

 

Sieht dann so aus:

 

tf@red-brick:~/pil$ ls
libwebpdemux2_0.5.2-1_armhf.deb  python3-pil_4.0.0-4_armhf.deb  python-pil_4.0.0-4_armhf.deb

tf@red-brick:~/pil$ sudo dpkg -i libwebpdemux2_0.5.2-1_armhf.deb python3-pil_4.0.0-4_armhf.deb python-pil_4.0.0-4_armhf.deb 

Selecting previously unselected package libwebpdemux2:armhf.
(Reading database ... 203093 files and directories currently installed.)
Preparing to unpack libwebpdemux2_0.5.2-1_armhf.deb ...
Unpacking libwebpdemux2:armhf (0.5.2-1) ...
Selecting previously unselected package python3-pil:armhf.
Preparing to unpack python3-pil_4.0.0-4_armhf.deb ...
Unpacking python3-pil:armhf (4.0.0-4) ...
Selecting previously unselected package python-pil:armhf.
Preparing to unpack python-pil_4.0.0-4_armhf.deb ...
Unpacking python-pil:armhf (4.0.0-4) ...
Setting up libwebpdemux2:armhf (0.5.2-1) ...
Setting up python3-pil:armhf (4.0.0-4) ...
Setting up python-pil:armhf (4.0.0-4) ...
Processing triggers for libc-bin (2.24-11+deb9u3) ...
tf@red-brick:~/pil$ 

Link to comment
Share on other sites

Es hat funktioniert! :-) Danke sehr!

 

PIL sollte wegen der Displays unbedingt in die Vorinstallation des Red Brick aufgenommen werden. ;-)

 

Und es sollte auch eine Funktion für größere Schriften in die API aufgenommen werden. Mit einer schön großen Schrift sieht das doch gleich viel geiler aus. ;-)

IMG_2374.jpg.9818f1a951a1643488acc90d24c5fd76.jpg

IMG_2376.jpg.8a54df0785d658805465211c4c18feda.jpg

Link to comment
Share on other sites

Oh Prima! :-)

 

Und die Displays könnten auch größere Textgrößen haben. So könnte das OLED-Display neben einer Textgröße für 8 Zeilen auch Textgrößen für 4 Zeilen haben, für 3 Zeilen, 2 Zeilen und 1 Zeile. Dann hätte man sehr viel mehr Nutzungsmöglichkeiten. Ich wäre auch bereit die Bitfolgen für die Zeichen zu erstellen. ;-)

Link to comment
Share on other sites

Ich muss noch die ganzen LC128x64 draw_*()-Funktionen auf das OLED 128x64 portieren.

Ich teste gerade das Display. Bitte nicht so einen Legotext! Das ist ja grausam! Lieber eine schöne Schrift, so, wie ich es hier im OLED gemacht habe. Ich mache Euch auch gerne die Bitmaps dafür. ;-)

OLED_grosse_Schrift.jpg.d05c3171b40033d406179cfc2d0c457a.jpg

Link to comment
Share on other sites

Die Firmware inklusive der Schrift und GUI ist aktuell 22kb groß. Wir haben in Summe 32kb zur Verfügung, davon werden 8kb immer vom Booloader belegt. Es sind also aktuell noch 2kb frei.

 

Eine Bitmap-Schriftart in der Größe ist mehrere hunderte Kilobyte groß. Das wird also nichts ;). Und nein, ein TrueType-Renderer oder sowas passt auch nicht auf den Mikrocontroller.

 

Aber für hübsche große Schriftarten kann man ja PIL oder ähnliches nutzen!

Link to comment
Share on other sites

Ah, okay. Das ist natürlich ein valides Argument. Dass kann ich einsehen. :-)

 

Kann man vielleicht nicht nur die Funktion in die API aufnehmen, die auf einen externen True-Type-Font verweist? Also so in der Art:

 

BrickletLCD128x64.draw_TTCtext(position_x, position_y, font, size, index, encoding, color, text)

(Also angelehnt an PIL.ImageFont.truetype)

 

 

Wobei

font

ein String mit Pfad und Namen der TTC-Datei ist:

font = "Fonts/Menlo.ttc"

 

So was müsste doch gehen, oder?

 

Und kann man den Speicher vielleicht auch vergrößern?

LCDugly.jpg.9a3b850e89c0be25e871adbd73ee9e8f.jpg

LCDnice.jpg.66c0626b9c5cc875cd4429b4ead6f0f9.jpg

Link to comment
Share on other sites

Wir können ein Beispiel machen welches diese Funktion implementiert. Das kann aber nicht teil der API sein.

 

Die APIs die wir für die ganzen Programmiersprachen anbieten sind komplett auto-generiert.

 

Wir haben ~120 Produkte und ~17 Programmiersprachen mit je ~3 Beispielen. Wenn du da das Kreuzprodukt draus bildest siehst du wie viel Code das ist. Es wäre unmöglich für uns das per Hand zu schreiben.

 

Alle APIs, die Dokumentationen für die APIs und die meisten Beispiele sind auto-generiert. Der Generator nutzt fürs LCD128x64 diese Config: https://github.com/Tinkerforge/generators/blob/master/configs/bricklet_lcd_128x64_config.py

 

Das sind also alle Informationen die zur Verfügung stehen die API, Beispiele und Dokumentation zu generieren.

Link to comment
Share on other sites

Ah, okay, verstehe. Das ist nachvollziehbar.

 

Wir können ein Beispiel machen welches diese Funktion implementiert.

Das wäre wohl eine große Hilfe, zumindest für Anfänger wie mich. :-)

 

Bei kleinen Texten sehen die True-Type-Fonts ziemlich bescheiden aus, wie ich inzwischen sehe. Dafür müsste man dann doch ein HiRes-Displays haben.

 

Ich muss mal schauen, wie ich das mache. Vielleicht das HDMI-Display – davon kann man aber leider nur eins anschließen. Oder für jeden Wert ein eigenes OLED.

Link to comment
Share on other sites

Produktwunsch: TinkerForge könnte vielleicht ein farbiges HiDPI-Display anbieten, so wie das in diesem USB-Messgerät (siehe Bild).

 

Oder auch E-Ink-Displays, so wie in den beiden anderen Bildern. So was wäre ziemlich geil! :-)

 

Bilder: Aliexpress, Waveshare

 

USB-Tester.jpg.6fba0d642983d25718d7b3f15c49d10f.jpg

E-Ink_monochrome.jpg.f6e948ed34d6151e036ffe8ad90b14d0.jpg

E-Ink_color.jpg.68cc7e1230d8c76929a962dc131e844c.jpg

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...