Merge pull request #3 from Oliv4945/master

Update 4in2 screen to µPython 1.9 & add example
master
Mike Causer 2018-06-07 19:13:46 +10:00 zatwierdzone przez GitHub
commit ded2baa3c7
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
4 zmienionych plików z 144 dodań i 8 usunięć

Wyświetl plik

@ -96,18 +96,18 @@ class EPD:
LUT_WB = LUT_BB
def _command(self, command, data=None):
self.dc.low()
self.cs.low()
self.dc.value(0)
self.cs.value(0)
self.spi.write(bytearray([command]))
self.cs.high()
self.cs.value(1)
if data is not None:
self._data(data)
def _data(self, data):
self.dc.high()
self.cs.low()
self.dc.value(1)
self.cs.value(0)
self.spi.write(data)
self.cs.high()
self.cs.value(1)
def init(self):
self.reset()
@ -123,9 +123,9 @@ class EPD:
sleep_ms(100)
def reset(self):
self.rst.low()
self.rst.value(0)
sleep_ms(200)
self.rst.high()
self.rst.value(1)
sleep_ms(200)
def set_lut(self):

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Wyświetl plik

@ -0,0 +1,130 @@
"""
Example for 4.2 inch black & white Waveshare E-ink screen
Run on ESP32
"""
import epaper4in2
from machine import Pin, SPI
# SPIV on ESP32
sck = Pin(18)
miso = Pin(19)
mosi = Pin(23)
dc = Pin(32)
cs = Pin(33)
rst = Pin(19)
busy = Pin(35)
spi = SPI(2, baudrate=20000000, polarity=0, phase=0, sck=sck, miso=miso, mosi=mosi)
e = epaper4in2.EPD(spi, cs, dc, rst, busy)
e.init()
w = 400
h = 300
x = 0
y = 0
# --------------------
# use a frame buffer
# 400 * 300 / 8 = 15000 - thats a lot of pixels
import framebuf
buf = bytearray(w * h // 8)
fb = framebuf.FrameBuffer(buf, w, h, framebuf.MONO_HLSB)
black = 0
white = 1
fb.fill(white)
# --------------------
# write hello world with black bg and white text
from image_dark import hello_world_dark
from image_light import hello_world_light
print('Image dark')
bufImage = hello_world_dark
fbImage = framebuf.FrameBuffer(bufImage, 128, 296, framebuf.MONO_HLSB)
fb.blit(fbImage, 20, 2)
bufImage = hello_world_light
fbImage = framebuf.FrameBuffer(bufImage, 128, 296, framebuf.MONO_HLSB)
fb.blit(fbImage, 168, 2)
e.display_frame(buf)
# --------------------
# write hello world with white bg and black text
print('Image light')
#e.display_frame(hello_world_light)
# --------------------
print('Frame buffer things')
fb.fill(white)
fb.text('Hello World',30,0,black)
fb.pixel(30, 10, black)
fb.hline(30, 30, 10, black)
fb.vline(30, 50, 10, black)
fb.line(30, 70, 40, 80, black)
fb.rect(30, 90, 10, 10, black)
fb.fill_rect(30, 110, 10, 10, black)
for row in range(0,36):
fb.text(str(row),0,row*8,black)
fb.text('Line 36',0,288,black)
e.display_frame(buf)
# --------------------
# wrap text inside a box
black = 0
white = 1
# clear
fb.fill(white)
# display as much as this as fits in the box
str = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam vel neque in elit tristique vulputate at et dui. Maecenas nec felis lectus. Pellentesque sit amet facilisis dui. Maecenas ac arcu euismod, tempor massa quis, ultricies est.'
# this could be useful as a new method in FrameBuffer
def text_wrap(str,x,y,color,w,h,border=None):
# optional box border
if border is not None:
fb.rect(x, y, w, h, border)
cols = w // 8
# for each row
j = 0
for i in range(0, len(str), cols):
# draw as many chars fit on the line
fb.text(str[i:i+cols], x, y + j, color)
j += 8
# dont overflow text outside the box
if j >= h:
break
# clear
fb.fill(white)
# draw text box 1
# box position and dimensions
print('Box 1')
bx = 8
by = 8
bw = 112 # = 14 cols
bh = 112 # = 14 rows (196 chars in total)
text_wrap(str,bx,by,black,bw,bh,black)
e.display_frame(buf)
# draw text box 2
print('Box 2 & 3')
bx = 0
by = 128
bw = w # 128 = 16 cols
bh = 6 * 8 # 48 = 6 rows (96 chars in total)
text_wrap(str,bx,by,black,bw,bh,black)
# draw text box 3
bx = 0
by = 184
bw = w//2 # 64 = 8 cols
bh = 8 * 8 # 64 = 8 rows (64 chars in total)
text_wrap(str,bx,by,black,bw,bh,None)
e.display_frame(buf)
# --------------------