a125f45b34
Example documentation
269 lines
10 KiB
Python
269 lines
10 KiB
Python
#!/usr/bin/python
|
|
# -*- coding:utf-8 -*-
|
|
import sys
|
|
import os
|
|
picdir = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'pic/2in9')
|
|
fontdir = 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 icnt86
|
|
from TP_lib import epd2in9_V2
|
|
from TP_lib import weather_2in9_V2
|
|
|
|
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 irq running")
|
|
while flag_t == 1 :
|
|
if(tp.digital_read(tp.INT) == 0) :
|
|
ICNT_Dev.Touch = 1
|
|
else :
|
|
ICNT_Dev.Touch = 0
|
|
time.sleep(0.01)
|
|
print("thread irq: exit")
|
|
|
|
def Show_Photo_Small(image, small):
|
|
for t in range(1, 7):
|
|
if(small*3+t > 9):
|
|
newimage = Image.open(os.path.join(picdir, PhotoPath_S[0]))
|
|
image.paste(newimage, ((t-1)%3*98+2, (t-1)//3*48+2))
|
|
else:
|
|
newimage = Image.open(os.path.join(picdir, PhotoPath_S[small*3+t]))
|
|
image.paste(newimage, ((t-1)%3*98+2, (t-1)//3*48+2))
|
|
|
|
def Show_Photo_Large(image, large):
|
|
if(large > 9):
|
|
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))
|
|
|
|
def Draw_Time(image, x, y, font1, font2):
|
|
Time = time.strftime("%H : %M", time.localtime())
|
|
Date = time.strftime("%Y - %m - %d", time.localtime())
|
|
imagefill=255
|
|
if image.mode!="1":
|
|
imagefill = (255, 255, 255, 255)
|
|
image.text((x, y), Time, font = font1, fill = imagefill)
|
|
image.text((x-9, y+35), Date, font = font2, fill = imagefill)
|
|
|
|
|
|
try:
|
|
logging.info("epd2in9_V2 Touch Demo")
|
|
|
|
epd = epd2in9_V2.EPD_2IN9_V2()
|
|
|
|
|
|
|
|
tp = icnt86.INCT86()
|
|
|
|
ICNT_Dev = icnt86.ICNT_Development()
|
|
ICNT_Old = icnt86.ICNT_Development()
|
|
|
|
'''
|
|
Because the touch display requires a relatively fast refresh speed, the default
|
|
needs to use partial refresh, and four gray levels cannot be used in this mode.
|
|
Here, only four gray level picture refresh demonstration is used
|
|
'''
|
|
# epd.Init_4Gray()
|
|
# Himage = Image.open(os.path.join(picdir, '2in9_Scale.bmp'))
|
|
# epd.display_4Gray(epd.getbuffer_4Gray(Himage))
|
|
# time.sleep(2)
|
|
|
|
logging.info("init and Clear")
|
|
epd.init()
|
|
tp.ICNT_Init()
|
|
epd.Clear(0xFF)
|
|
|
|
t1 = threading.Thread(target = pthread_irq)
|
|
t1.setDaemon(True)
|
|
t1.start()
|
|
|
|
# Drawing on the image
|
|
font15 = ImageFont.truetype(os.path.join(fontdir, 'Font.ttc'), 15)
|
|
font24 = ImageFont.truetype(os.path.join(fontdir, 'Font.ttc'), 24)
|
|
|
|
image = Image.open(os.path.join(picdir, 'Menu.bmp'))
|
|
DrawImage = ImageDraw.Draw(image)
|
|
|
|
Draw_Time(DrawImage, 209, 40, font24, font15)
|
|
|
|
epd.display_Base(epd.getbuffer(image))
|
|
|
|
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", "Photo_1_7.bmp", "Photo_1_8.bmp",
|
|
"Photo_1_9.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", "Photo_2_7.bmp", "Photo_2_8.bmp",
|
|
"Photo_2_9.bmp",
|
|
]
|
|
PagePath = ["Menu.bmp", "screen_output.png", "Photo_1.bmp", "Photo_2.bmp"]
|
|
|
|
while(1):
|
|
if(i > 20 or ReFlag == 1):
|
|
if(Page == 0):
|
|
DrawImage.rectangle((209, 40, 290, 120), fill = 0)
|
|
Draw_Time(DrawImage, 209, 40, font24, font15)
|
|
# print("*** Time Refresh ***\r\n")
|
|
|
|
if(Page == 1):
|
|
weather_2in9_V2.get_weather_png()
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
|
|
epd.display_Partial_Wait(epd.getbuffer(image))
|
|
print("*** Touch Refresh ***\r\n")
|
|
i = 0
|
|
k = 0
|
|
j += 1
|
|
ReFlag = 0
|
|
elif(k>50000 and i>0 and Page == 1):
|
|
epd.display_Partial_Wait(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.display_Base(epd.getbuffer(image))
|
|
print("--- Self Refresh ---\r\n")
|
|
else:
|
|
k += 1
|
|
|
|
if(Page==0 and k>5000000):
|
|
ReFlag = 1
|
|
|
|
tp.ICNT_Scan(ICNT_Dev, ICNT_Old)
|
|
if(ICNT_Old.X[0] == ICNT_Dev.X[0] and ICNT_Old.Y[0] == ICNT_Dev.Y[0]):
|
|
continue
|
|
|
|
if(ICNT_Dev.TouchCount):
|
|
ICNT_Dev.TouchCount = 0
|
|
i += 1
|
|
if(Page == 0 and ReFlag == 0): #main menu
|
|
if(ICNT_Dev.X[0] > 119 and ICNT_Dev.X[0] < 152 and ICNT_Dev.Y[0] > 31 and ICNT_Dev.Y[0] < 96):
|
|
print("Photo ...\r\n")
|
|
Page = 2
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
Show_Photo_Small(image, Photo_S)
|
|
ReFlag = 1
|
|
elif(ICNT_Dev.X[0] > 39 and ICNT_Dev.X[0] < 80 and ICNT_Dev.Y[0] > 31 and ICNT_Dev.Y[0] < 96):
|
|
print("Weather ...\r\n")
|
|
Page = 1
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
ReFlag = 1
|
|
|
|
|
|
if(Page == 1 and ReFlag == 0): #weather
|
|
if(ICNT_Dev.X[0] > 136 and ICNT_Dev.X[0] < 159 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Home ...\r\n")
|
|
Page = 0
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
ReFlag = 1
|
|
elif(ICNT_Dev.X[0] > 5 and ICNT_Dev.X[0] < 27 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Refresh ...\r\n")
|
|
SelfFlag = 1
|
|
ReFlag = 1
|
|
|
|
|
|
if(Page == 2 and ReFlag == 0): #photo menu
|
|
if(ICNT_Dev.X[0] > 135 and ICNT_Dev.X[0] < 160 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Home ...\r\n")
|
|
Page = 0
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
ReFlag = 1
|
|
elif(ICNT_Dev.X[0] > 203 and ICNT_Dev.X[0] < 224 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Next page ...\r\n")
|
|
Photo_S += 1
|
|
if(Photo_S > 2): # 9 photos is a maximum of three pages
|
|
Photo_S=0
|
|
ReFlag = 2
|
|
elif(ICNT_Dev.X[0] > 71 and ICNT_Dev.X[0] < 92 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Last page ...\r\n")
|
|
if(Photo_S == 0):
|
|
print("Top page ...\r\n")
|
|
else:
|
|
Photo_S -= 1
|
|
ReFlag = 2
|
|
elif(ICNT_Dev.X[0] > 5 and ICNT_Dev.X[0] < 27 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Refresh ...\r\n")
|
|
SelfFlag = 1
|
|
ReFlag = 1
|
|
elif(ICNT_Dev.X[0] > 2 and ICNT_Dev.X[0] < 293 and ICNT_Dev.Y[0] > 2 and ICNT_Dev.Y[0] < 96 and ReFlag == 0):
|
|
print("Select photo ...\r\n")
|
|
Page = 3
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
Photo_L = ICNT_Dev.X[0]//96 + ICNT_Dev.Y[0]//48*3 + Photo_S*3 + 1
|
|
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(ICNT_Dev.X[0] > 268 and ICNT_Dev.X[0] < 289 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Photo menu ...\r\n")
|
|
Page = 2
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
Show_Photo_Small(image, Photo_S)
|
|
ReFlag = 1
|
|
elif(ICNT_Dev.X[0] > 203 and ICNT_Dev.X[0] < 224 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Next photo ...\r\n")
|
|
Photo_L += 1
|
|
if(Photo_L > 9):
|
|
Photo_L = 1
|
|
ReFlag = 2
|
|
elif(ICNT_Dev.X[0] > 135 and ICNT_Dev.X[0] < 160 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Home ...\r\n")
|
|
Page = 0
|
|
Read_BMP(PagePath[Page], 0, 0)
|
|
ReFlag = 1
|
|
elif(ICNT_Dev.X[0] > 71 and ICNT_Dev.X[0] < 92 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
print("Last page ...\r\n")
|
|
if(Photo_L == 1):
|
|
print("Top photo ...\r\n")
|
|
else:
|
|
Photo_L -= 1
|
|
ReFlag = 2
|
|
elif(ICNT_Dev.X[0] > 5 and ICNT_Dev.X[0] < 27 and ICNT_Dev.Y[0] > 101 and ICNT_Dev.Y[0] < 124):
|
|
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)
|
|
t1.join()
|
|
epd.Dev_exit()
|
|
exit()
|