diff --git a/inkycal/display/drivers/epd_7_in_5_v2.py b/inkycal/display/drivers/epd_7_in_5_v2.py index 97c6f0e..92929b8 100644 --- a/inkycal/display/drivers/epd_7_in_5_v2.py +++ b/inkycal/display/drivers/epd_7_in_5_v2.py @@ -35,6 +35,8 @@ from inkycal.display.drivers import epdconfig EPD_WIDTH = 800 EPD_HEIGHT = 480 +logger = logging.getLogger(__name__) + class EPD: def __init__(self): @@ -48,11 +50,11 @@ class EPD: # Hardware reset def reset(self): epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) + epdconfig.delay_ms(20) epdconfig.digital_write(self.reset_pin, 0) epdconfig.delay_ms(2) epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) + epdconfig.delay_ms(20) def send_command(self, command): epdconfig.digital_write(self.dc_pin, 0) @@ -66,14 +68,21 @@ class EPD: epdconfig.spi_writebyte([data]) epdconfig.digital_write(self.cs_pin, 1) + def send_data2(self, data): + epdconfig.digital_write(self.dc_pin, 1) + epdconfig.digital_write(self.cs_pin, 0) + epdconfig.SPI.writebytes2(data) + epdconfig.digital_write(self.cs_pin, 1) + def ReadBusy(self): - logging.debug("e-Paper busy") + logger.debug("e-Paper busy") self.send_command(0x71) busy = epdconfig.digital_read(self.busy_pin) while (busy == 0): self.send_command(0x71) busy = epdconfig.digital_read(self.busy_pin) - epdconfig.delay_ms(200) + epdconfig.delay_ms(20) + logger.debug("e-Paper busy release") def init(self): if (epdconfig.module_init() != 0): @@ -81,6 +90,12 @@ class EPD: # EPD hardware init start self.reset() + self.send_command(0x06) # btst + self.send_data(0x17) + self.send_data(0x17) + self.send_data(0x28) # If an exception is displayed, try using 0x38 + self.send_data(0x17) + self.send_command(0x01) # POWER SETTING self.send_data(0x07) self.send_data(0x07) # VGH=20V,VGL=-20V @@ -114,47 +129,39 @@ class EPD: return 0 def getbuffer(self, image): - # logging.debug("bufsiz = ",int(self.width/8) * self.height) - buf = [0xFF] * (int(self.width / 8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - # logging.debug("imwidth = %d, imheight = %d",imwidth,imheight) + img = image + imwidth, imheight = img.size if (imwidth == self.width and imheight == self.height): - logging.debug("Vertical") - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[int((x + y * self.width) / 8)] &= ~(0x80 >> (x % 8)) + img = img.convert('1') elif (imwidth == self.height and imheight == self.width): - logging.debug("Horizontal") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[int((newx + newy * self.width) / 8)] &= ~(0x80 >> (y % 8)) + # image has correct dimensions, but needs to be rotated + img = img.rotate(90, expand=True).convert('1') + else: + logger.warning("Wrong image dimensions: must be " + str(self.width) + "x" + str(self.height)) + # return a blank buffer + return [0x00] * (int(self.width / 8) * self.height) + + buf = bytearray(img.tobytes('raw')) + # The bytes need to be inverted, because in the PIL world 0=black and 1=white, but + # in the e-paper world 0=white and 1=black. + for i in range(len(buf)): + buf[i] ^= 0xFF return buf def display(self, image): self.send_command(0x13) - for i in range(0, int(self.width * self.height / 8)): - self.send_data(~image[i]); + self.send_data2(image) self.send_command(0x12) epdconfig.delay_ms(100) self.ReadBusy() def Clear(self): + buf = [0x00] * (int(self.width / 8) * self.height) self.send_command(0x10) - for i in range(0, int(self.width * self.height / 8)): - self.send_data(0x00) - + self.send_data2(buf) self.send_command(0x13) - for i in range(0, int(self.width * self.height / 8)): - self.send_data(0x00) - + self.send_data2(buf) self.send_command(0x12) epdconfig.delay_ms(100) self.ReadBusy() @@ -166,5 +173,6 @@ class EPD: self.send_command(0x07) # DEEP_SLEEP self.send_data(0XA5) + epdconfig.delay_ms(2000) epdconfig.module_exit() -### END OF FILE ### +### END OF FILE ### \ No newline at end of file