![IMG_9970-min](https://user-images.githubusercontent.com/53027898/62656223-50afb180-b929-11e9-814d-a37d74d6d92d.JPG)
![IMG_9971-min](https://user-images.githubusercontent.com/53027898/62656224-50afb180-b929-11e9-8344-133c4c1cd33f.JPG)
![IMG_9972-min](https://user-images.githubusercontent.com/53027898/62656225-51484800-b929-11e9-8266-209afd77f12d.JPG)
![IMG_9973-min](https://user-images.githubusercontent.com/53027898/62656226-51484800-b929-11e9-8120-5be9f42610bd.JPG)
![Screen Shot 2019-08-07 at 2 57 24 PM](https://user-images.githubusercontent.com/53027898/62656230-51e0de80-b929-11e9-840d-0cc5a4f13609.png)
#Hi, I am trying to display a bmp file with 2.13" diagonal e-Ink display by using Metro M4 express boot. When I try the basic code (from CircuitPython website) below, it seems like working well, it follows the code to the end and prints every command they I put in the code on the pc screen. But nothing changes on e-Ink display device.Do you have an idea about how I can make it work?
output:
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
Creating display
File opened
Size: 66200
Image offset: 54
Header size: 40
Width: 212
Height: 104
Bit depth: 24
Image OK! Drawing...
Finished drawing
done
code:
import digitalio
import busio
import board
from adafruit_epd.epd import Adafruit_EPD
from adafruit_epd.il0373 import Adafruit_IL0373
spi = busio.SPI(board.SCK, MOSI=board.MOSI, MISO=board.MISO)
ecs = digitalio.DigitalInOut(board.D9)
dc = digitalio.DigitalInOut(board.D10)
srcs = None
rst = None
busy = None
print("Creating display")
display = Adafruit_IL0373(104, 212, spi, # 2.13" Tri-color display
cs_pin=ecs, dc_pin=dc, sramcs_pin=srcs,
rst_pin=rst, busy_pin=busy)
display.rotation = 3
FILENAME = "blinka.bmp"
def read_le(s):
# as of this writting, int.from_bytes does not have LE support, DIY!
result = 0
shift = 0
for byte in bytearray(s):
result += byte << shift
shift += 8
return result
class BMPError(Exception):
pass
def display_bitmap(epd, filename):
try:
f = open("/" + filename, "rb")
except OSError:
print("Couldn't open file")
return
print("File opened")
try:
if f.read(2) != b'BM': # check signature
raise BMPError("Not BitMap file")
bmpFileSize = read_le(f.read(4))
f.read(4) # Read & ignore creator bytes
bmpImageoffset = read_le(f.read(4)) # Start of image data
headerSize = read_le(f.read(4))
bmpWidth = read_le(f.read(4))
bmpHeight = read_le(f.read(4))
flip = True
print("Size: %d\nImage offset: %d\nHeader size: %d" %
(bmpFileSize, bmpImageoffset, headerSize))
print("Width: %d\nHeight: %d" % (bmpWidth, bmpHeight))
if read_le(f.read(2)) != 1:
raise BMPError("Not singleplane")
bmpDepth = read_le(f.read(2)) # bits per pixel
print("Bit depth: %d" % (bmpDepth))
if bmpDepth != 24:
raise BMPError("Not 24-bit")
if read_le(f.read(2)) != 0:
raise BMPError("Compressed file")
print("Image OK! Drawing...")
rowSize = (bmpWidth * 3 + 3) & ~3 # 32-bit line boundary
for row in range(bmpHeight): # For each scanline...
if flip: # Bitmap is stored bottom-to-top order (normal BMP)
pos = bmpImageoffset + (bmpHeight - 1 - row) * rowSize
else: # Bitmap is stored top-to-bottom
pos = bmpImageoffset + row * rowSize
f.seek(pos)
rowdata = f.read(3*bmpWidth)
for col in range(bmpWidth):
b, g, r = rowdata[3*col:3*col+3] # BMP files store RGB in BGR
if r < 0x80 and g < 0x80 and b < 0x80:
epd.pixel(col, row, Adafruit_EPD.BLACK)
elif r >= 0x80 and g >= 0x80 and b >= 0x80:
pass # epd.pixel(row, col, Adafruit_EPD.WHITE)
elif r >= 0x80:
epd.pixel(col, row, Adafruit_EPD.RED)
except OSError:
print("Couldn't read file")
except BMPError as e:
print("Failed to parse BMP: " + e.args[0])
finally:
f.close()
print("Finished drawing")
display.fill(Adafruit_EPD.WHITE)
display_bitmap(display, FILENAME)
display.display()
print ("done")