make optimizations in case we dont have to toggle CS pin on each write.
also add examples for u2if versions of feather epd
This commit is contained in:
parent
a410e4dc11
commit
c225150234
3 changed files with 155 additions and 15 deletions
|
|
@ -107,8 +107,7 @@ class Adafruit_EPD: # pylint: disable=too-many-instance-attributes, too-many-pu
|
|||
databyte = self._spi_transfer(databyte)
|
||||
self.sram.cs_pin.value = True
|
||||
else:
|
||||
for databyte in self._buffer1:
|
||||
self._spi_transfer(databyte)
|
||||
self._spi_transfer(self._buffer1)
|
||||
|
||||
self._cs.value = True
|
||||
self.spi_device.unlock()
|
||||
|
|
@ -140,8 +139,7 @@ class Adafruit_EPD: # pylint: disable=too-many-instance-attributes, too-many-pu
|
|||
databyte = self._spi_transfer(databyte)
|
||||
self.sram.cs_pin.value = True
|
||||
else:
|
||||
for databyte in self._buffer2:
|
||||
self._spi_transfer(databyte)
|
||||
self._spi_transfer(self._buffer2)
|
||||
|
||||
self._cs.value = True
|
||||
self.spi_device.unlock()
|
||||
|
|
@ -171,23 +169,39 @@ class Adafruit_EPD: # pylint: disable=too-many-instance-attributes, too-many-pu
|
|||
|
||||
if data is not None:
|
||||
self._dc.value = True
|
||||
for b in data:
|
||||
self._spi_transfer(b)
|
||||
self._spi_transfer(data)
|
||||
if end:
|
||||
self._cs.value = True
|
||||
self.spi_device.unlock()
|
||||
|
||||
return ret
|
||||
|
||||
def _spi_transfer(self, databyte):
|
||||
"""Transfer one byte, toggling the cs pin if required by the EPD chipset"""
|
||||
self._spibuf[0] = databyte
|
||||
if self._single_byte_tx:
|
||||
self._cs.value = False
|
||||
self.spi_device.write_readinto(self._spibuf, self._spibuf)
|
||||
if self._single_byte_tx:
|
||||
self._cs.value = True
|
||||
return self._spibuf[0]
|
||||
def _spi_transfer(self, data):
|
||||
"""Transfer one byte or bytearray, toggling the cs pin if required by the EPD chipset"""
|
||||
if isinstance(data, int): # single byte!
|
||||
self._spibuf[0] = data
|
||||
|
||||
# easy & fast case: array and no twiddling
|
||||
if not self._single_byte_tx and isinstance(data, bytearray):
|
||||
self.spi_device.write(data)
|
||||
return None
|
||||
|
||||
# if its a single byte
|
||||
if isinstance(data, int): # single byte!
|
||||
if self._single_byte_tx:
|
||||
self._cs.value = False
|
||||
try:
|
||||
self.spi_device.write_readinto(self._spibuf, self._spibuf)
|
||||
except NotImplementedError:
|
||||
self.spi_device.write(self._spibuf)
|
||||
if self._single_byte_tx:
|
||||
self._cs.value = True
|
||||
return self._spibuf[0]
|
||||
|
||||
if isinstance(data, bytearray):
|
||||
for x in data:
|
||||
self._spi_transfer(x)
|
||||
return None
|
||||
|
||||
def power_up(self):
|
||||
"""Power up the display in preparation for writing RAM and updating.
|
||||
|
|
|
|||
33
examples/feather_epd_blinka.py
Normal file
33
examples/feather_epd_blinka.py
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
import digitalio
|
||||
import busio
|
||||
import board
|
||||
from adafruit_epd.epd import Adafruit_EPD
|
||||
import time
|
||||
|
||||
# create the spi device and pins we will need
|
||||
spi = busio.SPI(board.EPD_SCK, MOSI=board.EPD_MOSI, MISO=None)
|
||||
epd_cs = digitalio.DigitalInOut(board.EPD_CS)
|
||||
epd_dc = digitalio.DigitalInOut(board.EPD_DC)
|
||||
epd_reset = digitalio.DigitalInOut(board.EPD_RESET)
|
||||
epd_busy = digitalio.DigitalInOut(board.EPD_BUSY)
|
||||
srcs = None
|
||||
|
||||
from adafruit_epd.ssd1680 import Adafruit_SSD1680
|
||||
display = Adafruit_SSD1680(122, 250, spi, cs_pin=epd_cs, dc_pin=epd_dc,
|
||||
sramcs_pin=srcs, rst_pin=epd_reset,
|
||||
busy_pin=epd_busy)
|
||||
|
||||
display.rotation = 3
|
||||
display.fill(Adafruit_EPD.WHITE)
|
||||
|
||||
display.fill_rect(20, 20, 50, 60, Adafruit_EPD.BLACK)
|
||||
display.hline(80, 30, 60, Adafruit_EPD.BLACK)
|
||||
display.vline(80, 30, 60, Adafruit_EPD.BLACK)
|
||||
|
||||
# draw repeatedly with pauses
|
||||
while True:
|
||||
display.display()
|
||||
time.sleep(15)
|
||||
93
examples/feather_epd_blinka_pillow.py
Normal file
93
examples/feather_epd_blinka_pillow.py
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
# SPDX-FileCopyrightText: 2021 ladyada for Adafruit Industries
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
import digitalio
|
||||
import busio
|
||||
import board
|
||||
from adafruit_epd.epd import Adafruit_EPD
|
||||
import time
|
||||
|
||||
from PIL import Image
|
||||
from PIL import ImageDraw
|
||||
from PIL import ImageFont
|
||||
|
||||
# create the spi device and pins we will need
|
||||
spi = busio.SPI(board.EPD_SCK, MOSI=board.EPD_MOSI, MISO=None)
|
||||
epd_cs = digitalio.DigitalInOut(board.EPD_CS)
|
||||
epd_dc = digitalio.DigitalInOut(board.EPD_DC)
|
||||
epd_reset = digitalio.DigitalInOut(board.EPD_RESET)
|
||||
epd_busy = digitalio.DigitalInOut(board.EPD_BUSY)
|
||||
srcs = None
|
||||
|
||||
from adafruit_epd.ssd1680 import Adafruit_SSD1680
|
||||
display = Adafruit_SSD1680(122, 250, spi, cs_pin=epd_cs, dc_pin=epd_dc,
|
||||
sramcs_pin=srcs, rst_pin=epd_reset,
|
||||
busy_pin=epd_busy)
|
||||
|
||||
display.rotation = 3
|
||||
# Create blank image for drawing.
|
||||
# Make sure to create image with mode '1' for 1-bit color.
|
||||
width = display.width
|
||||
height = display.height
|
||||
image = Image.new("RGB", (width, height))
|
||||
|
||||
WHITE = (0xFF, 0xFF, 0xFF)
|
||||
BLACK = (0x00, 0x00, 0x00)
|
||||
|
||||
# clear the display
|
||||
display.fill(Adafruit_EPD.WHITE)
|
||||
|
||||
# Get drawing object to draw on image.
|
||||
draw = ImageDraw.Draw(image)
|
||||
# empty it
|
||||
draw.rectangle((0, 0, width, height), fill=WHITE)
|
||||
|
||||
# Draw an outline box
|
||||
draw.rectangle((1, 1, width - 2, height - 2), outline=BLACK, fill=WHITE)
|
||||
# Draw some shapes.
|
||||
# First define some constants to allow easy resizing of shapes.
|
||||
padding = 5
|
||||
shape_width = 30
|
||||
top = padding
|
||||
bottom = height - padding
|
||||
# Move left to right keeping track of the current x position for drawing shapes.
|
||||
x = padding
|
||||
# Draw an ellipse.
|
||||
draw.ellipse((x, top, x + shape_width, bottom), outline=BLACK, fill=WHITE)
|
||||
x += shape_width + padding
|
||||
# Draw a rectangle.
|
||||
draw.rectangle((x, top, x + shape_width, bottom), outline=WHITE, fill=BLACK)
|
||||
x += shape_width + padding
|
||||
# Draw a triangle.
|
||||
draw.polygon(
|
||||
[(x, bottom), (x + shape_width / 2, top), (x + shape_width, bottom)],
|
||||
outline=BLACK,
|
||||
fill=WHITE,
|
||||
)
|
||||
x += shape_width + padding
|
||||
# Draw an X.
|
||||
draw.line((x, bottom, x + shape_width, top), fill=BLACK)
|
||||
draw.line((x, top, x + shape_width, bottom), fill=BLACK)
|
||||
x += shape_width + padding
|
||||
|
||||
# Load default font.
|
||||
font = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 20)
|
||||
|
||||
# Alternatively load a TTF font. Make sure the .ttf font
|
||||
# file is in the same directory as the python script!
|
||||
# Some other nice fonts to try: http://www.dafont.com/bitmap.php
|
||||
# font = ImageFont.truetype('Minecraftia.ttf', 8)
|
||||
|
||||
# Write two lines of text.
|
||||
draw.text((x, top), "Hello", font=font, fill=BLACK)
|
||||
draw.text((x, top + 20), "World!", font=font, fill=BLACK)
|
||||
|
||||
display.image(image)
|
||||
display.display()
|
||||
|
||||
time.sleep(10)
|
||||
|
||||
blinkaimage = Image.open('examples/epd_bonnet_blinka_250x122.bmp')
|
||||
display.image(blinkaimage)
|
||||
display.display()
|
||||
|
||||
Loading…
Reference in a new issue