E Ink avanture s Inky pHAT-om

Elektronički papir ili samo papir

Nemojte propustiti

E Ink avanture s Inky pHAT-om

E Ink (AKA E Paper, electronic paper) već je neko vrijeme s nama, a mogli ste se sresti s tom tehnologijom ako (još...

Raspberry Pi Story

Raspberry Pi maleni je SBC (single board computer) razvijen od Raspberry Pi Foundation kako bi pomogao u edukaciji osnova računarstva. Međutim, vrlo brzo pokazalo...

Spajanje više tipkala na jedan pin

Mnogi su nas nakon članka o izborniku s LCD shieldom pitali kako spojiti tipkala da rade na takav način. Jedan od načina...

I2C LCD

Sada je vrijeme da se pozabavimo jednim od osnovnih koraka u našim projektima a to je prikazivanje poruka na LCD ekranu. Danas...

Izrada izbornika na LCD štitu

Nakon što smo se upoznali sa shield koji ima LCD ekran i tipkovnicu. Ako još niste možete to učiniti ovdje. Vrijeme je...

E Ink (AKA E Paper, electronic paper) već je neko vrijeme s nama, a mogli ste se sresti s tom tehnologijom ako (još uvijek) čitate knjige i koristite neku od verzija Amazonovog Kindlea. U DIY zajednici postoji nekoliko različitih modela koji su dostupni u prodaji, najpoznatiji su Waveshare-ovi Arduino kompatibilni E Ink ekrani. Međutim, ne koriste se baš često, jer ne samo da su daleko skuplji od npr. LCD ekrana, nego je i njihovo korištenje sve samo ne banalno. Pimoroni je odlučio pojednostavniti stvari do maksimuma i napravio je svoju verziju E Ink ekrana: Inky pHAT.

Inky ima hrpu prednosti pred ostalim E Ink ekranima: kao prvo, namjenjen je korištenju s Raspberry Pi-em (naročito sa Zero verzijom, ali bilo koji RPi s 2×20 GPIO headerom će poslužiti) pa dolazi u pHAT formatu, što znači da je priključivanje na RPi banalno jednostavno. Ovo ima još jednu veliku prednost – pošto slika na E Ink ekranima ostaje i nakon što više nisu priključeni na napajanje, jedan RPi može se koristiti za ispisivanje cijelog niza Inkya i tako dobiti npr. high-tech konferencijske bedževe. Koji su naravno ponovno upotrebljivi, samo treba ispisati nova imena na njih!

- oglas-

Ima toga još – Inky nije obični crno-bijeli E Ink, ima on i crvenu boju u kombinaciji, tako da je daleko efektniji od običnog E Ink ekrana (istina, zbog toga mu je bijela boja lagano crvenkasta, ali to mu se lako oprosti). Ali niti to nije sve, Pimoroni se potrudio i napravio Python biblioteku s kojom je korištenje Inkya pravi gušt, a ako ste ikada koristili Python Imaging Library (PIL), Inky je dječja igra 🙂

U nastavku slijede osnovne upute za korištenje Inkya, od instalacije na RPi, preko nezaobilaznog ‘Hello Worlda‘, sve do grafike (uključujući i GIMP ekshibicije potrebne da bi nastao PNG kojeg će Inky ispravno prikazati).

1. Instalacija

Najjednostavniji način instalacije je pokretanje instalacijske procedure iz terminala (ili preko SSH):

sudo curl https://get.pimoroni.com/inkyphat 

Ukoliko dobijete slijedeću poruku:

``` % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0curl: (6) Could not resolve host: get.pimoroni.com ``` 

promijenite DNS server u datoteci /etc/resolv.conf. Umjesto IP adrese koja se tamo nalazi upišite 8.8.8.8 (ovo je Googleov DNS server) i pokušajte ponovno.

Nakon instalacije, u Home direktoriju nalazi se novi direktorij ‘Pimoroni’ s poddirektorijem ‘inkyphat’ u kojem je opet poddirektorij ‘examples’. Bilo koji od ovih primjera moguće je pokrenuti iz terminala naredbom ‘python ime_datoteke.py’.

2. Tekst

Naravno, niti jedne upute ne bi bile to što jesu bez ‘Hello world’ dijela, pa evo ga i ovdje. U terminalu otvorite novu datoteku naredbom ‘nano hello_world.py’ (nano je jednostavni tekst editor koji radi u terminalu, isto možete postići ako datoteku napravite na računalu u bilo kojem tekst editoru ili Python IDE-u i onda ju kopirate na RPi). Kopirajte slijedeći kod u datoteku:

``` from PIL import ImageFont import inkyphat print("Displays 'Hello world!' on Inky pHAT!") font_file = inkyphat.fonts.FredokaOne font_size = 20 hello_top = 30 hello_left = 30 text = "Hello " font = ImageFont.truetype(font_file, font_size) inkyphat.text((hello_left, hello_top), text, inkyphat.BLACK, font) width, height = font.getsize(text) inkyphat.text((hello_left + width, hello_top), "world!", inkyphat.RED, font) inkyphat.show() ```

Nakon što spremite datoteku i pokrenete ju naredbom ‘python hello_world.py’ na Inky-u će se ispisati ‘Hello‘ (crno) i ‘world‘ (crveno) na zadanoj poziciji.

U ovom primjeru ima nekoliko zanimljivih detalja. Prvi se odnosi na upotrebu fontova – u ovom slučaju koristi se font koji dolazi zajedno s Inky bibliotekom, ali može se koristiti praktički bilo koji TrueType Font (TTF), za koji je u tom slučaju potrebno navesti putanju do .ttf datoteke.

Također, u primjeru se navodi i veličina fonta (font_size), kao i njegov smještaj (hello_top i hello_left). Mjerna jedinica je piksel, a dimenzije Inky-a su pikselima su 212×104 (širina x visina). Pošto ‘Hello’ ispisujemo u crnoj boji, a ‘world!’ u crvenoj, širinu prvog teksta (kao i visinu, ali ona nam ovdje nije potrebna) lako je dobiti pozivom funkcijefont.getsize(text) gdje je ‘text’ bilo koji tekst čije dimenzije želimo doznati.

Na kraju, sav ovaj kod bio je samo priprema, ispis na Inky započinje tek pozivom inkyphat.show(), nemojte ga zaboraviti 🙂 A sada slijedi najzabavniji dio: grafika!

3. Grafika

Kako prikazati grafiku? Ne baš jednostavno 🙁 Za početak, grafiku koju želite prikazati treba nacrtati u nekom grafičkom alatu – u ovom slučaju to je GIMP jer je Pimoroni napravio paletu za njega. Grafika smije imati samo tri boje: bijelu (#ffffff), crnu (#000000) i crvenu (#ff0000). I mora biti velika 212×104 piksela za full screen prikaz (naravno, može biti i manja). Za potrebe testiranja dovoljno je na bijeloj podlozi napraviti crveno i crno polje kao na slici.

Sada je potrebno importirati paletu u GIMP. Za početak, treba izabrati s menija Windows > Dockable Dialogs > Palettes i onda bilo gdje na popisu paleta kliknuti desnom gumbom miša i izabrati Import Palette. Onda treba izabrati opciju Palette file i na kraju kliknuti na ikonu sa slikom foldera i pronaći datoteku Inky-pHAT.gpl. Ova datoteka nalazi se u inky-phat repozitoriju na Githubu, u direktoriju tools

Idući korak je na meniju izabrati Image > Mode > Indexed. U dijalogu koji se pojavi, izaberete opciju Use custom palettei iz padajuće liste izaberete Inky-pHAT.gpl. Ukoliko je označena opcija Remove unused colors from colormap, uklonite kvačicu kraj nje. I na kraju klik na Convert! 

Ali, to nije sve… Na kraju priče, grafiku treba spremiti u PNG formatu: File > Export As… i izaberete neko ime (u našem slučaju rwb_rest.png) s ekstenzijom .png. U dijalogu koji se pojavi ostavite defaultne postavke i spremite file.

Kopirajte ovaj file na RPi u isti direktorij kao i ovu Python scriptu:

``` from PIL import Image import inkyphat print("""Inky pHAT: color test Displays the rwb_test.png - colors should be red, white, black """) inkyphat.set_image(Image.open("rwb_test.png")) inkyphat.show() ```

 
Nakon pokretanja skripte i osvježavanja prikaza na ekranu bi trebala bit ovakva slika. Ako nije, nešto ne valja 🙂

Naravno, ovdje priča ne završava. Postoji i alternativni način – crtanje grafike direktno iz koda. Ovo nije uvijek najbolje rješenje, ali u slučaju kada se prikazuju dinamički podaci (npr. grafikon kretanja temperature svakih sat vremena), nema drugog načina.

4. Napredno korištenje

Prva stvar koju treba spomenuti zajedničko je korištenje teksta i grafike u istom prikazu koje se svodi na kombiniranje prethodna dva primjera. Grafika je u ovom slučaju manja od ukupne veličine ekrana, ali čak i grafika preko cijelog ekrana može se kombinirati s natpisom preko nje, treba samo pripaziti na redoslijed.

Na kraju, ostaje samo primjer izravnog crtanja po ekranu. Ovdje se koristi prije spomenuta PIL biblioteka (neizravno, preko inkyphat objekta), a u nastavku slijedi primjer crtanja osnovnih geometrijskih oblika i slika rezultata izvođenja ovog primjera.

``` #Inky pHAT free drawing example import inkyphat print("Inky pHAT free drawing example") #Draw line inkyphat.line([(10,10),(50,20)],fill=inkyphat.BLACK,width=2) #Draw rectangle inkyphat.rectangle([(50,50),(100,80)],outline=inkyphat.BLACK,fill=inkyphat.RED) #Draw ellipse inkyphat.ellipse([(120,20),(160,80)],outline=inkyphat.RED,fill=inkyphat.WHITE) inkyphat.show() ```

Rezultat ove skripte je:

Možda vas zanima i ovo:

Komentiraj

Unesite svoj komentar!
Ovdje unesite svoje ime

Popularno

Uvjeti korištenja

Uvjeti korištenja seekretors.org stranice (u daljnjem tekstu: ove stranice) u vlasništvu su njenih osnivača Marka Miroslava Bače i Tomislava Preksavca (u daljnjem...

Enderova nova pamet

Enderu 3 teško je naći manu (naročito za cijenu po kojoj se prodaje), i ako bi nešto trebalo izdvojiti, to je sigurno njegov...

PYW – Vijak

Evo nas na prvoj stranici našeg putovanja, a s čime je bolje početi nego s dobrom vezom. Zato krenimo od vijčanog spoja.

Print Your world- uvod

Dobrodošli u novi serijal Print Your world ili kako bi mi rekli ekstrudiraj, ekstrudiraj. U ovom serijalu bavit ćemo...

Korekcija putanje glave 3D printera

Konkretno, u mom slučaju radi se o 3D printeru tipa delta, premda vjerujem da sličnih problema ima i kod modela s klasičnim...