Skip to content

Instantly share code, notes, and snippets.

@LucasPlacentino
Created July 21, 2023 21:28
Show Gist options
  • Save LucasPlacentino/dec29fe9ac0c6de05a8798cb6e0d7e59 to your computer and use it in GitHub Desktop.
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)
#!/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