-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathEpaper.py
80 lines (68 loc) · 2.03 KB
/
Epaper.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import time
import spidev
import RPi.GPIO as GPIO
class Epaper:
def __init__(self, x, y, max_speed_hz=500000):
self.x = x
self.y = y
self.RESET_PIN = 17
self.DC_PIN = 25
self.BUSY_PIN = 24
self.spi = spidev.SpiDev()
self.spi.open(0, 0)
self.spi.max_speed_hz = max_speed_hz
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(self.RESET_PIN, GPIO.OUT)
GPIO.setup(self.DC_PIN, GPIO.OUT)
GPIO.setup(self.BUSY_PIN, GPIO.IN)
time.sleep(0.1)
GPIO.output(self.RESET_PIN, GPIO.LOW)
time.sleep(0.1)
GPIO.output(self.RESET_PIN, GPIO.HIGH)
time.sleep(0.1)
self.wait()
self.command(0x12)
self.wait()
def wait(self):
while True:
if GPIO.input(self.BUSY_PIN) == GPIO.LOW:
break
else:
time.sleep(0.1)
def command(self, cmd):
GPIO.output(self.DC_PIN, GPIO.LOW)
self.spi.xfer([cmd])
def data(self, data):
GPIO.output(self.DC_PIN, GPIO.HIGH)
self.spi.xfer([data])
def update(self):
self.command(0x20)
self.wait()
self.command(0x10)
self.data(0x01)
time.sleep(0.1)
def flash_red(self, on=True, buf=None):
self.wait()
self.command(0x26)
if buf is None:
for i in range(int((self.x * self.y) / 8)):
if on:
self.data(0xFF)
else:
self.data(0x00)
else:
for i in range(int((self.x * self.y) / 8)):
self.data(buf[i])
def flash_black(self, on=True, buf=None):
self.wait()
self.command(0x24)
if buf is None:
for i in range(int((self.x * self.y) / 8)):
if on:
self.data(0x00)
else:
self.data(0xFF)
else:
for i in range(int((self.x * self.y) / 8)):
self.data(buf[i])