[TH] The MaixPy’s lcd class.

บทความนี้กล่าวถึงการใช้โมดูล TFT-LCD ของบอร์ด Sipeed M1W dock suit ผ่านทางคลาส lcd (MaixPy’s lcd class) ที่มีมากับ MaixPy ซึ่งเป็นโมดูลที่ทำให้ผู้เขียนโปรแกรมสามารถใช้งานโดยประสิทธิภาพของการทำงานของคลาสนั้นมีความเร็วสูง

ภาพที่ 1 จอแสดงผลของ Sipeed M1W dock Suit

lcd class

คลาส lcd เป็นคลาสสำหรับใช้ในการเชื่อมประสานกับ TFT ที่มีพอร์ตสำหรับเสียบสายมากับบอร์ด โดยมีรายการภายในคลาสดังนี้

object <module 'lcd'> is of type module
  __name__ -- lcd
  init -- <function>
  deinit -- <function>
  width -- <function>
  height -- <function>
  type -- <function>
  freq -- <function>
  set_backlight -- <function>
  get_backlight -- <function>
  display -- <function>
  clear -- <function>
  rotation -- <function>
  draw_string -- <function>
  fill_rectangle -- <function>
  XY_RLUD -- 0
  YX_RLUD -- 32
  XY_LRUD -- 64
  YX_LRUD -- 96
  XY_RLDU -- 128
  YX_RLDU -- 160
  XY_LRDU -- 192
  YX_LRDU -- 224
  BLACK -- 0
  NAVY -- 3840
  DARKGREEN -- 57347
  DARKCYAN -- 61187
  MAROON -- 120
  PURPLE -- 3960
  OLIVE -- 57467
  LIGHTGREY -- 6342
  DARKGREY -- 61307
  BLUE -- 7936
  GREEN -- 57351
  CYAN -- 65287
  RED -- 248
  MAGENTA -- 8184
  YELLOW -- 57599
  WHITE -- 65535
  ORANGE -- 8445
  GREENYELLOW -- 58799
  PINK -- 8184

ค่าคงที่

กลุ่มค่าคงที่ที่มากับคลาส lcd เป็นค่าคงที่สำหรับตั้งค่าการแสดงผลในกรณีที่แสดงผลที่ปรากฏนั้นกลับทิศทางกัน เช่น ตัวอักษรสลับซ้าย หรือบนล่างเป็นต้น

  • XY_RLUD
  • YX_RLUD
  • XY_LRUD
  • YX_LRUD
  • XY_RLDU
  • YX_RLDU
  • XY_LRDU
  • YX_LRDU

ค่าสี

ค่าสีที่คลาส lcd เตรียมไว้ให้ใช้งานมีดังนี้

  • BLACK
  • NAVY
  • DARKGREEN
  • DARKCYAN
  • MAROON
  • PURPLE
  • OLIVE
  • LIGHTGREY
  • DARKGREY
  • BLUE
  • GREEN
  • CYAN
  • RED
  • MAGENTA
  • YELLOW
  • WHITE
  • ORANGE
  • GREENYELLOW
  • PINK

คำสั่ง

กลุ่มคำสั่งของคลาส lcd มีดังต่อไปนี้

init()

เป็นคำสั่งสำหรับเริ่มต้นให้จอแสดงผลทำงาน

deinit()

เป็นคำสั่งยกเลิกการใช้งานจอแสดงผล

width()

เป็นคำสั่งอ่านค่าความกว้างของจอแสดงผล

height()

เป็นคำสั่งสำหรับอ่านค่าความสูงของจอแสดงผล

type()

คืนค่าประเภทของจอแสดงผล แต่ในขณะนี้ยังไม่รองรับการแยกประเภทของจอแสดงผล

  • 0 ไม่มีจอแสดงผล
  • 1 มีจอแสดงผลเสียบ

freq()

สำหรับอ่านค่าความถี่สัญญาณนาฬิกาในการรับส่งข้อมูลระหว่างจอแสดงผลกับบอร์ด

freq(ค่าความถี่)

สำหรับตั้งค่าความถี่สัญญาณนาฬิกาใหม่ตามที่กำหนด

set_backlight( สถานะ )

ถ้า สถานะเป็น True จะเปิดแสงไฟส่องสว่างของ TFT แต่ถ้าเป็น False จะเป็นการปิดแสงสว่าง

get_backlight()

เป็นคำสั่งอ่านค่าสถานะของหลอดไฟส่องสว่างของ TFT

display( img )

นำค่าบัฟเฟอร์ที่เก็บใน img มาแสดงผลบนจอแสดงผล

clear( ค่าสี )

ทำการเคลียร์จอแสดงผลด้วยค่าสีที่กำหนด ถ้าไม่ใส่จะเป็นสีดำ

rotation( x )

ทำการหมุนจอแสดงผล

draw_string(x,y,ข้อความ, สีอักษร, สีพื้นหลัง )

แสดงข้อความที่ตำแหน่ง (x,y) ด้วยสีที่กำหนด

fill_rectangle( x, y, w, h, สี )

วาดสี่เหลี่ยมทึบตามสีที่กำหนด

ตัวอย่างโปรแกรม

ตัวอย่างโปรแกรม lcd1.py

ตัวอย่างแสดงการเปลี่ยนสีพื้นหลังพร้อมแสดงข้อความ หลังจากนั้นทำการหมุนการแสดงผลด้วย rotation() แล้วแสดงข้อความเป็นดังนี้

# lcd1.py - By: JarutEx - Sat Oct 2 2021

import lcd,time,sensor

if (lcd.type() == 0):
    print("Error : no lcd shield!")
    while (True):
        pass

lcd.freq(16000000)
lcd.init(color=(255,0,0))
colors = [
    lcd.BLACK,
    lcd.NAVY,
    lcd.DARKGREEN,
    lcd.DARKCYAN,
    lcd.MAROON,
    lcd.PURPLE,
    lcd.OLIVE,
    lcd.LIGHTGREY,
    lcd.DARKGREY,
    lcd.BLUE,
    lcd.GREEN,
    lcd.CYAN,
    lcd.RED,
    lcd.MAGENTA,
    lcd.YELLOW,
    lcd.WHITE,
    lcd.ORANGE,
    lcd.GREENYELLOW,
    lcd.PINK
]
lcd.set_backlight(True)
for color in colors:
    lcd.clear(color)
    lcd.draw_string(40,100,"JarutEx",lcd.WHITE,color)
    lcd.draw_string(40,120,"JarutEx",lcd.BLACK,color)
    time.sleep(1)
lcd.clear(lcd.RED)
lcd.rotation(0)
lcd.draw_string(30, 30, "JarutEx", lcd.WHITE, lcd.RED)
time.sleep(1)
lcd.rotation(1)
lcd.draw_string(60, 60, "JarutExy", lcd.WHITE, lcd.RED)
time.sleep(1)
lcd.rotation(2)
lcd.draw_string(120, 60, "JarutEx", lcd.WHITE, lcd.RED)
time.sleep(1)
lcd.rotation(3)
lcd.draw_string(120, 120, "JarutExy", lcd.WHITE, lcd.RED)
time.sleep(1)
if (lcd.get_backlight()):
    lcd.set_backlight( False )

ในช่วงแรกที่เป็นการเปลี่ยนสีพื้นหลังจะได้ผลลัพธ์ดังตัวอย่างภาพที่ 2 และในส่วนของการหมุนการแสดงผลและแสดงข้อความจะเป็นตามภาพที่ 3

ภาพที่ 2 ตัวอย่างผลลัพธ์เมื่อสั่งเปลี่ยนพื้นหลัง
ภาพที่ 3 ตัวอย่างผลลัพธ์เมื่อสั่งหมุนและแสดงข้อความ

ตัวอย่างโปรแกรม lcd2.py

ตัวอย่างโปรแกรมนี้เป็นการโหลดภาพ JPG มาแสดงผลที่จอแสดงผล โดยนำภาพชื่อ pmai.jpg บันทึกไว้ใน microSD หลังจากนั้นเมื่อจ่ายไฟเข้าบอร์ดตัวบอร์ดจะรายงานผลการพบ microSD ดังภาพที่ 4 ซึ่งหมายความว่าการ์ดพร้อมใช้งาน

ภาพที่ 4 การแสดงผลเมื่อพบการ์ด microSD

หลังจากนั้นให้ทดสอบการทำงานโดยใช้โปรแกรม lcd2 ดังต่อไปนี้ เพื่อโหลดภาพด้วยคำสั่ง image.Image(“/sd/pmai.jpg”) และแสดงภาพด้วยคำสั่ง lcd.display( img ) จะได้ผลลัพธ์ดังตัวอย่างภาพที่ 5

# lcd2 - By: JaritEx - Sun Oct 3 2021

import image, time, lcd

clock = time.clock()
print("lcd freq. = {}Hz".format(lcd.freq()))
lcd.freq(80000000)
lcd.init(color=(255,0,0))
img = image.Image("/sd/pmai.jpg")

while(True):
    clock.tick()
    lcd.display(img)
ภาพที่ 5 ตัวอย่างผลลัพธ์จาก lcd2.py

สรุป

จากบทความนี้จะพบว่า MaixPy มีชุดคำสั่งพื้นฐานสามารถการแสดงผลไม่มากนัก ทั้งนี้เนื่องจากคำสั่งประมวลผลภาพนั้นไปอยู่ที่คลาส image เป็นหลัก แต่อย่างไรก็ดีจะพบว่า ด้วยชุดคำสั่ง lcd มีความเพียงพอต่อการแสดงผลด้วยความเร็วที่มากพอสมควร และเพียงพอสำหรับการใช้งานพื้นฐานได้ดี สุดท้ายนี้ ขอให้สนุกกับการเขียนโปรแกรมครับ

ท่านใดต้องการพูดคุยสามารถคอมเมนท์ได้เลยครับ

(C) 2020-2021, โดย อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ
ปรับปรุงเมื่อ 2021-10-03, 2021-12-17