From 5f49ab2847315cd8b1dd505d6154ad8cde53907f Mon Sep 17 00:00:00 2001 From: Matt Vogel Date: Sat, 8 Jan 2022 20:18:22 -0500 Subject: [PATCH 1/3] Significantly increase speed of displaying images (for 7in5b_V2) same a #104 but for 7in5b_v2 (also applies to v3) --- .../python/lib/waveshare_epd/epd7in5b_V2.py | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py b/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py index bdbd7c5..bc21215 100644 --- a/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py +++ b/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py @@ -4,8 +4,8 @@ # * | Function : Electronic paper driver # * | Info : # *---------------- -# * | This version: V4.1 -# * | Date : 2020-11-30 +# * | This version: V4.2 +# * | Date : 2022-01-08 # # | Info : python demo # ----------------------------------------------------------------------------- # Permission is hereby granted, free of charge, to any person obtaining a copy @@ -66,7 +66,13 @@ class EPD: epdconfig.digital_write(self.cs_pin, 0) epdconfig.spi_writebyte([data]) epdconfig.digital_write(self.cs_pin, 1) - + + def send_data2(self, data): #faster + 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): logger.debug("e-Paper busy") self.send_command(0x71) @@ -127,50 +133,44 @@ class EPD: return 0 def getbuffer(self, image): - # logger.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() - logger.debug('imwidth = %d imheight = %d ',imwidth, imheight) + img = image + imwidth, imheight = img.size if(imwidth == self.width and imheight == self.height): - logger.debug("Horizontal") - 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): - logger.debug("Vertical") - 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, imageblack, imagered): self.send_command(0x10) - for i in range(0, int(self.width * self.height / 8)): - self.send_data(imageblack[i]); + self.send_data2(imageblack) self.send_command(0x13) - for i in range(0, int(self.width * self.height / 8)): - self.send_data(~imagered[i]); + self.send_data2(imagered) #this may need to be ~ inverted self.send_command(0x12) epdconfig.delay_ms(100) self.ReadBusy() def Clear(self): + buf = [0x00] * (int(self.width/8) * self.height) + buf2 = [0xff] * (int(self.width/8) * self.height) self.send_command(0x10) - for i in range(0, int(self.width * self.height / 8)): - self.send_data(0xff) + self.send_data2(buf2) 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) From cd6b264fb6282054af410b24b1529c09cb0ab427 Mon Sep 17 00:00:00 2001 From: Matt Vogel Date: Sat, 8 Jan 2022 20:45:40 -0500 Subject: [PATCH 2/3] invert black --- RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py b/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py index bc21215..0e5c08f 100644 --- a/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py +++ b/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py @@ -154,7 +154,7 @@ class EPD: def display(self, imageblack, imagered): self.send_command(0x10) - self.send_data2(imageblack) + self.send_data2(~imageblack) self.send_command(0x13) self.send_data2(imagered) #this may need to be ~ inverted From 631ddb7663ea55b1459da05b69b8a133c179fd3f Mon Sep 17 00:00:00 2001 From: Matt Vogel Date: Sat, 8 Jan 2022 21:50:37 -0500 Subject: [PATCH 3/3] invert black buffer --- .../python/lib/waveshare_epd/epd7in5b_V2.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py b/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py index 0e5c08f..df09ae3 100644 --- a/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py +++ b/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epd7in5b_V2.py @@ -154,10 +154,13 @@ class EPD: def display(self, imageblack, imagered): self.send_command(0x10) - self.send_data2(~imageblack) - + # The black bytes need to be inverted back from what getbuffer did + for i in range(len(imageblack)): + imageblack[i] ^= 0xFF + self.send_data2(imageblack) + self.send_command(0x13) - self.send_data2(imagered) #this may need to be ~ inverted + self.send_data2(imagered) self.send_command(0x12) epdconfig.delay_ms(100)