Created
July 21, 2023 21:28
-
-
Save LucasPlacentino/dec29fe9ac0c6de05a8798cb6e0d7e59 to your computer and use it in GitHub Desktop.
Waveshare 2.13inch Touch e-Paper HAT (with or without case) example (from Waveshare)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
# -*- coding:utf-8 -*- | |
# GET THE LIB AND PIC FILES FROM WAVESHARE | |
import sys | |
import os | |
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic') | |
libdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'lib') | |
if os.path.exists(libdir): | |
sys.path.append(libdir) | |
from TP_lib import gt1151 # touch controller? | |
from TP_lib import epd2in13_V2 # e-paper display | |
import time | |
import logging | |
from PIL import Image,ImageDraw,ImageFont | |
import traceback | |
import threading | |
logging.basicConfig(level=logging.DEBUG) | |
flag_t = 1 | |
def pthread_irq() : | |
print("pthread running") | |
while flag_t == 1 : | |
if(gt.digital_read(gt.INT) == 0) : | |
GT_Dev.Touch = 1 | |
else : | |
GT_Dev.Touch = 0 | |
print("thread:exit") | |
def Show_Photo_Small(image, small): | |
for t in range(1, 5): | |
if(small*2+t > 6): | |
newimage = Image.open(os.path.join(picdir, PhotoPath_S[0])) | |
image.paste(newimage, ((t-1)/2*45+2, (t%2)*124+2)) | |
else: | |
newimage = Image.open(os.path.join(picdir, PhotoPath_S[small*2+t])) | |
image.paste(newimage, ((t-1)/2*45+2, (t%2)*124+2)) | |
def Show_Photo_Large(image, large): | |
if(large > 6): | |
newimage = Image.open(os.path.join(picdir, PhotoPath_L[0])) | |
image.paste(newimage, (2, 2)) | |
else: | |
newimage = Image.open(os.path.join(picdir, PhotoPath_L[large])) | |
image.paste(newimage, (2, 2)) | |
def Read_BMP(File, x, y): | |
newimage = Image.open(os.path.join(picdir, File)) | |
image.paste(newimage, (x, y)) | |
try: | |
logging.info("epd2in13_V2 Touch Demo") | |
epd = epd2in13_V2.EPD() | |
gt = gt1151.GT1151() | |
GT_Dev = gt1151.GT_Development() | |
GT_Old = gt1151.GT_Development() | |
logging.info("init and Clear") | |
epd.init(epd.FULL_UPDATE) | |
gt.GT_Init() | |
epd.Clear(0xFF) | |
t = threading.Thread(target = pthread_irq) | |
t.setDaemon(True) | |
t.start() | |
# Drawing on the image | |
font15 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 15) | |
font24 = ImageFont.truetype(os.path.join(picdir, 'Font.ttc'), 24) | |
image = Image.open(os.path.join(picdir, 'Menu.bmp')) | |
epd.displayPartBaseImage(epd.getbuffer(image)) | |
DrawImage = ImageDraw.Draw(image) | |
epd.init(epd.PART_UPDATE) | |
i = j = k = ReFlag = SelfFlag = Page = Photo_L = Photo_S = 0 | |
PhotoPath_S = [ "Photo_1_0.bmp", | |
"Photo_1_1.bmp", "Photo_1_2.bmp", "Photo_1_3.bmp", "Photo_1_4.bmp", | |
"Photo_1_5.bmp", "Photo_1_6.bmp", | |
] | |
PhotoPath_L = [ "Photo_2_0.bmp", | |
"Photo_2_1.bmp", "Photo_2_2.bmp", "Photo_2_3.bmp", "Photo_2_4.bmp", | |
"Photo_2_5.bmp", "Photo_2_6.bmp", | |
] | |
PagePath = ["Menu.bmp", "White_board.bmp", "Photo_1.bmp", "Photo_2.bmp"] | |
while(1): | |
if(i > 12 or ReFlag == 1): | |
if(Page == 1 and SelfFlag == 0): | |
epd.displayPartial(epd.getbuffer(image)) | |
else: | |
epd.displayPartial_Wait(epd.getbuffer(image)) | |
i = 0 | |
k = 0 | |
j += 1 | |
ReFlag = 0 | |
print("*** Draw Refresh ***\r\n") | |
elif(k>50000 and i>0 and Page == 1): | |
epd.displayPartial(epd.getbuffer(image)) | |
i = 0 | |
k = 0 | |
j += 1 | |
print("*** Overtime Refresh ***\r\n") | |
elif(j > 50 or SelfFlag): | |
SelfFlag = 0 | |
j = 0 | |
epd.init(epd.FULL_UPDATE) | |
epd.displayPartBaseImage(epd.getbuffer(image)) | |
epd.init(epd.PART_UPDATE) | |
print("--- Self Refresh ---\r\n") | |
else: | |
k += 1 | |
gt.GT_Scan(GT_Dev, GT_Old) | |
if(GT_Old.X[0] == GT_Dev.X[0] and GT_Old.Y[0] == GT_Dev.Y[0] and GT_Old.S[0] == GT_Dev.S[0]): | |
continue | |
if(GT_Dev.TouchpointFlag): | |
i += 1 | |
GT_Dev.TouchpointFlag = 0 | |
if(Page == 0 and ReFlag == 0): #main menu | |
if(GT_Dev.X[0] > 29 and GT_Dev.X[0] < 92 and GT_Dev.Y[0] > 56 and GT_Dev.Y[0] < 95): | |
print("Photo ...\r\n") | |
Page = 2 | |
Read_BMP(PagePath[Page], 0, 0) | |
Show_Photo_Small(image, Photo_S) | |
ReFlag = 1 | |
elif(GT_Dev.X[0] > 29 and GT_Dev.X[0] < 92 and GT_Dev.Y[0] > 153 and GT_Dev.Y[0] < 193): | |
print("Draw ...\r\n") | |
Page = 1 | |
Read_BMP(PagePath[Page], 0, 0) | |
ReFlag = 1 | |
if(Page == 1 and ReFlag == 0): #white board | |
DrawImage.rectangle([(GT_Dev.X[0], GT_Dev.Y[0]), (GT_Dev.X[0] + GT_Dev.S[0]/8 + 1, GT_Dev.Y[0] + GT_Dev.S[0]/8 + 1)], fill=0) | |
if(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 118 and GT_Dev.Y[0] > 6 and GT_Dev.Y[0] < 30): | |
print("Home ...\r\n") | |
Page = 1 | |
Read_BMP(PagePath[Page], 0, 0) | |
ReFlag = 1 | |
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 118 and GT_Dev.Y[0] > 113 and GT_Dev.Y[0] < 136): | |
print("Clear ...\r\n") | |
Page = 0 | |
Read_BMP(PagePath[Page], 0, 0) | |
ReFlag = 1 | |
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 118 and GT_Dev.Y[0] > 220 and GT_Dev.Y[0] < 242): | |
print("Refresh ...\r\n") | |
SelfFlag = 1 | |
ReFlag = 1 | |
if(Page == 2 and ReFlag == 0): #photo menu | |
if(GT_Dev.X[0] > 97 and GT_Dev.X[0] < 119 and GT_Dev.Y[0] > 113 and GT_Dev.Y[0] < 136): | |
print("Home ...\r\n") | |
Page = 0 | |
Read_BMP(PagePath[Page], 0, 0) | |
ReFlag = 1 | |
elif(GT_Dev.X[0] > 97 and GT_Dev.X[0] < 119 and GT_Dev.Y[0] > 57 and GT_Dev.Y[0] < 78): | |
print("Next page ...\r\n") | |
Photo_S += 1 | |
if(Photo_S > 2): # 6 photos is a maximum of three pages | |
Photo_S=0 | |
ReFlag = 2 | |
elif(GT_Dev.X[0] > 97 and GT_Dev.X[0] < 119 and GT_Dev.Y[0] > 169 and GT_Dev.Y[0] < 190): | |
print("Last page ...\r\n") | |
if(Photo_S == 0): | |
print("Top page ...\r\n") | |
else: | |
Photo_S -= 1 | |
ReFlag = 2 | |
elif(GT_Dev.X[0] > 97 and GT_Dev.X[0] < 119 and GT_Dev.Y[0] > 220 and GT_Dev.Y[0] < 242): | |
print("Refresh ...\r\n") | |
SelfFlag = 1 | |
ReFlag = 1 | |
elif(GT_Dev.X[0] > 2 and GT_Dev.X[0] < 90 and GT_Dev.Y[0] > 2 and GT_Dev.Y[0] < 248 and ReFlag == 0): | |
print("Select photo ...\r\n") | |
Page = 3 | |
Read_BMP(PagePath[Page], 0, 0) | |
Photo_L = GT_Dev.X[0]/46*2 + 2-GT_Dev.Y[0]/124 + Photo_S*2 | |
Show_Photo_Large(image, Photo_L) | |
ReFlag = 1 | |
if(ReFlag == 2): # Refresh small photo | |
ReFlag = 1 | |
Read_BMP(PagePath[Page], 0, 0) | |
Show_Photo_Small(image, Photo_S) # show small photo | |
if(Page == 3 and ReFlag == 0): #view the photo | |
if(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 4 and GT_Dev.Y[0] < 25): | |
print("Photo menu ...\r\n") | |
Page = 2 | |
Read_BMP(PagePath[Page], 0, 0) | |
Show_Photo_Small(image, Photo_S) | |
ReFlag = 1 | |
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 57 and GT_Dev.Y[0] < 78): | |
print("Next photo ...\r\n") | |
Photo_L += 1 | |
if(Photo_L > 6): | |
Photo_L = 1 | |
ReFlag = 2 | |
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 113 and GT_Dev.Y[0] < 136): | |
print("Home ...\r\n") | |
Page = 0 | |
Read_BMP(PagePath[Page], 0, 0) | |
ReFlag = 1 | |
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 169 and GT_Dev.Y[0] < 190): | |
print("Last page ...\r\n") | |
if(Photo_L == 1): | |
print("Top photo ...\r\n") | |
else: | |
Photo_L -= 1 | |
ReFlag = 2 | |
elif(GT_Dev.X[0] > 96 and GT_Dev.X[0] < 117 and GT_Dev.Y[0] > 220 and GT_Dev.Y[0] < 242): | |
print("Refresh photo ...\r\n") | |
SelfFlag = 1 | |
ReFlag = 1 | |
if(ReFlag == 2): # Refresh large photo | |
ReFlag = 1 | |
Show_Photo_Large(image, Photo_L) | |
except IOError as e: | |
logging.info(e) | |
except KeyboardInterrupt: | |
logging.info("ctrl + c:") | |
flag_t = 0 | |
epd.sleep() | |
time.sleep(2) | |
t.join() | |
epd.Dev_exit() | |
exit() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment