-
Notifications
You must be signed in to change notification settings - Fork 48
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Python landscape display on 2.13 - Would you like a PR? #12
Comments
Why not? Please submit your PR and be happy to accept. |
Cool! Could you share the repo? |
This is my implementation, I'll try to get around to a PR when I can. Note the original code may have changed since I made this, but you should be able to try and get the diff of this vs the real one to see what I changed. class EPD_2in13_Landscape(framebuf.FrameBuffer):
def __init__(self):
self.reset_pin = Pin(RST_PIN, Pin.OUT)
self.busy_pin = Pin(BUSY_PIN, Pin.IN, Pin.PULL_UP)
self.cs_pin = Pin(CS_PIN, Pin.OUT)
self.width = EPD_WIDTH
self.height = EPD_HEIGHT
self.full_lut = lut_full_update
self.partial_lut = lut_partial_update
self.full_update = FULL_UPDATE
self.part_update = PART_UPDATE
self.spi = SPI(1)
self.spi.init(baudrate=4000_000)
self.dc_pin = Pin(DC_PIN, Pin.OUT)
self.buffer = bytearray(self.height * self.width // 8)
super().__init__(self.buffer, self.height, self.width, framebuf.MONO_VLSB)
self.init(FULL_UPDATE)
def digital_write(self, pin, value):
pin.value(value)
def digital_read(self, pin):
return pin.value()
def delay_ms(self, delaytime):
utime.sleep(delaytime / 1000.0)
def spi_writebyte(self, data):
self.spi.write(bytearray(data))
def module_exit(self):
self.digital_write(self.reset_pin, 0)
# Hardware reset
def reset(self):
self.digital_write(self.reset_pin, 1)
self.delay_ms(50)
self.digital_write(self.reset_pin, 0)
self.delay_ms(2)
self.digital_write(self.reset_pin, 1)
self.delay_ms(50)
def send_command(self, command):
self.digital_write(self.dc_pin, 0)
self.digital_write(self.cs_pin, 0)
self.spi_writebyte([command])
self.digital_write(self.cs_pin, 1)
def send_data(self, data):
self.digital_write(self.dc_pin, 1)
self.digital_write(self.cs_pin, 0)
self.spi_writebyte([data])
self.digital_write(self.cs_pin, 1)
def ReadBusy(self):
##print('busy')
while self.digital_read(self.busy_pin) == 1: # 0: idle, 1: busy
self.delay_ms(10)
##print('busy release')
def TurnOnDisplay(self):
self.send_command(0x22)
self.send_data(0xC7)
self.send_command(0x20)
self.ReadBusy()
def TurnOnDisplayPart(self):
self.send_command(0x22)
self.send_data(0x0C)
self.send_command(0x20)
self.ReadBusy()
def init(self, update):
# print('init')
self.reset()
if update == self.full_update:
self.ReadBusy()
self.send_command(0x12) # soft reset
self.ReadBusy()
self.send_command(0x74) # set analog block control
self.send_data(0x54)
self.send_command(0x7E) # set digital block control
self.send_data(0x3B)
self.send_command(0x01) # Driver output control
self.send_data(0x27)
self.send_data(0x01)
self.send_data(0x01)
self.send_command(0x11) # data entry mode
self.send_data(0x05)
self.send_command(0x44) # set Ram-X address start/end position
self.send_data(0x00)
self.send_data(0x0F) # 0x0C-->(15+1)*8=128
self.send_command(0x45) # set Ram-Y address start/end position
self.send_data(0x27) # 0xF9-->(249+1)=250
self.send_data(0x01)
self.send_data(0x2E)
self.send_data(0x00)
self.send_command(0x3C) # BorderWavefrom
self.send_data(0x03)
self.send_command(0x2C) # VCOM Voltage
self.send_data(0x55) #
self.send_command(0x03)
self.send_data(self.full_lut[70])
self.send_command(0x04) #
self.send_data(self.full_lut[71])
self.send_data(self.full_lut[72])
self.send_data(self.full_lut[73])
self.send_command(0x3A) # Dummy Line
self.send_data(self.full_lut[74])
self.send_command(0x3B) # Gate time
self.send_data(self.full_lut[75])
self.send_command(0x32)
for count in range(70):
self.send_data(self.full_lut[count])
self.send_command(0x4E) # set RAM x address count to 0
self.send_data(0x00)
self.send_command(0x4F) # set RAM y address count to 0X127
self.send_data(0x0)
self.send_data(0x00)
self.ReadBusy()
else:
self.send_command(0x2C) # VCOM Voltage
self.send_data(0x26)
self.ReadBusy()
self.send_command(0x32)
for count in range(70):
self.send_data(self.partial_lut[count])
self.send_command(0x37)
self.send_data(0x00)
self.send_data(0x00)
self.send_data(0x00)
self.send_data(0x00)
self.send_data(0x40)
self.send_data(0x00)
self.send_data(0x00)
self.send_command(0x22)
self.send_data(0xC0)
self.send_command(0x20)
self.ReadBusy()
self.send_command(0x3C) # BorderWavefrom
self.send_data(0x01)
return 0
def display(self, image):
self.send_command(0x24)
for j in range(int(self.width / 8) - 1, -1, -1):
for i in range(0, self.height):
self.send_data(image[i + j * self.height])
self.TurnOnDisplay()
def displayPartial(self, image):
self.send_command(0x24)
for j in range(int(self.width / 8) - 1, -1, -1):
for i in range(0, self.height):
self.send_data(image[i + j * self.height])
self.send_command(0x26)
for j in range(int(self.width / 8) - 1, -1, -1):
for i in range(0, self.height):
self.send_data(~image[i + j * self.height])
self.TurnOnDisplayPart()
def displayPartBaseImage(self, image):
self.send_command(0x24)
for j in range(int(self.width / 8) - 1, -1, -1):
for i in range(0, self.height):
self.send_data(image[i + j * self.height])
self.send_command(0x26)
for j in range(int(self.width / 8) - 1, -1, -1):
for i in range(0, self.height):
self.send_data(image[i + j * self.height])
self.TurnOnDisplay()
def Clear(self, color):
self.send_command(0x24)
for j in range(int(self.width / 8) - 1, -1, -1):
for i in range(0, self.height):
self.send_data(color)
self.send_command(0x26)
for j in range(int(self.width / 8) - 1, -1, -1):
for i in range(0, self.height):
self.send_data(color)
self.TurnOnDisplay()
def sleep(self):
self.send_command(0x10) # enter deep sleep
self.send_data(0x03)
self.delay_ms(2000)
self.module_exit() |
I have a working Landscape driver for the 2.13 B V4. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
In Pico_ePaper-2.9.py there's a class for Portrait and a class for Landscape display.
Using this, I have adapted Pico_ePaper-2.13.py example to work in landscape. I'm happy to submit this change as a PR if you're interested - let me know!
The text was updated successfully, but these errors were encountered: