Alternate Method to Draw Picture on Nokia 5110

, , Leave a comment

Halo selamat datang kembali di andidinata.com. Mungkin ini adalah cara yang paling mudah untuk dapat menampilkan sebuah gambar hitam putih pada layar Nokia 5110 dengan driver pcd8544.py. Metode ini berbeda dengan metode yang disarankan oleh driver tersebut yaitu melalui konversi gambar hitam putih ke satu baris bytearray yang dijalankan oleh framebuffer dari Micropython.

Metode alternatif ini muncul karena saya mendapatkan kesulitan untuk menemukan converter online dan offline yang menghasilkan byte value yg masuk akal. Yang saya maksud masuk akal adalah hasil konversi yang menghasilkan byte value yang sama, misalnya hampir semua bernilai \x00 padahal target gambar yang dikonversi memiliki area hitam yang luas. Kesulitan kedua adalah mendapatkan converter yang langsung menghasilkan satu baris bytearray. Anggap saja bila hasil konversinya masuk akal. Kebanyakan converter online menghasilkan bytearray dalam susunan matrix dan telah diformat seperti nantinya digunakan pada sketch Arduino. Bagi pengguna Arduino hal ini sangat memudahkan karena sketch sudah jadi dan dapat langsung digunakan. Bagi Micropython kita akan membutuhkan satu langkah lagi yaitu membuat parser agar byte value tersebut diekstrak dan disusun menjadi menjadi satu baris bytrarray. Maafkan jika saya pemalas, kalau bisa tahapan seminimal mungkin.

Dalam eksplorasi, salah satu online image converter menjadikan sebuah gambar menjadi deretan biner yaitu deretan angka 0 dan 1. Warna putih pada gambar akan diberi nilai 0 dan warna hitam akan diberi nilai 1. Hasil konversinya berupa deretan nilai 0 dan 1 yang dapat di download dalam bentuk file .txt seperti bisa dilihat pada gambar dibawah ini.

Tidak hanya merubah gambar menjadi deretan angka 0 dan 1, converter ini juga menyediakan opsi untuk image resizing secara langsung agar gambar dapat ditampilkan secara utuh sesuai dengan panjang atau lebar layar yang akan digunakan. Dengan adanya file txt ini kita dapat meng-assign setiap urutan nomor 0 atau 1 ke masing-masing pixel dari display Nokia 5110. Mulai dari pixel paling kiri hingga paling kanan, baris pertama hingga terakhir. Jika seluruh pixel dengan nilai 0 (putih) dan nilai 1 (hitam), maka kita dapat menghasilkan sebuah gambar.

Untuk itu tahap pertama setelah kita mendapatkan file txt dari converter adalah mengirimkan file .txt ke Micropyton, misalnya dengan ampy

ampy -b 115200 -p /dev/ttyUSB0 put batman.txt

Setelah itu masuklah ke Micropython lalu load file tersebut dengan akses read only (r).

>>> f=open("batman.txt,'r')
>>> pic=f.read()

File batman.txt yang telah terbuka akan akan terbaca sebagai berikut.  Kita melihat karakter \r (CR) & \n (LF) mengakhiri sebuah segmen atau bagian. Karakter tersebut akan memudahkan kita untuk memisahkan baris perbaris dengan merubah data ini menjadi sebuah list.

>>> pic_list=pic.split('\r\n')

Hasil dari split tersebut adalah sebuah list yang masing-masing baris mendapatkan nomor index. Untuk itu selanjutnya kita dapat membuat sebuah script sederhana untuk menempatkan setiap index pada tempatnya.

for y, row in enumerate(pic_list):
    for x in enumerate(row):
        framebuf.pixel(x[0]+pos_x,y+pos_y,int(x[1]))
    lcd.data(buffer)

Cara tersebut yang saya gunakan dan bahas untuk menampilkan pixel art pada layar Led Matrix 8×8 dalam buku saya kedua dengan judul “Fun Coding with Micropython“. Untuk itu saya membuat sebuah wrapper dengan nama nokia5110.py (download/clone github) untuk memudahkan pengguna dalam menampilkan gambar dengan langkah yang sangat mudah seperti dibawah ini.

>>> lcd.picture(posX,posY,"filename.txt")
>>> lcd.picture_invert(posX,posY,"filename.txt")
Picture asli dan inverted
Custom position X dan Y

Metode ini bisa dikembangkan untuk membuat custom image jika kita ingin membuat dashboard dengan bitmap khusus atau membuat sebuah animasi yang menarik yang dibangun dari masing-masing pixel.

Sekian sharing saya saat ini, kiranya memberikan manfaat. Mohon dukungan untuk like, share dan subscribe blog ini. Terima kasih dan sampai bertemu pada artikel berikutnya.

Facebook Comments
 

Leave a Reply