บทความนี้กล่าวถึงการใช้โมดูล TFT-LCD ของบอร์ด Sipeed M1W dock suit ผ่านทางคลาส lcd (MaixPy’s lcd class) ที่มีมากับ MaixPy ซึ่งเป็นโมดูลที่ทำให้ผู้เขียนโปรแกรมสามารถใช้งานโดยประสิทธิภาพของการทำงานของคลาสนั้นมีความเร็วสูง
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
ตัวอย่างโปรแกรม lcd2.py
ตัวอย่างโปรแกรมนี้เป็นการโหลดภาพ JPG มาแสดงผลที่จอแสดงผล โดยนำภาพชื่อ pmai.jpg บันทึกไว้ใน microSD หลังจากนั้นเมื่อจ่ายไฟเข้าบอร์ดตัวบอร์ดจะรายงานผลการพบ microSD ดังภาพที่ 4 ซึ่งหมายความว่าการ์ดพร้อมใช้งาน
หลังจากนั้นให้ทดสอบการทำงานโดยใช้โปรแกรม 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)
สรุป
จากบทความนี้จะพบว่า MaixPy มีชุดคำสั่งพื้นฐานสามารถการแสดงผลไม่มากนัก ทั้งนี้เนื่องจากคำสั่งประมวลผลภาพนั้นไปอยู่ที่คลาส image เป็นหลัก แต่อย่างไรก็ดีจะพบว่า ด้วยชุดคำสั่ง lcd มีความเพียงพอต่อการแสดงผลด้วยความเร็วที่มากพอสมควร และเพียงพอสำหรับการใช้งานพื้นฐานได้ดี สุดท้ายนี้ ขอให้สนุกกับการเขียนโปรแกรมครับ
ท่านใดต้องการพูดคุยสามารถคอมเมนท์ได้เลยครับ
(C) 2020-2021, โดย อ.ดนัย เจษฎาฐิติกุล/อ.จารุต บุศราทิจ
ปรับปรุงเมื่อ 2021-10-03, 2021-12-17