From d0918826de5435654b5b79c152ec0833b78ac4a7 Mon Sep 17 00:00:00 2001 From: Ryan Finnie Date: Sat, 20 Jul 2019 22:56:45 +0000 Subject: [PATCH] Unify all Python trees for both RPi and Jetson Nano, Py2 and Py3 * Move lib files into waveshare_epd package * Use int() where integer division is needed * Use logging (debug level) in library files, so they can be used by a user script without print()s being output * Use logging (info level) in example files * Move Font.ttc file into pic directory * epdconfig.py: Detect RPi or Jetson Nano * Search for sysfs_software_spi.so in several places * Include both Jetson and RPi readme files * Include setup.py for package installation * Fix few small syntax errors preventing setuptools byte-compiling --- .gitignore | 5 + .../python2/examples/epd_1in54_test.py | 86 ----- .../python2/examples/epd_1in54b_test.py | 75 ---- .../python2/examples/epd_1in54c_test.py | 72 ---- .../python2/examples/epd_2in13_V2_test.py | 89 ----- .../python2/examples/epd_2in13_test.py | 87 ----- .../python2/examples/epd_2in13bc_test.py | 91 ----- Jetson Nano/python2/examples/epd_2in7_test.py | 81 ---- .../python2/examples/epd_2in9bc_test.py | 93 ----- .../python2/examples/epd_2in9d_test.py | 101 ----- Jetson Nano/python2/examples/epd_4in2_test.py | 84 ----- .../python2/examples/epd_4in2bc_test.py | 95 ----- Jetson Nano/python2/examples/epd_7in5_test.py | 84 ----- .../python2/examples/epd_7in5bc_test.py | 95 ----- Jetson Nano/python2/lib/epd1in54.py | 254 ------------- Jetson Nano/python2/lib/epd1in54.pyc | Bin 5136 -> 0 bytes Jetson Nano/python2/lib/epd1in54_V2.pyc | Bin 5294 -> 0 bytes Jetson Nano/python2/lib/epd1in54b.py | 218 ----------- Jetson Nano/python2/lib/epd1in54b.pyc | Bin 5943 -> 0 bytes Jetson Nano/python2/lib/epd1in54c.py | 152 -------- Jetson Nano/python2/lib/epd1in54c.pyc | Bin 3967 -> 0 bytes Jetson Nano/python2/lib/epd2in13.py | 224 ----------- Jetson Nano/python2/lib/epd2in13.pyc | Bin 5458 -> 0 bytes Jetson Nano/python2/lib/epd2in13_V2.pyc | Bin 7003 -> 0 bytes Jetson Nano/python2/lib/epd2in13bc.py | 158 -------- Jetson Nano/python2/lib/epd2in13bc.pyc | Bin 4050 -> 0 bytes Jetson Nano/python2/lib/epd2in13d.py | 357 ------------------ Jetson Nano/python2/lib/epd2in13d.pyc | Bin 8104 -> 0 bytes Jetson Nano/python2/lib/epd2in7.py | 258 ------------- Jetson Nano/python2/lib/epd2in7.pyc | Bin 5820 -> 0 bytes Jetson Nano/python2/lib/epd2in7b.py | 266 ------------- Jetson Nano/python2/lib/epd2in7b.pyc | Bin 5849 -> 0 bytes Jetson Nano/python2/lib/epd2in9.py | 200 ---------- Jetson Nano/python2/lib/epd2in9.pyc | Bin 5394 -> 0 bytes Jetson Nano/python2/lib/epd2in9bc.py | 154 -------- Jetson Nano/python2/lib/epd2in9bc.pyc | Bin 3984 -> 0 bytes Jetson Nano/python2/lib/epd2in9d.py | 350 ----------------- Jetson Nano/python2/lib/epd2in9d.pyc | Bin 8088 -> 0 bytes Jetson Nano/python2/lib/epd4in2.py | 240 ------------ Jetson Nano/python2/lib/epd4in2.pyc | Bin 5522 -> 0 bytes Jetson Nano/python2/lib/epd4in2bc.py | 147 -------- Jetson Nano/python2/lib/epd4in2bc.pyc | Bin 3822 -> 0 bytes Jetson Nano/python2/lib/epd5in83.py | 199 ---------- Jetson Nano/python2/lib/epd5in83.pyc | Bin 4758 -> 0 bytes Jetson Nano/python2/lib/epd5in83bc.py | 199 ---------- Jetson Nano/python2/lib/epd5in83bc.pyc | Bin 4558 -> 0 bytes Jetson Nano/python2/lib/epd7in5.py | 200 ---------- Jetson Nano/python2/lib/epd7in5.pyc | Bin 4729 -> 0 bytes Jetson Nano/python2/lib/epd7in5bc.py | 200 ---------- Jetson Nano/python2/lib/epd7in5bc.pyc | Bin 4443 -> 0 bytes Jetson Nano/python2/lib/epdconfig.py | 97 ----- Jetson Nano/python2/lib/epdconfig.pyc | Bin 1793 -> 0 bytes Jetson Nano/python2/readme_CN.txt | 52 --- Jetson Nano/python2/readme_EN.txt | 56 --- .../python3/examples/epd_1in54_V2_test.py | 87 ----- .../python3/examples/epd_1in54_test.py | 87 ----- .../python3/examples/epd_1in54c_test.py | 72 ---- .../python3/examples/epd_2in13d_test.py | 83 ---- .../python3/examples/epd_2in7b_test.py | 98 ----- Jetson Nano/python3/examples/epd_2in9_test.py | 102 ----- .../python3/examples/epd_2in9d_test.py | 101 ----- Jetson Nano/python3/examples/epd_4in2_test.py | 84 ----- .../python3/examples/epd_4in2bc_test.py | 95 ----- .../python3/examples/epd_5in83_test.py | 84 ----- .../python3/examples/epd_5in83bc_test.py | 93 ----- Jetson Nano/python3/lib/Font.ttc | Bin 5177387 -> 0 bytes .../lib/__pycache__/epd1in54.cpython-36.pyc | Bin 4487 -> 0 bytes .../__pycache__/epd1in54_V2.cpython-36.pyc | Bin 4502 -> 0 bytes .../lib/__pycache__/epd1in54b.cpython-36.pyc | Bin 4985 -> 0 bytes .../lib/__pycache__/epd1in54c.cpython-36.pyc | Bin 3385 -> 0 bytes .../lib/__pycache__/epd2in13.cpython-36.pyc | Bin 4636 -> 0 bytes .../__pycache__/epd2in13_V2.cpython-36.pyc | Bin 5877 -> 0 bytes .../lib/__pycache__/epd2in13bc.cpython-36.pyc | Bin 3434 -> 0 bytes .../lib/__pycache__/epd2in7.cpython-36.pyc | Bin 4845 -> 0 bytes .../lib/__pycache__/epd2in7b.cpython-36.pyc | Bin 4866 -> 0 bytes .../lib/__pycache__/epd2in9.cpython-36.pyc | Bin 4532 -> 0 bytes .../lib/__pycache__/epd2in9bc.cpython-36.pyc | Bin 3366 -> 0 bytes .../lib/__pycache__/epd2in9d.cpython-36.pyc | Bin 6629 -> 0 bytes .../lib/__pycache__/epd4in2.cpython-36.pyc | Bin 4573 -> 0 bytes .../lib/__pycache__/epd4in2bc.cpython-36.pyc | Bin 3250 -> 0 bytes .../lib/__pycache__/epd7in5bc.cpython-36.pyc | Bin 3887 -> 0 bytes .../lib/__pycache__/epdconfig.cpython-36.pyc | Bin 1479 -> 0 bytes Jetson Nano/python3/lib/epd1in54_V2.py | 206 ---------- Jetson Nano/python3/lib/epd2in13_V2.py | 315 ---------------- Jetson Nano/python3/lib/epd2in13bc.py | 158 -------- Jetson Nano/python3/lib/epd2in7.py | 258 ------------- Jetson Nano/python3/lib/epd2in7b.py | 266 ------------- Jetson Nano/python3/lib/epd2in9.py | 200 ---------- Jetson Nano/python3/lib/epd2in9d.py | 350 ----------------- Jetson Nano/python3/lib/epd4in2.py | 240 ------------ Jetson Nano/python3/lib/epdconfig.py | 97 ----- Jetson Nano/python3/lib/sysfs_gpio.so | Bin 13080 -> 0 bytes Jetson Nano/python3/lib/sysfs_software_spi.so | Bin 13528 -> 0 bytes Jetson Nano/python3/pic/100x100.bmp | Bin 1662 -> 0 bytes Jetson Nano/python3/pic/1in54.bmp | Bin 5662 -> 0 bytes Jetson Nano/python3/pic/1in54b-b.bmp | Bin 5662 -> 0 bytes Jetson Nano/python3/pic/1in54b-r.bmp | Bin 5662 -> 0 bytes Jetson Nano/python3/pic/1in54c-b.bmp | Bin 3102 -> 0 bytes Jetson Nano/python3/pic/1in54c-y.bmp | Bin 3102 -> 0 bytes Jetson Nano/python3/pic/2in13-v2.bmp | Bin 3966 -> 0 bytes Jetson Nano/python3/pic/2in13.bmp | Bin 4062 -> 0 bytes Jetson Nano/python3/pic/2in13bc-b.bmp | Bin 2974 -> 0 bytes Jetson Nano/python3/pic/2in13bc-ry.bmp | Bin 2974 -> 0 bytes Jetson Nano/python3/pic/2in13d.bmp | Bin 2974 -> 0 bytes Jetson Nano/python3/pic/2in7.bmp | Bin 6398 -> 0 bytes Jetson Nano/python3/pic/2in7b-b.bmp | Bin 6398 -> 0 bytes Jetson Nano/python3/pic/2in7b-r.bmp | Bin 6398 -> 0 bytes Jetson Nano/python3/pic/2in9.bmp | Bin 4798 -> 0 bytes Jetson Nano/python3/pic/2in9bc-b.bmp | Bin 5182 -> 0 bytes Jetson Nano/python3/pic/2in9bc-ry.bmp | Bin 5182 -> 0 bytes Jetson Nano/python3/pic/2in9d.bmp | Bin 5182 -> 0 bytes Jetson Nano/python3/pic/4in2.bmp | Bin 15662 -> 0 bytes Jetson Nano/python3/pic/4in2b-b.bmp | Bin 15662 -> 0 bytes Jetson Nano/python3/pic/4in2b-r.bmp | Bin 15662 -> 0 bytes Jetson Nano/python3/pic/4in2c-b.bmp | Bin 15662 -> 0 bytes Jetson Nano/python3/pic/4in2c-y.bmp | Bin 15664 -> 0 bytes Jetson Nano/python3/pic/5in83.bmp | Bin 34110 -> 0 bytes Jetson Nano/python3/pic/5in83bc-b.bmp | Bin 34112 -> 0 bytes Jetson Nano/python3/pic/5in83bc-ry.bmp | Bin 34112 -> 0 bytes Jetson Nano/python3/pic/7in5.bmp | Bin 30782 -> 0 bytes Jetson Nano/python3/pic/7in5b-b.bmp | Bin 30782 -> 0 bytes Jetson Nano/python3/pic/7in5b-r.bmp | Bin 30784 -> 0 bytes Jetson Nano/python3/pic/7in5c-b.bmp | Bin 30782 -> 0 bytes Jetson Nano/python3/pic/7in5c-r.bmp | Bin 30782 -> 0 bytes .../examples/epd_1in54_V2_test.py | 42 ++- .../examples/epd_1in54_test.py | 40 +- .../examples/epd_1in54b_test.py | 42 ++- .../examples/epd_1in54c_test.py | 42 ++- .../examples/epd_2in13_V2_test.py | 42 ++- .../examples/epd_2in13_test.py | 42 ++- .../examples/epd_2in13bc_test.py | 46 ++- .../examples/epd_2in13d_test.py | 40 +- .../examples/epd_2in7_test.py | 42 ++- .../examples/epd_2in7b_test.py | 46 ++- .../examples/epd_2in9_test.py | 44 ++- .../examples/epd_2in9bc_test.py | 46 ++- .../examples/epd_2in9d_test.py | 44 ++- .../examples/epd_4in2_test.py | 42 ++- .../examples/epd_4in2bc_test.py | 50 +-- .../examples/epd_5in83_test.py | 42 ++- .../examples/epd_5in83bc_test.py | 46 ++- .../examples/epd_7in5_test.py | 42 ++- .../examples/epd_7in5bc_test.py | 50 +-- Python/lib/waveshare_epd/__init__.py | 0 .../lib/waveshare_epd}/epd1in54.py | 29 +- .../lib/waveshare_epd}/epd1in54_V2.py | 41 +- .../lib/waveshare_epd}/epd1in54b.py | 23 +- .../lib/waveshare_epd}/epd1in54c.py | 33 +- .../lib/waveshare_epd}/epd2in13.py | 35 +- .../lib/waveshare_epd}/epd2in13_V2.py | 41 +- .../lib/waveshare_epd}/epd2in13bc.py | 33 +- .../lib/waveshare_epd}/epd2in13d.py | 43 +-- .../lib/waveshare_epd}/epd2in7.py | 33 +- .../lib/waveshare_epd}/epd2in7b.py | 33 +- .../lib/waveshare_epd}/epd2in9.py | 31 +- .../lib/waveshare_epd}/epd2in9bc.py | 33 +- .../lib/waveshare_epd}/epd2in9d.py | 39 +- .../lib/waveshare_epd}/epd4in2.py | 29 +- .../lib/waveshare_epd}/epd4in2bc.py | 33 +- .../lib/waveshare_epd}/epd5in83.py | 35 +- .../lib/waveshare_epd}/epd5in83bc.py | 29 +- .../lib/waveshare_epd}/epd7in5.py | 35 +- .../lib/waveshare_epd}/epd7in5bc.py | 29 +- Python/lib/waveshare_epd/epdconfig.py | 154 ++++++++ .../lib/waveshare_epd}/sysfs_gpio.so | Bin .../lib/waveshare_epd}/sysfs_software_spi.so | Bin .../python2 => Python}/pic/100x100.bmp | Bin {Jetson Nano/python2 => Python}/pic/1in54.bmp | Bin .../python2 => Python}/pic/1in54b-b.bmp | Bin .../python2 => Python}/pic/1in54b-r.bmp | Bin .../python2 => Python}/pic/1in54c-b.bmp | Bin .../python2 => Python}/pic/1in54c-y.bmp | Bin .../python2 => Python}/pic/2in13-v2.bmp | Bin {Jetson Nano/python2 => Python}/pic/2in13.bmp | Bin .../python2 => Python}/pic/2in13bc-b.bmp | Bin .../python2 => Python}/pic/2in13bc-ry.bmp | Bin .../python2 => Python}/pic/2in13d.bmp | Bin {Jetson Nano/python2 => Python}/pic/2in7.bmp | Bin .../python2 => Python}/pic/2in7b-b.bmp | Bin .../python2 => Python}/pic/2in7b-r.bmp | Bin {Jetson Nano/python2 => Python}/pic/2in9.bmp | Bin .../python2 => Python}/pic/2in9bc-b.bmp | Bin .../python2 => Python}/pic/2in9bc-ry.bmp | Bin {Jetson Nano/python2 => Python}/pic/2in9d.bmp | Bin {Jetson Nano/python2 => Python}/pic/4in2.bmp | Bin .../python2 => Python}/pic/4in2b-b.bmp | Bin .../python2 => Python}/pic/4in2b-r.bmp | Bin .../python2 => Python}/pic/4in2c-b.bmp | Bin .../python2 => Python}/pic/4in2c-y.bmp | Bin {Jetson Nano/python2 => Python}/pic/5in83.bmp | Bin .../python2 => Python}/pic/5in83bc-b.bmp | Bin .../python2 => Python}/pic/5in83bc-ry.bmp | Bin {Jetson Nano/python2 => Python}/pic/7in5.bmp | Bin .../python2 => Python}/pic/7in5b-b.bmp | Bin .../python2 => Python}/pic/7in5b-r.bmp | Bin .../python2 => Python}/pic/7in5c-b.bmp | Bin .../python2 => Python}/pic/7in5c-r.bmp | Bin .../python2/lib => Python/pic}/Font.ttc | Bin .../readme_jetson_CN.txt | 10 +- .../readme_jetson_EN.txt | 10 +- .../readme_CN.txt => Python/readme_rpi_CN.txt | 10 +- .../readme_EN.txt => Python/readme_rpi_EN.txt | 10 +- Python/setup.py | 12 + README.md | 10 +- .../python2/examples/epd_1in54_V2_test.py | 87 ----- .../python2/examples/epd_1in54_test.py | 86 ----- .../python2/examples/epd_1in54b_test.py | 75 ---- .../python2/examples/epd_2in13_V2_test.py | 89 ----- .../python2/examples/epd_2in13_test.py | 87 ----- .../python2/examples/epd_2in13bc_test.py | 91 ----- .../python2/examples/epd_2in13d_test.py | 83 ---- .../python2/examples/epd_2in7_test.py | 81 ---- .../python2/examples/epd_2in7b_test.py | 98 ----- .../python2/examples/epd_2in9_test.py | 102 ----- .../python2/examples/epd_2in9bc_test.py | 93 ----- .../python2/examples/epd_5in83_test.py | 84 ----- .../python2/examples/epd_5in83bc_test.py | 93 ----- .../python2/examples/epd_7in5_test.py | 84 ----- .../python2/examples/epd_7in5bc_test.py | 95 ----- Raspberry Pi/python2/lib/Font.ttc | Bin 5177387 -> 0 bytes Raspberry Pi/python2/lib/epd1in54.py | 254 ------------- Raspberry Pi/python2/lib/epd1in54_V2.py | 206 ---------- Raspberry Pi/python2/lib/epd1in54b.py | 218 ----------- Raspberry Pi/python2/lib/epd1in54c.py | 152 -------- Raspberry Pi/python2/lib/epd2in13.py | 224 ----------- Raspberry Pi/python2/lib/epd2in13_V2.py | 315 ---------------- Raspberry Pi/python2/lib/epd2in13bc.py | 158 -------- Raspberry Pi/python2/lib/epd2in13d.py | 357 ------------------ Raspberry Pi/python2/lib/epd2in7.py | 258 ------------- Raspberry Pi/python2/lib/epd2in7b.py | 268 ------------- Raspberry Pi/python2/lib/epd2in9.py | 200 ---------- Raspberry Pi/python2/lib/epd2in9bc.py | 154 -------- Raspberry Pi/python2/lib/epd2in9d.py | 350 ----------------- Raspberry Pi/python2/lib/epd4in2.py | 240 ------------ Raspberry Pi/python2/lib/epd4in2bc.py | 147 -------- Raspberry Pi/python2/lib/epd5in83.py | 199 ---------- Raspberry Pi/python2/lib/epd5in83bc.py | 199 ---------- Raspberry Pi/python2/lib/epd7in5.py | 200 ---------- Raspberry Pi/python2/lib/epd7in5bc.py | 200 ---------- Raspberry Pi/python2/lib/epdconfig.py | 75 ---- Raspberry Pi/python2/pic/100x100.bmp | Bin 1662 -> 0 bytes Raspberry Pi/python2/pic/1in54.bmp | Bin 5662 -> 0 bytes Raspberry Pi/python2/pic/1in54b-b.bmp | Bin 5662 -> 0 bytes Raspberry Pi/python2/pic/1in54b-r.bmp | Bin 5662 -> 0 bytes Raspberry Pi/python2/pic/1in54c-b.bmp | Bin 3102 -> 0 bytes Raspberry Pi/python2/pic/1in54c-y.bmp | Bin 3102 -> 0 bytes Raspberry Pi/python2/pic/2in13-v2.bmp | Bin 3966 -> 0 bytes Raspberry Pi/python2/pic/2in13.bmp | Bin 4062 -> 0 bytes Raspberry Pi/python2/pic/2in13bc-b.bmp | Bin 2974 -> 0 bytes Raspberry Pi/python2/pic/2in13bc-ry.bmp | Bin 2974 -> 0 bytes Raspberry Pi/python2/pic/2in13d.bmp | Bin 2974 -> 0 bytes Raspberry Pi/python2/pic/2in7.bmp | Bin 6398 -> 0 bytes Raspberry Pi/python2/pic/2in7b-b.bmp | Bin 6398 -> 0 bytes Raspberry Pi/python2/pic/2in7b-r.bmp | Bin 6398 -> 0 bytes Raspberry Pi/python2/pic/2in9.bmp | Bin 4798 -> 0 bytes Raspberry Pi/python2/pic/2in9bc-b.bmp | Bin 5182 -> 0 bytes Raspberry Pi/python2/pic/2in9bc-ry.bmp | Bin 5182 -> 0 bytes Raspberry Pi/python2/pic/2in9d.bmp | Bin 5182 -> 0 bytes Raspberry Pi/python2/pic/4in2.bmp | Bin 15662 -> 0 bytes Raspberry Pi/python2/pic/4in2b-b.bmp | Bin 15662 -> 0 bytes Raspberry Pi/python2/pic/4in2b-r.bmp | Bin 15662 -> 0 bytes Raspberry Pi/python2/pic/4in2c-b.bmp | Bin 15662 -> 0 bytes Raspberry Pi/python2/pic/4in2c-y.bmp | Bin 15664 -> 0 bytes Raspberry Pi/python2/pic/5in83.bmp | Bin 34110 -> 0 bytes Raspberry Pi/python2/pic/5in83bc-b.bmp | Bin 34112 -> 0 bytes Raspberry Pi/python2/pic/5in83bc-ry.bmp | Bin 34112 -> 0 bytes Raspberry Pi/python2/pic/7in5.bmp | Bin 30782 -> 0 bytes Raspberry Pi/python2/pic/7in5b-b.bmp | Bin 30782 -> 0 bytes Raspberry Pi/python2/pic/7in5b-r.bmp | Bin 30784 -> 0 bytes Raspberry Pi/python2/pic/7in5c-b.bmp | Bin 30782 -> 0 bytes Raspberry Pi/python2/pic/7in5c-r.bmp | Bin 30782 -> 0 bytes Raspberry Pi/python2/readme_CN.txt | 51 --- Raspberry Pi/python2/readme_EN.txt | 52 --- .../python3/examples/epd_1in54_V2_test.py | 87 ----- .../python3/examples/epd_1in54b_test.py | 75 ---- .../python3/examples/epd_1in54c_test.py | 72 ---- .../python3/examples/epd_2in13_V2_test.py | 89 ----- .../python3/examples/epd_2in13_test.py | 87 ----- .../python3/examples/epd_2in13bc_test.py | 91 ----- .../python3/examples/epd_2in13d_test.py | 83 ---- .../python3/examples/epd_2in7_test.py | 81 ---- .../python3/examples/epd_2in7b_test.py | 98 ----- .../python3/examples/epd_2in9_test.py | 102 ----- .../python3/examples/epd_2in9bc_test.py | 93 ----- .../python3/examples/epd_2in9d_test.py | 101 ----- .../python3/examples/epd_4in2_test.py | 84 ----- .../python3/examples/epd_4in2bc_test.py | 95 ----- .../python3/examples/epd_5in83_test.py | 84 ----- .../python3/examples/epd_5in83bc_test.py | 93 ----- .../python3/examples/epd_7in5_test.py | 84 ----- .../python3/examples/epd_7in5bc_test.py | 95 ----- Raspberry Pi/python3/lib/Font.ttc | Bin 5177387 -> 0 bytes Raspberry Pi/python3/lib/epd1in54.py | 254 ------------- Raspberry Pi/python3/lib/epd1in54_V2.py | 206 ---------- Raspberry Pi/python3/lib/epd1in54b.py | 218 ----------- Raspberry Pi/python3/lib/epd1in54c.py | 152 -------- Raspberry Pi/python3/lib/epd2in13.py | 224 ----------- Raspberry Pi/python3/lib/epd2in13_V2.py | 315 ---------------- Raspberry Pi/python3/lib/epd2in13d.py | 357 ------------------ Raspberry Pi/python3/lib/epd2in9bc.py | 154 -------- Raspberry Pi/python3/lib/epd4in2bc.py | 147 -------- Raspberry Pi/python3/lib/epd5in83.py | 199 ---------- Raspberry Pi/python3/lib/epd5in83bc.py | 199 ---------- Raspberry Pi/python3/lib/epd7in5.py | 200 ---------- Raspberry Pi/python3/lib/epd7in5bc.py | 200 ---------- Raspberry Pi/python3/lib/epdconfig.py | 75 ---- Raspberry Pi/python3/pic/100x100.bmp | Bin 1662 -> 0 bytes Raspberry Pi/python3/pic/1in54.bmp | Bin 5662 -> 0 bytes Raspberry Pi/python3/pic/1in54b-b.bmp | Bin 5662 -> 0 bytes Raspberry Pi/python3/pic/1in54b-r.bmp | Bin 5662 -> 0 bytes Raspberry Pi/python3/pic/1in54c-b.bmp | Bin 3102 -> 0 bytes Raspberry Pi/python3/pic/1in54c-y.bmp | Bin 3102 -> 0 bytes Raspberry Pi/python3/pic/2in13-v2.bmp | Bin 3966 -> 0 bytes Raspberry Pi/python3/pic/2in13.bmp | Bin 4062 -> 0 bytes Raspberry Pi/python3/pic/2in13bc-b.bmp | Bin 2974 -> 0 bytes Raspberry Pi/python3/pic/2in13bc-ry.bmp | Bin 2974 -> 0 bytes Raspberry Pi/python3/pic/2in13d.bmp | Bin 2974 -> 0 bytes Raspberry Pi/python3/pic/2in7.bmp | Bin 6398 -> 0 bytes Raspberry Pi/python3/pic/2in7b-b.bmp | Bin 6398 -> 0 bytes Raspberry Pi/python3/pic/2in7b-r.bmp | Bin 6398 -> 0 bytes Raspberry Pi/python3/pic/2in9.bmp | Bin 4798 -> 0 bytes Raspberry Pi/python3/pic/2in9bc-b.bmp | Bin 5182 -> 0 bytes Raspberry Pi/python3/pic/2in9bc-ry.bmp | Bin 5182 -> 0 bytes Raspberry Pi/python3/pic/2in9d.bmp | Bin 5182 -> 0 bytes Raspberry Pi/python3/pic/4in2.bmp | Bin 15662 -> 0 bytes Raspberry Pi/python3/pic/4in2b-b.bmp | Bin 15662 -> 0 bytes Raspberry Pi/python3/pic/4in2b-r.bmp | Bin 15662 -> 0 bytes Raspberry Pi/python3/pic/4in2c-b.bmp | Bin 15662 -> 0 bytes Raspberry Pi/python3/pic/4in2c-y.bmp | Bin 15664 -> 0 bytes Raspberry Pi/python3/pic/5in83.bmp | Bin 34110 -> 0 bytes Raspberry Pi/python3/pic/5in83bc-b.bmp | Bin 34112 -> 0 bytes Raspberry Pi/python3/pic/5in83bc-ry.bmp | Bin 34112 -> 0 bytes Raspberry Pi/python3/pic/7in5.bmp | Bin 30782 -> 0 bytes Raspberry Pi/python3/pic/7in5b-b.bmp | Bin 30782 -> 0 bytes Raspberry Pi/python3/pic/7in5b-r.bmp | Bin 30784 -> 0 bytes Raspberry Pi/python3/pic/7in5c-b.bmp | Bin 30782 -> 0 bytes Raspberry Pi/python3/pic/7in5c-r.bmp | Bin 30782 -> 0 bytes 337 files changed, 1009 insertions(+), 19168 deletions(-) create mode 100644 .gitignore delete mode 100644 Jetson Nano/python2/examples/epd_1in54_test.py delete mode 100644 Jetson Nano/python2/examples/epd_1in54b_test.py delete mode 100644 Jetson Nano/python2/examples/epd_1in54c_test.py delete mode 100644 Jetson Nano/python2/examples/epd_2in13_V2_test.py delete mode 100644 Jetson Nano/python2/examples/epd_2in13_test.py delete mode 100644 Jetson Nano/python2/examples/epd_2in13bc_test.py delete mode 100644 Jetson Nano/python2/examples/epd_2in7_test.py delete mode 100644 Jetson Nano/python2/examples/epd_2in9bc_test.py delete mode 100644 Jetson Nano/python2/examples/epd_2in9d_test.py delete mode 100644 Jetson Nano/python2/examples/epd_4in2_test.py delete mode 100644 Jetson Nano/python2/examples/epd_4in2bc_test.py delete mode 100644 Jetson Nano/python2/examples/epd_7in5_test.py delete mode 100644 Jetson Nano/python2/examples/epd_7in5bc_test.py delete mode 100644 Jetson Nano/python2/lib/epd1in54.py delete mode 100644 Jetson Nano/python2/lib/epd1in54.pyc delete mode 100644 Jetson Nano/python2/lib/epd1in54_V2.pyc delete mode 100644 Jetson Nano/python2/lib/epd1in54b.py delete mode 100644 Jetson Nano/python2/lib/epd1in54b.pyc delete mode 100644 Jetson Nano/python2/lib/epd1in54c.py delete mode 100644 Jetson Nano/python2/lib/epd1in54c.pyc delete mode 100644 Jetson Nano/python2/lib/epd2in13.py delete mode 100644 Jetson Nano/python2/lib/epd2in13.pyc delete mode 100644 Jetson Nano/python2/lib/epd2in13_V2.pyc delete mode 100644 Jetson Nano/python2/lib/epd2in13bc.py delete mode 100644 Jetson Nano/python2/lib/epd2in13bc.pyc delete mode 100644 Jetson Nano/python2/lib/epd2in13d.py delete mode 100644 Jetson Nano/python2/lib/epd2in13d.pyc delete mode 100644 Jetson Nano/python2/lib/epd2in7.py delete mode 100644 Jetson Nano/python2/lib/epd2in7.pyc delete mode 100644 Jetson Nano/python2/lib/epd2in7b.py delete mode 100644 Jetson Nano/python2/lib/epd2in7b.pyc delete mode 100644 Jetson Nano/python2/lib/epd2in9.py delete mode 100644 Jetson Nano/python2/lib/epd2in9.pyc delete mode 100644 Jetson Nano/python2/lib/epd2in9bc.py delete mode 100644 Jetson Nano/python2/lib/epd2in9bc.pyc delete mode 100644 Jetson Nano/python2/lib/epd2in9d.py delete mode 100644 Jetson Nano/python2/lib/epd2in9d.pyc delete mode 100644 Jetson Nano/python2/lib/epd4in2.py delete mode 100644 Jetson Nano/python2/lib/epd4in2.pyc delete mode 100644 Jetson Nano/python2/lib/epd4in2bc.py delete mode 100644 Jetson Nano/python2/lib/epd4in2bc.pyc delete mode 100644 Jetson Nano/python2/lib/epd5in83.py delete mode 100644 Jetson Nano/python2/lib/epd5in83.pyc delete mode 100644 Jetson Nano/python2/lib/epd5in83bc.py delete mode 100644 Jetson Nano/python2/lib/epd5in83bc.pyc delete mode 100644 Jetson Nano/python2/lib/epd7in5.py delete mode 100644 Jetson Nano/python2/lib/epd7in5.pyc delete mode 100644 Jetson Nano/python2/lib/epd7in5bc.py delete mode 100644 Jetson Nano/python2/lib/epd7in5bc.pyc delete mode 100644 Jetson Nano/python2/lib/epdconfig.py delete mode 100644 Jetson Nano/python2/lib/epdconfig.pyc delete mode 100644 Jetson Nano/python2/readme_CN.txt delete mode 100644 Jetson Nano/python2/readme_EN.txt delete mode 100644 Jetson Nano/python3/examples/epd_1in54_V2_test.py delete mode 100644 Jetson Nano/python3/examples/epd_1in54_test.py delete mode 100644 Jetson Nano/python3/examples/epd_1in54c_test.py delete mode 100644 Jetson Nano/python3/examples/epd_2in13d_test.py delete mode 100644 Jetson Nano/python3/examples/epd_2in7b_test.py delete mode 100644 Jetson Nano/python3/examples/epd_2in9_test.py delete mode 100644 Jetson Nano/python3/examples/epd_2in9d_test.py delete mode 100644 Jetson Nano/python3/examples/epd_4in2_test.py delete mode 100644 Jetson Nano/python3/examples/epd_4in2bc_test.py delete mode 100644 Jetson Nano/python3/examples/epd_5in83_test.py delete mode 100644 Jetson Nano/python3/examples/epd_5in83bc_test.py delete mode 100644 Jetson Nano/python3/lib/Font.ttc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd1in54.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd1in54_V2.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd1in54b.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd1in54c.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd2in13.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd2in13_V2.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd2in13bc.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd2in7.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd2in7b.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd2in9.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd2in9bc.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd2in9d.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd4in2.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd4in2bc.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epd7in5bc.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/__pycache__/epdconfig.cpython-36.pyc delete mode 100644 Jetson Nano/python3/lib/epd1in54_V2.py delete mode 100644 Jetson Nano/python3/lib/epd2in13_V2.py delete mode 100644 Jetson Nano/python3/lib/epd2in13bc.py delete mode 100644 Jetson Nano/python3/lib/epd2in7.py delete mode 100644 Jetson Nano/python3/lib/epd2in7b.py delete mode 100644 Jetson Nano/python3/lib/epd2in9.py delete mode 100644 Jetson Nano/python3/lib/epd2in9d.py delete mode 100644 Jetson Nano/python3/lib/epd4in2.py delete mode 100644 Jetson Nano/python3/lib/epdconfig.py delete mode 100644 Jetson Nano/python3/lib/sysfs_gpio.so delete mode 100644 Jetson Nano/python3/lib/sysfs_software_spi.so delete mode 100644 Jetson Nano/python3/pic/100x100.bmp delete mode 100644 Jetson Nano/python3/pic/1in54.bmp delete mode 100644 Jetson Nano/python3/pic/1in54b-b.bmp delete mode 100644 Jetson Nano/python3/pic/1in54b-r.bmp delete mode 100644 Jetson Nano/python3/pic/1in54c-b.bmp delete mode 100644 Jetson Nano/python3/pic/1in54c-y.bmp delete mode 100644 Jetson Nano/python3/pic/2in13-v2.bmp delete mode 100644 Jetson Nano/python3/pic/2in13.bmp delete mode 100644 Jetson Nano/python3/pic/2in13bc-b.bmp delete mode 100644 Jetson Nano/python3/pic/2in13bc-ry.bmp delete mode 100644 Jetson Nano/python3/pic/2in13d.bmp delete mode 100644 Jetson Nano/python3/pic/2in7.bmp delete mode 100644 Jetson Nano/python3/pic/2in7b-b.bmp delete mode 100644 Jetson Nano/python3/pic/2in7b-r.bmp delete mode 100644 Jetson Nano/python3/pic/2in9.bmp delete mode 100644 Jetson Nano/python3/pic/2in9bc-b.bmp delete mode 100644 Jetson Nano/python3/pic/2in9bc-ry.bmp delete mode 100644 Jetson Nano/python3/pic/2in9d.bmp delete mode 100644 Jetson Nano/python3/pic/4in2.bmp delete mode 100644 Jetson Nano/python3/pic/4in2b-b.bmp delete mode 100644 Jetson Nano/python3/pic/4in2b-r.bmp delete mode 100644 Jetson Nano/python3/pic/4in2c-b.bmp delete mode 100644 Jetson Nano/python3/pic/4in2c-y.bmp delete mode 100644 Jetson Nano/python3/pic/5in83.bmp delete mode 100644 Jetson Nano/python3/pic/5in83bc-b.bmp delete mode 100644 Jetson Nano/python3/pic/5in83bc-ry.bmp delete mode 100644 Jetson Nano/python3/pic/7in5.bmp delete mode 100644 Jetson Nano/python3/pic/7in5b-b.bmp delete mode 100644 Jetson Nano/python3/pic/7in5b-r.bmp delete mode 100644 Jetson Nano/python3/pic/7in5c-b.bmp delete mode 100644 Jetson Nano/python3/pic/7in5c-r.bmp rename {Jetson Nano/python2 => Python}/examples/epd_1in54_V2_test.py (68%) rename {Raspberry Pi/python3 => Python}/examples/epd_1in54_test.py (69%) rename {Jetson Nano/python3 => Python}/examples/epd_1in54b_test.py (63%) rename {Raspberry Pi/python2 => Python}/examples/epd_1in54c_test.py (61%) rename {Jetson Nano/python3 => Python}/examples/epd_2in13_V2_test.py (67%) rename {Jetson Nano/python3 => Python}/examples/epd_2in13_test.py (67%) rename {Jetson Nano/python3 => Python}/examples/epd_2in13bc_test.py (69%) rename {Jetson Nano/python2 => Python}/examples/epd_2in13d_test.py (68%) rename {Jetson Nano/python3 => Python}/examples/epd_2in7_test.py (66%) rename {Jetson Nano/python2 => Python}/examples/epd_2in7b_test.py (72%) rename {Jetson Nano/python2 => Python}/examples/epd_2in9_test.py (72%) rename {Jetson Nano/python3 => Python}/examples/epd_2in9bc_test.py (70%) rename {Raspberry Pi/python2 => Python}/examples/epd_2in9d_test.py (72%) rename {Raspberry Pi/python2 => Python}/examples/epd_4in2_test.py (68%) rename {Raspberry Pi/python2 => Python}/examples/epd_4in2bc_test.py (68%) rename {Jetson Nano/python2 => Python}/examples/epd_5in83_test.py (68%) rename {Jetson Nano/python2 => Python}/examples/epd_5in83bc_test.py (70%) rename {Jetson Nano/python3 => Python}/examples/epd_7in5_test.py (68%) rename {Jetson Nano/python3 => Python}/examples/epd_7in5bc_test.py (68%) create mode 100644 Python/lib/waveshare_epd/__init__.py rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd1in54.py (93%) rename {Jetson Nano/python2/lib => Python/lib/waveshare_epd}/epd1in54_V2.py (85%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd1in54b.py (93%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd1in54c.py (86%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd2in13.py (90%) rename {Jetson Nano/python2/lib => Python/lib/waveshare_epd}/epd2in13_V2.py (92%) rename {Raspberry Pi/python3/lib => Python/lib/waveshare_epd}/epd2in13bc.py (85%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd2in13d.py (91%) rename {Raspberry Pi/python3/lib => Python/lib/waveshare_epd}/epd2in7.py (90%) rename {Raspberry Pi/python3/lib => Python/lib/waveshare_epd}/epd2in7b.py (90%) rename {Raspberry Pi/python3/lib => Python/lib/waveshare_epd}/epd2in9.py (89%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd2in9bc.py (85%) rename {Raspberry Pi/python3/lib => Python/lib/waveshare_epd}/epd2in9d.py (91%) rename {Raspberry Pi/python3/lib => Python/lib/waveshare_epd}/epd4in2.py (91%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd4in2bc.py (84%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd5in83.py (85%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd5in83bc.py (89%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd7in5.py (85%) rename {Jetson Nano/python3/lib => Python/lib/waveshare_epd}/epd7in5bc.py (89%) create mode 100644 Python/lib/waveshare_epd/epdconfig.py rename {Jetson Nano/python2/lib => Python/lib/waveshare_epd}/sysfs_gpio.so (100%) rename {Jetson Nano/python2/lib => Python/lib/waveshare_epd}/sysfs_software_spi.so (100%) rename {Jetson Nano/python2 => Python}/pic/100x100.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/1in54.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/1in54b-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/1in54b-r.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/1in54c-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/1in54c-y.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in13-v2.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in13.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in13bc-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in13bc-ry.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in13d.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in7.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in7b-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in7b-r.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in9.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in9bc-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in9bc-ry.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/2in9d.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/4in2.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/4in2b-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/4in2b-r.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/4in2c-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/4in2c-y.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/5in83.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/5in83bc-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/5in83bc-ry.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/7in5.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/7in5b-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/7in5b-r.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/7in5c-b.bmp (100%) rename {Jetson Nano/python2 => Python}/pic/7in5c-r.bmp (100%) rename {Jetson Nano/python2/lib => Python/pic}/Font.ttc (100%) rename Jetson Nano/python3/readme_CN.txt => Python/readme_jetson_CN.txt (90%) rename Jetson Nano/python3/readme_EN.txt => Python/readme_jetson_EN.txt (90%) rename Raspberry Pi/python3/readme_CN.txt => Python/readme_rpi_CN.txt (90%) rename Raspberry Pi/python3/readme_EN.txt => Python/readme_rpi_EN.txt (90%) create mode 100644 Python/setup.py delete mode 100644 Raspberry Pi/python2/examples/epd_1in54_V2_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_1in54_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_1in54b_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_2in13_V2_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_2in13_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_2in13bc_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_2in13d_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_2in7_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_2in7b_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_2in9_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_2in9bc_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_5in83_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_5in83bc_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_7in5_test.py delete mode 100644 Raspberry Pi/python2/examples/epd_7in5bc_test.py delete mode 100644 Raspberry Pi/python2/lib/Font.ttc delete mode 100644 Raspberry Pi/python2/lib/epd1in54.py delete mode 100644 Raspberry Pi/python2/lib/epd1in54_V2.py delete mode 100644 Raspberry Pi/python2/lib/epd1in54b.py delete mode 100644 Raspberry Pi/python2/lib/epd1in54c.py delete mode 100644 Raspberry Pi/python2/lib/epd2in13.py delete mode 100644 Raspberry Pi/python2/lib/epd2in13_V2.py delete mode 100644 Raspberry Pi/python2/lib/epd2in13bc.py delete mode 100644 Raspberry Pi/python2/lib/epd2in13d.py delete mode 100644 Raspberry Pi/python2/lib/epd2in7.py delete mode 100644 Raspberry Pi/python2/lib/epd2in7b.py delete mode 100644 Raspberry Pi/python2/lib/epd2in9.py delete mode 100644 Raspberry Pi/python2/lib/epd2in9bc.py delete mode 100644 Raspberry Pi/python2/lib/epd2in9d.py delete mode 100644 Raspberry Pi/python2/lib/epd4in2.py delete mode 100644 Raspberry Pi/python2/lib/epd4in2bc.py delete mode 100644 Raspberry Pi/python2/lib/epd5in83.py delete mode 100644 Raspberry Pi/python2/lib/epd5in83bc.py delete mode 100644 Raspberry Pi/python2/lib/epd7in5.py delete mode 100644 Raspberry Pi/python2/lib/epd7in5bc.py delete mode 100644 Raspberry Pi/python2/lib/epdconfig.py delete mode 100644 Raspberry Pi/python2/pic/100x100.bmp delete mode 100644 Raspberry Pi/python2/pic/1in54.bmp delete mode 100644 Raspberry Pi/python2/pic/1in54b-b.bmp delete mode 100644 Raspberry Pi/python2/pic/1in54b-r.bmp delete mode 100644 Raspberry Pi/python2/pic/1in54c-b.bmp delete mode 100644 Raspberry Pi/python2/pic/1in54c-y.bmp delete mode 100644 Raspberry Pi/python2/pic/2in13-v2.bmp delete mode 100644 Raspberry Pi/python2/pic/2in13.bmp delete mode 100644 Raspberry Pi/python2/pic/2in13bc-b.bmp delete mode 100644 Raspberry Pi/python2/pic/2in13bc-ry.bmp delete mode 100644 Raspberry Pi/python2/pic/2in13d.bmp delete mode 100644 Raspberry Pi/python2/pic/2in7.bmp delete mode 100644 Raspberry Pi/python2/pic/2in7b-b.bmp delete mode 100644 Raspberry Pi/python2/pic/2in7b-r.bmp delete mode 100644 Raspberry Pi/python2/pic/2in9.bmp delete mode 100644 Raspberry Pi/python2/pic/2in9bc-b.bmp delete mode 100644 Raspberry Pi/python2/pic/2in9bc-ry.bmp delete mode 100644 Raspberry Pi/python2/pic/2in9d.bmp delete mode 100644 Raspberry Pi/python2/pic/4in2.bmp delete mode 100644 Raspberry Pi/python2/pic/4in2b-b.bmp delete mode 100644 Raspberry Pi/python2/pic/4in2b-r.bmp delete mode 100644 Raspberry Pi/python2/pic/4in2c-b.bmp delete mode 100644 Raspberry Pi/python2/pic/4in2c-y.bmp delete mode 100644 Raspberry Pi/python2/pic/5in83.bmp delete mode 100644 Raspberry Pi/python2/pic/5in83bc-b.bmp delete mode 100644 Raspberry Pi/python2/pic/5in83bc-ry.bmp delete mode 100644 Raspberry Pi/python2/pic/7in5.bmp delete mode 100644 Raspberry Pi/python2/pic/7in5b-b.bmp delete mode 100644 Raspberry Pi/python2/pic/7in5b-r.bmp delete mode 100644 Raspberry Pi/python2/pic/7in5c-b.bmp delete mode 100644 Raspberry Pi/python2/pic/7in5c-r.bmp delete mode 100644 Raspberry Pi/python2/readme_CN.txt delete mode 100644 Raspberry Pi/python2/readme_EN.txt delete mode 100644 Raspberry Pi/python3/examples/epd_1in54_V2_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_1in54b_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_1in54c_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_2in13_V2_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_2in13_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_2in13bc_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_2in13d_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_2in7_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_2in7b_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_2in9_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_2in9bc_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_2in9d_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_4in2_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_4in2bc_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_5in83_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_5in83bc_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_7in5_test.py delete mode 100644 Raspberry Pi/python3/examples/epd_7in5bc_test.py delete mode 100644 Raspberry Pi/python3/lib/Font.ttc delete mode 100644 Raspberry Pi/python3/lib/epd1in54.py delete mode 100644 Raspberry Pi/python3/lib/epd1in54_V2.py delete mode 100644 Raspberry Pi/python3/lib/epd1in54b.py delete mode 100644 Raspberry Pi/python3/lib/epd1in54c.py delete mode 100644 Raspberry Pi/python3/lib/epd2in13.py delete mode 100644 Raspberry Pi/python3/lib/epd2in13_V2.py delete mode 100644 Raspberry Pi/python3/lib/epd2in13d.py delete mode 100644 Raspberry Pi/python3/lib/epd2in9bc.py delete mode 100644 Raspberry Pi/python3/lib/epd4in2bc.py delete mode 100644 Raspberry Pi/python3/lib/epd5in83.py delete mode 100644 Raspberry Pi/python3/lib/epd5in83bc.py delete mode 100644 Raspberry Pi/python3/lib/epd7in5.py delete mode 100644 Raspberry Pi/python3/lib/epd7in5bc.py delete mode 100644 Raspberry Pi/python3/lib/epdconfig.py delete mode 100644 Raspberry Pi/python3/pic/100x100.bmp delete mode 100644 Raspberry Pi/python3/pic/1in54.bmp delete mode 100644 Raspberry Pi/python3/pic/1in54b-b.bmp delete mode 100644 Raspberry Pi/python3/pic/1in54b-r.bmp delete mode 100644 Raspberry Pi/python3/pic/1in54c-b.bmp delete mode 100644 Raspberry Pi/python3/pic/1in54c-y.bmp delete mode 100644 Raspberry Pi/python3/pic/2in13-v2.bmp delete mode 100644 Raspberry Pi/python3/pic/2in13.bmp delete mode 100644 Raspberry Pi/python3/pic/2in13bc-b.bmp delete mode 100644 Raspberry Pi/python3/pic/2in13bc-ry.bmp delete mode 100644 Raspberry Pi/python3/pic/2in13d.bmp delete mode 100644 Raspberry Pi/python3/pic/2in7.bmp delete mode 100644 Raspberry Pi/python3/pic/2in7b-b.bmp delete mode 100644 Raspberry Pi/python3/pic/2in7b-r.bmp delete mode 100644 Raspberry Pi/python3/pic/2in9.bmp delete mode 100644 Raspberry Pi/python3/pic/2in9bc-b.bmp delete mode 100644 Raspberry Pi/python3/pic/2in9bc-ry.bmp delete mode 100644 Raspberry Pi/python3/pic/2in9d.bmp delete mode 100644 Raspberry Pi/python3/pic/4in2.bmp delete mode 100644 Raspberry Pi/python3/pic/4in2b-b.bmp delete mode 100644 Raspberry Pi/python3/pic/4in2b-r.bmp delete mode 100644 Raspberry Pi/python3/pic/4in2c-b.bmp delete mode 100644 Raspberry Pi/python3/pic/4in2c-y.bmp delete mode 100644 Raspberry Pi/python3/pic/5in83.bmp delete mode 100644 Raspberry Pi/python3/pic/5in83bc-b.bmp delete mode 100644 Raspberry Pi/python3/pic/5in83bc-ry.bmp delete mode 100644 Raspberry Pi/python3/pic/7in5.bmp delete mode 100644 Raspberry Pi/python3/pic/7in5b-b.bmp delete mode 100644 Raspberry Pi/python3/pic/7in5b-r.bmp delete mode 100644 Raspberry Pi/python3/pic/7in5c-b.bmp delete mode 100644 Raspberry Pi/python3/pic/7in5c-r.bmp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1f7f154 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +Python/build/ +Python/dist/ +*.egg-info/ +*.pyc +__pycache__/ diff --git a/Jetson Nano/python2/examples/epd_1in54_test.py b/Jetson Nano/python2/examples/epd_1in54_test.py deleted file mode 100644 index 92f619f..0000000 --- a/Jetson Nano/python2/examples/epd_1in54_test.py +++ /dev/null @@ -1,86 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd1in54 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd1in54 Demo") - - epd = epd1in54.EPD() - print("init and Clear") - epd.init(epd.lut_full_update) - epd.Clear(0xFF) - - # Drawing on the image - print("1.Drawing on the image...") - image = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - - draw = ImageDraw.Draw(image) - font = ImageFont.truetype('../lib/Font.ttc', 24) - draw.rectangle((0, 10, 200, 34), fill = 0) - draw.text((8, 12), 'hello world', font = font, fill = 255) - draw.text((8, 36), u'微雪电子', font = font, fill = 0) - draw.line((16, 60, 56, 60), fill = 0) - draw.line((56, 60, 56, 110), fill = 0) - draw.line((16, 110, 56, 110), fill = 0) - draw.line((16, 110, 16, 60), fill = 0) - draw.line((16, 60, 56, 110), fill = 0) - draw.line((56, 60, 16, 110), fill = 0) - draw.arc((90, 60, 150, 120), 0, 360, fill = 0) - draw.rectangle((16, 130, 56, 180), fill = 0) - draw.chord((90, 130, 150, 190), 0, 360, fill = 0) - epd.display(epd.getbuffer(image.rotate(90))) - time.sleep(2) - - # read bmp file - print("2.read bmp file...") - image = Image.open('../pic/1in54.bmp') - epd.display(epd.getbuffer(image)) - time.sleep(2) - - # read bmp file on window - print("3.read bmp file on window...") - epd.Clear(0xFF) - image1 = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - image1.paste(bmp, (50,50)) - epd.display(epd.getbuffer(image1)) - time.sleep(2) - - # # partial update - print("4.show time...") - epd.init(epd.lut_partial_update) - epd.Clear(0xFF) - - time_image = Image.new('1', (epd.width, epd.height), 255) - time_draw = ImageDraw.Draw(time_image) - num = 0 - while (True): - time_draw.rectangle((10, 10, 120, 50), fill = 255) - time_draw.text((10, 10), time.strftime('%H:%M:%S'), font = font, fill = 0) - newimage = time_image.crop([10, 10, 120, 50]) - time_image.paste(newimage, (10,10)) - epd.display(epd.getbuffer(time_image)) - num = num + 1 - if(num == 10): - break - - print("Clear...") - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_1in54b_test.py b/Jetson Nano/python2/examples/epd_1in54b_test.py deleted file mode 100644 index d48b8e2..0000000 --- a/Jetson Nano/python2/examples/epd_1in54b_test.py +++ /dev/null @@ -1,75 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd1in54b -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd1in54b Demo") - - epd = epd1in54b.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("1.Drawing on the image...") - blackimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - redimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - - font = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - drawblack = ImageDraw.Draw(blackimage) - drawred = ImageDraw.Draw(redimage) - drawblack.rectangle((0, 10, 200, 34), fill = 0) - drawblack.text((8, 12), 'hello world', font = font, fill = 255) - drawblack.text((8, 36), u'微雪电子', font = font18, fill = 0) - drawblack.line((16, 60, 56, 60), fill = 0) - drawblack.line((56, 60, 56, 110), fill = 0) - drawblack.line((16, 110, 56, 110), fill = 0) - drawred.line((16, 110, 16, 60), fill = 0) - drawred.line((16, 60, 56, 110), fill = 0) - drawred.line((56, 60, 16, 110), fill = 0) - drawred.arc((90, 60, 150, 120), 0, 360, fill = 0) - drawred.rectangle((16, 130, 56, 180), fill = 0) - drawred.chord((90, 130, 150, 190), 0, 360, fill = 0) - epd.display(epd.getbuffer(blackimage),epd.getbuffer(redimage)) - time.sleep(1) - - # read bmp file - print("2.read bmp file...") - blackimage = Image.open('../pic/1in54b-b.bmp') - redimage = Image.open('../pic/1in54b-r.bmp') - epd.display(epd.getbuffer(blackimage),epd.getbuffer(redimage)) - time.sleep(1) - - # read bmp file on window - print("3.read bmp file on window...") - blackimage1 = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - redimage2 = Image.new('1', (epd.width, epd.height), 255) - - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (50,50)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage2)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_1in54c_test.py b/Jetson Nano/python2/examples/epd_1in54c_test.py deleted file mode 100644 index 7374e6d..0000000 --- a/Jetson Nano/python2/examples/epd_1in54c_test.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd1in54c -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd1in54c Demo") - - epd = epd1in54c.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("1.Drawing on the image...") - blackimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - yellowimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - - font = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - drawblack = ImageDraw.Draw(blackimage) - drawyellow = ImageDraw.Draw(yellowimage) - drawblack.rectangle((0, 10, 200, 34), fill = 0) - drawblack.text((8, 12), 'hello world', font = font, fill = 255) - drawblack.text((8, 36), u'微雪电子', font = font, fill = 0) - drawblack.line((10, 100, 70, 100), fill = 0) - drawblack.line((40, 70, 40, 130), fill = 0) - - drawyellow.rectangle((10, 70, 70, 130), outline = 0) - drawyellow.arc((80, 70, 140, 130), 0, 360, fill = 0) - drawyellow.chord((90, 80, 130, 120), 0, 360, fill = 0) - epd.display(epd.getbuffer(blackimage),epd.getbuffer(yellowimage)) - time.sleep(1) - - # read bmp file - print("2.read bmp file...") - blackimage = Image.open('../pic/1in54c-b.bmp') - yellowimage = Image.open('../pic/1in54c-y.bmp') - epd.display(epd.getbuffer(blackimage),epd.getbuffer(yellowimage)) - time.sleep(1) - - # read bmp file on window - print("3.read bmp file on window...") - blackimage1 = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - yellowimage2 = Image.new('1', (epd.width, epd.height), 255) - - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (50,50)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(yellowimage2)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_2in13_V2_test.py b/Jetson Nano/python2/examples/epd_2in13_V2_test.py deleted file mode 100644 index 85f5ee7..0000000 --- a/Jetson Nano/python2/examples/epd_2in13_V2_test.py +++ /dev/null @@ -1,89 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in13_V2 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in13_V2 Demo") - - epd = epd2in13_V2.EPD() - print("init and Clear") - epd.init(epd.FULL_UPDATE) - epd.Clear(0xFF) - - # Drawing on the image - font15 = ImageFont.truetype('../lib/Font.ttc', 15) - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - - print("1.Drawing on the image...") - image = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(image) - - draw.rectangle([(0,0),(50,50)],outline = 0) - draw.rectangle([(55,0),(100,50)],fill = 0) - draw.line([(0,0),(50,50)], fill = 0,width = 1) - draw.line([(0,50),(50,0)], fill = 0,width = 1) - draw.chord((10, 60, 50, 100), 0, 360, fill = 0) - draw.ellipse((55, 60, 95, 100), outline = 0) - draw.pieslice((55, 60, 95, 100), 90, 180, outline = 0) - draw.pieslice((55, 60, 95, 100), 270, 360, fill = 0) - draw.polygon([(110,0),(110,50),(150,25)],outline = 0) - draw.polygon([(190,0),(190,50),(150,25)],fill = 0) - draw.text((120, 60), 'e-Paper demo', font = font15, fill = 0) - draw.text((110, 90), u'微雪电子', font = font24, fill = 0) - epd.display(epd.getbuffer(image)) - time.sleep(2) - - # read bmp file - print("2.read bmp file...") - image = Image.open('../pic/2in13.bmp') - epd.display(epd.getbuffer(image)) - time.sleep(2) - - # read bmp file on window - print("3.read bmp file on window...") - # epd.Clear(0xFF) - image1 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - image1.paste(bmp, (2,2)) - epd.display(epd.getbuffer(image1)) - time.sleep(2) - - # # partial update - print("4.show time...") - time_image = Image.new('1', (epd.height, epd.width), 255) - time_draw = ImageDraw.Draw(time_image) - - epd.init(epd.FULL_UPDATE) - epd.displayPartBaseImage(epd.getbuffer(time_image)) - - epd.init(epd.PART_UPDATE) - num = 0 - while (True): - time_draw.rectangle((120, 80, 220, 105), fill = 255) - time_draw.text((120, 80), time.strftime('%H:%M:%S'), font = font24, fill = 0) - epd.displayPartial(epd.getbuffer(time_image)) - num = num + 1 - if(num == 10): - break - - print("Clear...") - epd.init(epd.FULL_UPDATE) - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_2in13_test.py b/Jetson Nano/python2/examples/epd_2in13_test.py deleted file mode 100644 index 1081d79..0000000 --- a/Jetson Nano/python2/examples/epd_2in13_test.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in13 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in13 Demo") - - epd = epd2in13.EPD() - print("init and Clear") - epd.init(epd.lut_full_update) - epd.Clear(0xFF) - - # Drawing on the image - font15 = ImageFont.truetype('../lib/Font.ttc', 15) - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - - print("1.Drawing on the image...") - image = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(image) - - draw.rectangle([(0,0),(50,50)],outline = 0) - draw.rectangle([(55,0),(100,50)],fill = 0) - draw.line([(0,0),(50,50)], fill = 0,width = 1) - draw.line([(0,50),(50,0)], fill = 0,width = 1) - draw.chord((10, 60, 50, 100), 0, 360, fill = 0) - draw.ellipse((55, 60, 95, 100), outline = 0) - draw.pieslice((55, 60, 95, 100), 90, 180, outline = 0) - draw.pieslice((55, 60, 95, 100), 270, 360, fill = 0) - draw.polygon([(110,0),(110,50),(150,25)],outline = 0) - draw.polygon([(190,0),(190,50),(150,25)],fill = 0) - draw.text((120, 60), 'e-Paper demo', font = font15, fill = 0) - draw.text((110, 90), u'微雪电子', font = font24, fill = 0) - epd.display(epd.getbuffer(image)) - time.sleep(2) - - # read bmp file - print("2.read bmp file...") - image = Image.open('../pic/2in13.bmp') - epd.display(epd.getbuffer(image)) - time.sleep(2) - - # read bmp file on window - print("3.read bmp file on window...") - # epd.Clear(0xFF) - image1 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - image1.paste(bmp, (2,2)) - epd.display(epd.getbuffer(image1)) - time.sleep(2) - - # # partial update - print("4.show time...") - epd.init(epd.lut_partial_update) - epd.Clear(0xFF) - - time_image = Image.new('1', (epd.height, epd.width), 255) - time_draw = ImageDraw.Draw(time_image) - num = 0 - while (True): - time_draw.rectangle((120, 80, 220, 105), fill = 255) - time_draw.text((120, 80), time.strftime('%H:%M:%S'), font = font24, fill = 0) - epd.display(epd.getbuffer(time_image)) - num = num + 1 - if(num == 10): - break - - print("Clear...") - epd.init(epd.lut_full_update) - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_2in13bc_test.py b/Jetson Nano/python2/examples/epd_2in13bc_test.py deleted file mode 100644 index ad24c87..0000000 --- a/Jetson Nano/python2/examples/epd_2in13bc_test.py +++ /dev/null @@ -1,91 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in13bc -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in13bc Demo") - - epd = epd2in13bc.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("Drawing") - font20 = ImageFont.truetype('../lib/Font.ttc', 20) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - HBlackimage = Image.new('1', (epd.height, epd.width), 255) # 298*126 - HRYimage = Image.new('1', (epd.height, epd.width), 255) # 298*126 ryimage: red or yellow image - drawblack = ImageDraw.Draw(HBlackimage) - drawry = ImageDraw.Draw(HRYimage) - drawblack.text((10, 0), 'hello world', font = font20, fill = 0) - drawblack.text((10, 20), '2.13inch e-Paper bc', font = font20, fill = 0) - drawblack.text((120, 0), u'微雪电子', font = font20, fill = 0) - drawblack.line((20, 50, 70, 100), fill = 0) - drawblack.line((70, 50, 20, 100), fill = 0) - drawblack.rectangle((20, 50, 70, 100), outline = 0) - drawry.line((165, 50, 165, 100), fill = 0) - drawry.line((140, 75, 190, 75), fill = 0) - drawry.arc((140, 50, 190, 100), 0, 360, fill = 0) - drawry.rectangle((80, 50, 130, 100), fill = 0) - drawry.chord((85, 55, 125, 95), 0, 360, fill =1) - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - LBlackimage = Image.new('1', (epd.width, epd.height), 255) # 126*298 - LRYimage = Image.new('1', (epd.width, epd.height), 255) # 126*298 - drawblack = ImageDraw.Draw(LBlackimage) - drawry = ImageDraw.Draw(LRYimage) - - drawblack.text((2, 0), 'hello world', font = font18, fill = 0) - drawblack.text((2, 20), '2.13 epd b', font = font18, fill = 0) - drawblack.text((20, 50), u'微雪电子', font = font18, fill = 0) - drawblack.line((10, 90, 60, 140), fill = 0) - drawblack.line((60, 90, 10, 140), fill = 0) - drawblack.rectangle((10, 90, 60, 140), outline = 0) - drawry.rectangle((10, 150, 60, 200), fill = 0) - drawry.arc((15, 95, 55, 135), 0, 360, fill = 0) - drawry.chord((15, 155, 55, 195), 0, 360, fill =1) - epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRYimage)) - time.sleep(2) - - print("3.read bmp file") - HBlackimage = Image.open('../pic/2in13bc-b.bmp') - HRYimage = Image.open('../pic/2in13bc-ry.bmp') - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - print("4.read bmp file on window") - blackimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126 - redimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126 - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (10,10)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_2in7_test.py b/Jetson Nano/python2/examples/epd_2in7_test.py deleted file mode 100644 index 24a7c43..0000000 --- a/Jetson Nano/python2/examples/epd_2in7_test.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in7 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in7 Demo") - - epd = epd2in7.EPD() - print("init and Clear") - epd.init() - epd.Clear(0xFF) - - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(Himage) - draw.text((10, 0), 'hello world', font = font24, fill = 0) - draw.text((150, 0), u'微雪电子', font = font24, fill = 0) - draw.line((20, 50, 70, 100), fill = 0) - draw.line((70, 50, 20, 100), fill = 0) - draw.rectangle((20, 50, 70, 100), outline = 0) - draw.line((165, 50, 165, 100), fill = 0) - draw.line((140, 75, 190, 75), fill = 0) - draw.arc((140, 50, 190, 100), 0, 360, fill = 0) - draw.rectangle((80, 50, 130, 100), fill = 0) - draw.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - Limage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - draw = ImageDraw.Draw(Limage) - draw.text((2, 0), 'hello world', font = font18, fill = 0) - draw.text((20, 50), u'微雪电子', font = font18, fill = 0) - draw.line((10, 90, 60, 140), fill = 0) - draw.line((60, 90, 10, 140), fill = 0) - draw.rectangle((10, 90, 60, 140), outline = 0) - draw.line((95, 90, 95, 140), fill = 0) - draw.line((70, 115, 120, 115), fill = 0) - draw.arc((70, 90, 120, 140), 0, 360, fill = 0) - draw.rectangle((10, 150, 60, 200), fill = 0) - draw.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(Limage)) - time.sleep(2) - - print("3.read bmp file") - Himage = Image.open('../pic/2in7.bmp') - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("4.read bmp file on window") - Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - Himage2.paste(bmp, (50,10)) - epd.display(epd.getbuffer(Himage2)) - time.sleep(2) - - print("Clear...") - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_2in9bc_test.py b/Jetson Nano/python2/examples/epd_2in9bc_test.py deleted file mode 100644 index b16809d..0000000 --- a/Jetson Nano/python2/examples/epd_2in9bc_test.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in9bc -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in9bc Demo") - - epd = epd2in9bc.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("Drawing") - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - HBlackimage = Image.new('1', (epd.height, epd.width), 255) # 298*126 - HRYimage = Image.new('1', (epd.height, epd.width), 255) # 298*126 ryimage: red or yellow image - drawblack = ImageDraw.Draw(HBlackimage) - drawry = ImageDraw.Draw(HRYimage) - drawblack.text((10, 0), 'hello world', font = font24, fill = 0) - drawblack.text((10, 20), '2.9inch e-Paper bc', font = font24, fill = 0) - drawblack.text((150, 0), u'微雪电子', font = font24, fill = 0) - drawblack.line((20, 50, 70, 100), fill = 0) - drawblack.line((70, 50, 20, 100), fill = 0) - drawblack.rectangle((20, 50, 70, 100), outline = 0) - drawry.line((165, 50, 165, 100), fill = 0) - drawry.line((140, 75, 190, 75), fill = 0) - drawry.arc((140, 50, 190, 100), 0, 360, fill = 0) - drawry.rectangle((80, 50, 130, 100), fill = 0) - drawry.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - LBlackimage = Image.new('1', (epd.width, epd.height), 255) # 126*298 - LRYimage = Image.new('1', (epd.width, epd.height), 255) # 126*298 - drawblack = ImageDraw.Draw(LBlackimage) - drawry = ImageDraw.Draw(LRYimage) - - drawblack.text((2, 0), 'hello world', font = font18, fill = 0) - drawblack.text((2, 20), '2.9inch epd bc', font = font18, fill = 0) - drawblack.text((20, 50), u'微雪电子', font = font18, fill = 0) - drawblack.line((10, 90, 60, 140), fill = 0) - drawblack.line((60, 90, 10, 140), fill = 0) - drawblack.rectangle((10, 90, 60, 140), outline = 0) - drawry.line((95, 90, 95, 140), fill = 0) - drawry.line((70, 115, 120, 115), fill = 0) - drawry.arc((70, 90, 120, 140), 0, 360, fill = 0) - drawry.rectangle((10, 150, 60, 200), fill = 0) - drawry.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRYimage)) - time.sleep(2) - - print("3.read bmp file") - HBlackimage = Image.open('../pic/2in9bc-b.bmp') - HRYimage = Image.open('../pic/2in9bc-ry.bmp') - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - print("4.read bmp file on window") - blackimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126 - redimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126 - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (50,10)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_2in9d_test.py b/Jetson Nano/python2/examples/epd_2in9d_test.py deleted file mode 100644 index 34f5f71..0000000 --- a/Jetson Nano/python2/examples/epd_2in9d_test.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in9d -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in9d Demo") - - epd = epd2in9d.EPD() - print("init and Clear") - epd.init() - epd.Clear(0xFF) - - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(Himage) - draw.text((10, 0), 'hello world', font = font24, fill = 0) - draw.text((10, 20), '2.9inch e-Paper d', font = font24, fill = 0) - draw.text((150, 0), u'微雪电子', font = font24, fill = 0) - draw.line((20, 50, 70, 100), fill = 0) - draw.line((70, 50, 20, 100), fill = 0) - draw.rectangle((20, 50, 70, 100), outline = 0) - draw.line((165, 50, 165, 100), fill = 0) - draw.line((140, 75, 190, 75), fill = 0) - draw.arc((140, 50, 190, 100), 0, 360, fill = 0) - draw.rectangle((80, 50, 130, 100), fill = 0) - draw.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - Limage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - draw = ImageDraw.Draw(Limage) - draw.text((2, 0), 'hello world', font = font18, fill = 0) - draw.text((2, 20), '2.9inch epd d', font = font18, fill = 0) - draw.text((20, 50), u'微雪电子', font = font18, fill = 0) - draw.line((10, 90, 60, 140), fill = 0) - draw.line((60, 90, 10, 140), fill = 0) - draw.rectangle((10, 90, 60, 140), outline = 0) - draw.line((95, 90, 95, 140), fill = 0) - draw.line((70, 115, 120, 115), fill = 0) - draw.arc((70, 90, 120, 140), 0, 360, fill = 0) - draw.rectangle((10, 150, 60, 200), fill = 0) - draw.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(Limage)) - time.sleep(2) - - print("3.read bmp file") - Himage = Image.open('../pic/2in9d.bmp') - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("4.read bmp file on window") - Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - Himage2.paste(bmp, (50,10)) - epd.display(epd.getbuffer(Himage2)) - time.sleep(2) - - # # partial update - print("5.show time...") - epd.init() - epd.Clear(0xFF) - - time_image = Image.new('1', (epd.width, epd.height), 255) - time_draw = ImageDraw.Draw(time_image) - num = 0 - while (True): - time_draw.rectangle((10, 10, 120, 50), fill = 255) - time_draw.text((10, 10), time.strftime('%H:%M:%S'), font = font24, fill = 0) - newimage = time_image.crop([10, 10, 120, 50]) - time_image.paste(newimage, (10,10)) - epd.display(epd.getbuffer(time_image)) - num = num + 1 - if(num == 10): - break - - print("Clear...") - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_4in2_test.py b/Jetson Nano/python2/examples/epd_4in2_test.py deleted file mode 100644 index 6343f58..0000000 --- a/Jetson Nano/python2/examples/epd_4in2_test.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd4in2 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd4in2 Demo") - - epd = epd4in2.EPD() - print("init and Clear") - epd.init() - epd.Clear() - - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - Himage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - draw = ImageDraw.Draw(Himage) - draw.text((10, 0), 'hello world', font = font24, fill = 0) - draw.text((10, 20), '4.2inch e-Paper', font = font24, fill = 0) - draw.text((150, 0), u'微雪电子', font = font24, fill = 0) - draw.line((20, 50, 70, 100), fill = 0) - draw.line((70, 50, 20, 100), fill = 0) - draw.rectangle((20, 50, 70, 100), outline = 0) - draw.line((165, 50, 165, 100), fill = 0) - draw.line((140, 75, 190, 75), fill = 0) - draw.arc((140, 50, 190, 100), 0, 360, fill = 0) - draw.rectangle((80, 50, 130, 100), fill = 0) - draw.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - Limage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(Limage) - draw.text((2, 0), 'hello world', font = font18, fill = 0) - draw.text((2, 20), '4.2inch epd', font = font18, fill = 0) - draw.text((20, 50), u'微雪电子', font = font18, fill = 0) - draw.line((10, 90, 60, 140), fill = 0) - draw.line((60, 90, 10, 140), fill = 0) - draw.rectangle((10, 90, 60, 140), outline = 0) - draw.line((95, 90, 95, 140), fill = 0) - draw.line((70, 115, 120, 115), fill = 0) - draw.arc((70, 90, 120, 140), 0, 360, fill = 0) - draw.rectangle((10, 150, 60, 200), fill = 0) - draw.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(Limage)) - time.sleep(2) - - print("3.read bmp file") - Himage = Image.open('../pic/4in2.bmp') - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("4.read bmp file on window") - Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - Himage2.paste(bmp, (50,10)) - epd.display(epd.getbuffer(Himage2)) - time.sleep(2) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_4in2bc_test.py b/Jetson Nano/python2/examples/epd_4in2bc_test.py deleted file mode 100644 index ad1abda..0000000 --- a/Jetson Nano/python2/examples/epd_4in2bc_test.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd4in2bc -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd4in2bc Demo") - - epd = epd4in2bc.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("Drawing") - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - HBlackimage = Image.new('1', (epd.width, epd.height), 255) # 298*126 - HRYimage = Image.new('1', (epd.width, epd.height), 255) # 298*126 ryimage: red or yellow image - drawblack = ImageDraw.Draw(HBlackimage) - drawry = ImageDraw.Draw(HRYimage) - drawblack.text((10, 0), 'hello world', font = font24, fill = 0) - drawblack.text((10, 20), '4.2inch e-Paper bc', font = font24, fill = 0) - drawblack.text((150, 0), u'微雪电子', font = font24, fill = 0) - drawblack.line((20, 50, 70, 100), fill = 0) - drawblack.line((70, 50, 20, 100), fill = 0) - drawblack.rectangle((20, 50, 70, 100), outline = 0) - drawry.line((165, 50, 165, 100), fill = 0) - drawry.line((140, 75, 190, 75), fill = 0) - drawry.arc((140, 50, 190, 100), 0, 360, fill = 0) - drawry.rectangle((80, 50, 130, 100), fill = 0) - drawry.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - LBlackimage = Image.new('1', (epd.height, epd.width), 255) # 126*298 - LRYimage = Image.new('1', (epd.height, epd.width), 255) # 126*298 - drawblack = ImageDraw.Draw(LBlackimage) - drawry = ImageDraw.Draw(LRYimage) - - drawblack.text((2, 0), 'hello world', font = font18, fill = 0) - drawblack.text((2, 20), '4.2inch epd bc', font = font18, fill = 0) - drawblack.text((20, 50), u'微雪电子', font = font18, fill = 0) - drawblack.line((10, 90, 60, 140), fill = 0) - drawblack.line((60, 90, 10, 140), fill = 0) - drawblack.rectangle((10, 90, 60, 140), outline = 0) - drawry.line((95, 90, 95, 140), fill = 0) - drawry.line((70, 115, 120, 115), fill = 0) - drawry.arc((70, 90, 120, 140), 0, 360, fill = 0) - drawry.rectangle((10, 150, 60, 200), fill = 0) - drawry.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRYimage)) - time.sleep(2) - - print("3.read bmp file") - HBlackimage = Image.open('../pic/4in2b-b.bmp') - HRYimage = Image.open('../pic/4in2b-r.bmp') - # HBlackimage = Image.open('../pic/4in2c-b.bmp') - # HRYimage = Image.open('../pic/4in2c-y.bmp') - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - print("4.read bmp file on window") - blackimage1 = Image.new('1', (epd.width, epd.height), 255) # 298*126 - redimage1 = Image.new('1', (epd.width, epd.height), 255) # 298*126 - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (50,10)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_7in5_test.py b/Jetson Nano/python2/examples/epd_7in5_test.py deleted file mode 100644 index eaf11ec..0000000 --- a/Jetson Nano/python2/examples/epd_7in5_test.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd7in5 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd7in5 Demo") - - epd = epd7in5.EPD() - print("init and Clear") - epd.init() - epd.Clear() - - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - Himage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - draw = ImageDraw.Draw(Himage) - draw.text((10, 0), 'hello world', font = font24, fill = 0) - draw.text((10, 20), '7.5inch e-Paper', font = font24, fill = 0) - draw.text((150, 0), u'微雪电子', font = font24, fill = 0) - draw.line((20, 50, 70, 100), fill = 0) - draw.line((70, 50, 20, 100), fill = 0) - draw.rectangle((20, 50, 70, 100), outline = 0) - draw.line((165, 50, 165, 100), fill = 0) - draw.line((140, 75, 190, 75), fill = 0) - draw.arc((140, 50, 190, 100), 0, 360, fill = 0) - draw.rectangle((80, 50, 130, 100), fill = 0) - draw.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - Limage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(Limage) - draw.text((2, 0), 'hello world', font = font18, fill = 0) - draw.text((2, 20), '7.5inch epd', font = font18, fill = 0) - draw.text((20, 50), u'微雪电子', font = font18, fill = 0) - draw.line((10, 90, 60, 140), fill = 0) - draw.line((60, 90, 10, 140), fill = 0) - draw.rectangle((10, 90, 60, 140), outline = 0) - draw.line((95, 90, 95, 140), fill = 0) - draw.line((70, 115, 120, 115), fill = 0) - draw.arc((70, 90, 120, 140), 0, 360, fill = 0) - draw.rectangle((10, 150, 60, 200), fill = 0) - draw.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(Limage)) - time.sleep(2) - - print("3.read bmp file") - Himage = Image.open('../pic/7in5.bmp') - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("4.read bmp file on window") - Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - Himage2.paste(bmp, (50,10)) - epd.display(epd.getbuffer(Himage2)) - time.sleep(2) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/examples/epd_7in5bc_test.py b/Jetson Nano/python2/examples/epd_7in5bc_test.py deleted file mode 100644 index 82153b4..0000000 --- a/Jetson Nano/python2/examples/epd_7in5bc_test.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd7in5bc -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd7in5bc Demo") - - epd = epd7in5bc.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("Drawing") - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - HBlackimage = Image.new('1', (epd.width, epd.height), 255) # 298*126 - HRYimage = Image.new('1', (epd.width, epd.height), 255) # 298*126 ryimage: red or yellow image - drawblack = ImageDraw.Draw(HBlackimage) - drawry = ImageDraw.Draw(HRYimage) - drawblack.text((10, 0), 'hello world', font = font24, fill = 0) - drawblack.text((10, 20), '7.5inch e-Paper bc', font = font24, fill = 0) - drawblack.text((150, 0), u'微雪电子', font = font24, fill = 0) - drawblack.line((20, 50, 70, 100), fill = 0) - drawblack.line((70, 50, 20, 100), fill = 0) - drawblack.rectangle((20, 50, 70, 100), outline = 0) - drawry.line((165, 50, 165, 100), fill = 0) - drawry.line((140, 75, 190, 75), fill = 0) - drawry.arc((140, 50, 190, 100), 0, 360, fill = 0) - drawry.rectangle((80, 50, 130, 100), fill = 0) - drawry.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - LBlackimage = Image.new('1', (epd.height, epd.width), 255) # 126*298 - LRYimage = Image.new('1', (epd.height, epd.width), 255) # 126*298 - drawblack = ImageDraw.Draw(LBlackimage) - drawry = ImageDraw.Draw(LRYimage) - - drawblack.text((2, 0), 'hello world', font = font18, fill = 0) - drawblack.text((2, 20), '7.5inch epd bc', font = font18, fill = 0) - drawblack.text((20, 50), u'微雪电子', font = font18, fill = 0) - drawblack.line((10, 90, 60, 140), fill = 0) - drawblack.line((60, 90, 10, 140), fill = 0) - drawblack.rectangle((10, 90, 60, 140), outline = 0) - drawry.line((95, 90, 95, 140), fill = 0) - drawry.line((70, 115, 120, 115), fill = 0) - drawry.arc((70, 90, 120, 140), 0, 360, fill = 0) - drawry.rectangle((10, 150, 60, 200), fill = 0) - drawry.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRYimage)) - time.sleep(2) - - print("3.read bmp file") - HBlackimage = Image.open('../pic/7in5b-b.bmp') - HRYimage = Image.open('../pic/7in5b-r.bmp') - # HBlackimage = Image.open('../pic/7in5c-b.bmp') - # HRYimage = Image.open('../pic/7in5c-r.bmp') - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - print("4.read bmp file on window") - blackimage1 = Image.new('1', (epd.width, epd.height), 255) # 298*126 - redimage1 = Image.new('1', (epd.width, epd.height), 255) # 298*126 - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (50,10)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python2/lib/epd1in54.py b/Jetson Nano/python2/lib/epd1in54.py deleted file mode 100644 index ffd2815..0000000 --- a/Jetson Nano/python2/lib/epd1in54.py +++ /dev/null @@ -1,254 +0,0 @@ -# /***************************************************************************** -# * | File : epd1in54.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V3.1 -# * | Date : 2019-06-18 -# # | Info : python2 demo -# ----------------------------------------------------------------------------- -# V3.1(2019-06-18): -# 2.remove commands define: -# #define PANEL_SETTING 0x00 -# #define POWER_SETTING 0x01 -# #define POWER_OFF 0x02 -# #define POWER_OFF_SEQUENCE_SETTING 0x03 -# #define POWER_ON 0x04 -# #define POWER_ON_MEASURE 0x05 -# #define BOOSTER_SOFT_START 0x06 -# #define DEEP_SLEEP 0x07 -# #define DATA_START_TRANSMISSION_1 0x10 -# #define DATA_STOP 0x11 -# #define DISPLAY_REFRESH 0x12 -# #define DATA_START_TRANSMISSION_2 0x13 -# #define PLL_CONTROL 0x30 -# #define TEMPERATURE_SENSOR_COMMAND 0x40 -# #define TEMPERATURE_SENSOR_CALIBRATION 0x41 -# #define TEMPERATURE_SENSOR_WRITE 0x42 -# #define TEMPERATURE_SENSOR_READ 0x43 -# #define VCOM_AND_DATA_INTERVAL_SETTING 0x50 -# #define LOW_POWER_DETECTION 0x51 -# #define TCON_SETTING 0x60 -# #define TCON_RESOLUTION 0x61 -# #define SOURCE_AND_GATE_START_SETTING 0x62 -# #define GET_STATUS 0x71 -# #define AUTO_MEASURE_VCOM 0x80 -# #define VCOM_VALUE 0x81 -# #define VCM_DC_SETTING_REGISTER 0x82 -# #define PROGRAM_MODE 0xA0 -# #define ACTIVE_PROGRAM 0xA1 -# #define READ_OTP_DATA 0xA2 -# ----------------------------------------------------------------------------- -# V3.0(2018-11-01): -# # 1.Remove: -# digital_write(self, pin, value) -# digital_read(self, pin) -# delay_ms(self, delaytime) -# set_lut(self, lut) -# self.lut = self.lut_full_update -# * 2.Change: -# display_frame -> TurnOnDisplay -# set_memory_area -> SetWindow -# set_memory_pointer -> SetCursor -# * 3.How to use -# epd = epd1in54.EPD() -# epd.init(epd.lut_full_update) -# image = Image.new('1', (epd1in54.EPD_WIDTH, epd1in54.EPD_HEIGHT), 255) -# ... -# drawing ...... -# ... -# epd.display(getbuffer(image)) -# ******************************************************************************/ -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - -import epdconfig - -# Display resolution -EPD_WIDTH = 200 -EPD_HEIGHT = 200 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - lut_full_update = [ - 0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x22, 0x22, - 0x66, 0x69, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88, - 0x00, 0x00, 0x00, 0x00, 0xF8, 0xB4, 0x13, 0x51, - 0x35, 0x51, 0x51, 0x19, 0x01, 0x00 - ] - - lut_partial_update = [ - 0x10, 0x18, 0x18, 0x08, 0x18, 0x18, 0x08, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x13, 0x14, 0x44, 0x12, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - ] - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - epdconfig.digital_write(self.reset_pin, 0) # module reset - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - print("e-Paper busy") - while(epdconfig.digital_read(self.busy_pin) == 1): # 0: idle, 1: busy - epdconfig.delay_ms(100) - print("e-Paper busy release") - - def TurnOnDisplay(self): - self.send_command(0x22) # DISPLAY_UPDATE_CONTROL_2 - self.send_data(0xC4) - self.send_command(0x20) # MASTER_ACTIVATION - self.send_command(0xFF) # TERMINATE_FRAME_READ_WRITE - - self.ReadBusy() - - def SetWindow(self, x_start, y_start, x_end, y_end): - self.send_command(0x44) # SET_RAM_X_ADDRESS_START_END_POSITION - # x point must be the multiple of 8 or the last 3 bits will be ignored - self.send_data((x_start >> 3) & 0xFF) - self.send_data((x_end >> 3) & 0xFF) - self.send_command(0x45) # SET_RAM_Y_ADDRESS_START_END_POSITION - self.send_data(y_start & 0xFF) - self.send_data((y_start >> 8) & 0xFF) - self.send_data(y_end & 0xFF) - self.send_data((y_end >> 8) & 0xFF) - - def SetCursor(self, x, y): - self.send_command(0x4E) # SET_RAM_X_ADDRESS_COUNTER - # x point must be the multiple of 8 or the last 3 bits will be ignored - self.send_data((x >> 3) & 0xFF) - - self.send_command(0x4F) # SET_RAM_Y_ADDRESS_COUNTER - self.send_data(y & 0xFF) - self.send_data((y >> 8) & 0xFF) - # self.ReadBusy() - - def init(self, lut): - if (epdconfig.module_init() != 0): - return -1 - # EPD hardware init start - self.reset() - - self.send_command(0x01) # DRIVER_OUTPUT_CONTROL - self.send_data((EPD_HEIGHT - 1) & 0xFF) - self.send_data(((EPD_HEIGHT - 1) >> 8) & 0xFF) - self.send_data(0x00) # GD = 0 SM = 0 TB = 0 - - self.send_command(0x0C) # BOOSTER_SOFT_START_CONTROL - self.send_data(0xD7) - self.send_data(0xD6) - self.send_data(0x9D) - - self.send_command(0x2C) # WRITE_VCOM_REGISTER - self.send_data(0xA8) # VCOM 7C - - self.send_command(0x3A) # SET_DUMMY_LINE_PERIOD - self.send_data(0x1A) # 4 dummy lines per gate - - self.send_command(0x3B) # SET_GATE_TIME - self.send_data(0x08) # 2us per line - - self.send_command(0x11) # DATA_ENTRY_MODE_SETTING - self.send_data(0x03) # X increment Y increment - - # set the look-up table register - self.send_command(0x32) - for i in range(0, len(lut)): - self.send_data(lut[i]) - # EPD hardware init end - return 0 - - def getbuffer(self, image): - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - if(imwidth == self.width and imheight == self.height): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, image): - if (image == None): - return - - self.SetWindow(0, 0, self.width, self.height) - for j in range(0, self.height): - self.SetCursor(0, j) - self.send_command(0x24) - for i in range(0, self.width / 8): - self.send_data(image[i + j * (self.width / 8)]) - self.TurnOnDisplay() - - def Clear(self, color): - # self.SetWindow(0, 0, self.width - 1, self.height - 1) - # send the color data - self.SetWindow(0, 0, self.width, self.height) - for j in range(0, self.height): - self.SetCursor(0, j) - self.send_command(0x24) - for i in range(0, self.width / 8): - self.send_data(color) - self.TurnOnDisplay() - - def sleep(self): - self.send_command(0x10) # DEEP_SLEEP_MODE - self.send_data(0x01) - - epdconfig.module_exit() - -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd1in54.pyc b/Jetson Nano/python2/lib/epd1in54.pyc deleted file mode 100644 index 36b73c0f2e6c8fbacbd1cd3a16e1701e73ea22f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5136 zcmb_g&2JmW6@Rm&C{iDmWQmp(TaN0a3HuQ_DVnrs-8iu2T0WR@R(4ezbr&>uC67&! z6n7a@fdm9lVHiCYz4XviETNq`}gG7zit-q*QNh2hrb`7#1}zAd`21~_rQ2^&nWdI%t<&RVP1YCav*Z|9_mKc zD+SE4U*liZegQV2uxqzgQ{m@Pzk(9~%!ot~3xPr*_aGCz%BS$WepmuuLBdh}iV~J2 z9Mf-H!imf`Dd8yzrzD(~a7HPZ)6^Ejw$2L`oRx4+zjB7j3OR;{QAjzmQMM+A^KoPg}~;1hpqNOdcj<{r0tMH?FVURS3r3$V@#0#YHMK4C~EK|;G_lUgHq(y>Y8Q%}V)j2gAwU^~`5 z@F&n*K{+0OE~)Nu6HLrGVrI=`ztjmoONzytsH86YO)U0|Y{53bq2_R6RgDb(?ZqmWFj7_Ka60f%UoOT%Fx34RB@k<`ul2rj2zuZQ=X>l)=WT6=FT(Kv{!URg z!aOGEE~r!K&PH$Dsk+^|Xr>wRuoMkF&Tx%pEmWaHt@8XupdY ze}_c7O!75Ig--1=H27tbdA3oD6CNF&#M|9Y^TXzoU^6eno(~4rA)IJQMw{#uG>kka2lw4!!Dz^gQk-}nR5b!x zDytCLYvj01&dXD6&auqZkAC7n~)}v&@HpAAF z$Ed^%(*h*RrVK=9K;bJ?a8MLg9-)(=`jP-LsMRCpP_R zw-dKIA7jqImAtY?!!?jmb{<8I{y8MOSbU&oq`Dt?vU-1B_C58GJX>*W7AbS*O|yZa>lNk|?yAy+*hNPM z36~r&{@H(${Db6=B;P0b6A1&feTC$wB$}vjqwEhrDs&Ndbu&}jZiU@OqzR8t*UrQr zUi5laI<@9jq}g~QYPu*z1zbxvQHQcGb}0G@6RS`0H(mh|bK2y+F?dtiEaFHFf)oQ) zrsO8gIaBu3->5PTP=EU^{0(T~itisaPs-$s%*_#9!?+9A0=$GYn}B(um)BRar+F^K@Gkp`0SCPE#~c!jaD>cTX)NZsNc&CJ(Y9s5bEi4;+@FZ(IGIp!BpC$V)jGbZW# z&!-e$-w?dh@qqXkV_X7nKZ%rSv~c5J;0%s)p^eeqZrA#L`k=d+FdNX8V7t|9)mx2L zNACl>?Vb!=-)_5Cf<749wih*G|5eK5Q&ZP!Mo)SJ=7d2LI$-_HsPh?w#BYEIGKwku zCd_$c7qe#8J7eA(@TP!Z%DOr@4@v6ae?^5CvD_kL!U9++A@bMr1@?ZRO% z%LY3TatBEc&FIIk*TK4biCe2!R$I-;UqWrT+q$3rGTYKi-REn_Wqph{{#zjGRge5{ zvj^q)+nXK~x?JdQVD-(%w_M&khk!GU`+Lb$hPcy*G_d>*3=Puo(uZ?^w&ENy_@x`5 zXni!m*=+!z?c)sG`#66uGYk6%5OwD40B1x4ce(9YfO^q^ic9TSQ0Xi$kEOm}>il&yVBpyR@YF`e6tL`1F@qkX0@dmaf znL8`$S@*m@VSY^Q<3<#gn+m3=jgI0jJp?728Gqcus(^ zX1CD@x@|m^qJ-Bp+uBGrEgrzG`I{Fh6M6Mzw@=HgGA#If{QEy9;g#)Q0vS5Ba{uGM zDSV8S_fX>Rf)q@txM1{`AN(y9OL_bX_&Z)2E4@}aQ<^A^JL!rm(e#TXyysQm$<|h+ TE;(%8e;acZ%86XT6ukcenlU0) diff --git a/Jetson Nano/python2/lib/epd1in54_V2.pyc b/Jetson Nano/python2/lib/epd1in54_V2.pyc deleted file mode 100644 index 2daa315ce9ccf1416e23096b6b807edd50fdd56c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5294 zcmdT|TW=f36+W}1c#~);u_Rk{6(~g-Feqv#t(~HUn-;QM%MWIZm17}l-385E$>Weq ziMy()Km-CfHPWL0pik{{Ui#LDz9+w-f1?HZn0()v<&vy?QGx_TMeX64IkRWZea^7( zuX=6o4z!nUJOm@K2C<0ENB1P^((rBZd5;x^cS;CSc6$#6V zR3)q^Qj@T%$gG4lMdl=&RirNAoFZo=tSd4v{#N4*L}^nnJ|3QHc#>ZMq#_TE9E${= z;swQviq9xsQoO8qMbfGwHA!a`!OjAskZ-e5C&Ma0v>@vhxV%NY4vcY@nDn@Z_N zNt6crHcn~BjcZCE8n$(|0(AYot@m}FgZqccQNI4#R=&QS=qz`G^@Hu38+SI-8H^s; zFny5LviZ&HH*aj-(aj!2cJD!|qNYWVlc=-Xz_%z!mVjNnc&TIWUxN5=+4#!k;O>tu z?jNNTBM5A4(;)ah@MI1^%v|=Vn%uOE1vM>u zK{u0hPw8rSYTUFmzeb}4B9_WGsG?6oO1Fe|&!(+T@ThOo$fumDRv2|!M?p7HtN09) zQ(1(&swXc3$;@%q)Qx-Ej4(dAIc{N)N7}SGoCP$uMiwZ_v5`G!JY^(jHyBa%ChMlt zmO3^lk!tHN5Yr)JLzPeVtyBE|Q5rQUnX0P6+3t0_tvEcD+Vp!8#bJ=W^ft$g4uR%p z&4T%Qn!}x0Y&=tQ=l%)J)#KdxnVS1&NgXT8cnDi*>r|T3bgC)exXQtln%tcaxof=t z3%cSBXUqlj(m2&~)vsU) z>gPi>09E5a)gBE%aY~Z{XTx@?H9gX_-vhM&Ay@-wFtB~rBL5u03g>9*({mx-O zemCB*$v*OX6BC&dbtGxsYoGAnH=@KB*yo#4f_|G);&!W_zWZWD{sPrprGc3dkslPK zzswli8XKP&90E5G(=&MFs;OyLhPejE^NfaVHgL5m8;qBMRcUhB6s0^#nPO1MDPT~| z2hZJfiotjQ2DM2BQxc5#0qfa(8Qz)82cXpR0VroC2lM#=%ceG6n4~O8XfB$##R_Ji&E>s{|hrXu|xB*cw5TfRUk{nLF`jG3@rj!%n2fwom?= zO5@D>ib=&>We0E<-wCUNn3qklQ1fcYsG6sFh0J1hxg5)8#&aj;^{^mcR=;a_l3f4> zRbEO4o04iN;jA7L8}}~D(38OrCJ0(omvDw`+&e2n?cfmAI71oL2S1nXgEiT9!OEal z4{+b6eGSkZq7`7yfUG^*NcCIsUgWcy__U|1N8jN(zU)p=ir(&ZdVPoq5f$17&=)pU zsx)eN|Mys&uwxNea>cBgC3lQ+PfDeh`6JjP;?NXi_VHwin32Urm;<_IO_Wgs6qw+@ z@nl$(A-Y%$kq9Egk{rV@YGIy9|CD3xalyt7^+Xz6Fwh?qm~Z3WZ)I4P!Fx0b-qooa zGOWlkcmbAW*OL`g2Qv6XjvT7Uu^41E z$h54ue&n*QnuArdeNZ#oG2#=Yw88eEX|>+dMe6pqwCCRJ_3ekf7_Fv@tB*+Ln!8ay zwQWo@P+X*GR58A?MlAjv*0|Q(ei$jz>ER%Mg>UF$HmDk#w%gi^^y+p0a5tUDw9W+G zUfgr>$kX3;-DQCL+pg>X^(wG$2T>Y$;LKz9lXj;&#m5cJM+75m#DJ~0e z99)Ka%9KYmq8_|6K|t9qh^q&$kLm%U7a@V#;NEph7SF9{iMWMGeAAT(oL|o^5j3mX zs@aPpS54`j=a&ip4K7(DcopDOmgPpF>tFr~G@}w9j^NG30JY0{&zLEjKl`b=wBw#p7LqFy1;dLN&h;&Vt1bTif!6D8uOb>&`&X+ zECWnAZsb7k|26@>b%V0lO&IhawBv~ccuE`3%yQLyqCLy+A}AeM--`;fr8kYH<#pNB zWDSAw&4YCsKl0>_R5Y;e$CK0FL>QJyCyMqzBf?*Kc*fVg1~<)qR*75PC#l6XaC_dV*OPD_JaP839bB;HLoNI-}ULf8p`5SYE@Ed>5c( zs?}> (x % 8)) - return buf - - def display(self, blackimage, redimage): - # send black data - if (blackimage != None): - self.send_command(0x10) # DATA_START_TRANSMISSION_1 - for i in range(0, self.width * self.height / 8): - temp = 0x00 - for bit in range(0, 4): - if (blackimage[i] & (0x80 >> bit) != 0): - temp |= 0xC0 >> (bit * 2) - self.send_data(temp) - temp = 0x00 - for bit in range(4, 8): - if (blackimage[i] & (0x80 >> bit) != 0): - temp |= 0xC0 >> ((bit - 4) * 2) - self.send_data(temp) - - # send red data - if (redimage != None): - self.send_command(0x13) # DATA_START_TRANSMISSION_2 - for i in range(0, self.width * self.height / 8): - self.send_data(redimage[i]) - - self.send_command(0x12) # DISPLAY_REFRESH - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) # DATA_START_TRANSMISSION_1 - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - self.send_data(0xFF) - - self.send_command(0x13) # DATA_START_TRANSMISSION_2 - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - - self.send_command(0x12) # DISPLAY_REFRESH - self.ReadBusy() - - def sleep(self): - self.send_command(0x50) # VCOM_AND_DATA_INTERVAL_SETTING - self.send_data(0x17) - self.send_command(0x82) # to solve Vcom drop - self.send_data(0x00) - self.send_command(0x01) # power setting - self.send_data(0x02) # gate switch to external - self.send_data(0x00) - self.send_data(0x00) - self.send_data(0x00) - self.ReadBusy() - - self.send_command(0x02) # power off - - epdconfig.module_exit() - -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd1in54b.pyc b/Jetson Nano/python2/lib/epd1in54b.pyc deleted file mode 100644 index 846bbee994e23a45fc7ee6eab2529c9a4350dccc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5943 zcmdT|-A`QC5udZWEW3OdV?GRa?5u5)Y-H7jxUHKi4Uxe$t`tfxZi%g;?XvfRkG&tT z_YxohDUGXE>O)nv`76@;v5&3#=%@Cr&z1To^tDy``^~v~cL8IdZ)NumGxwaCbLQjB z%-Qt6`g^*5n_I3({Flc65AcLH0epOoR7D;ENy#IlFeQFk{4Vh`@^g`AA`c&dHnLdE zg2#T1zj^xtXhdOm7iJUT1EBBV3Hwqa0mMR}P{x#hO1w~-ZzwV%-eU1hL`B5_@Ii3M z44&}&0FlTOBfBD{l;UZ{Gm3X9o>jbC@tj0?MS3LaRRsGLgeK+A7yBtN4-l;Tl}3Hl zu0`FTyu}Blh5Pe5(hR~NDy`dk#Au$K(E*}2N1<;MC>#7&e+wr-|{^X541KJJ~&$YT799xKA~#A5_abrCO+7@o2~*o?|@1H8qYt0usAp$n+ccR2biU5@UP_B8l_; z#&G(>ByIgNvTI}w^ga_gtHFe-HAT-mU8!M_J5pV}v&58SWUA`nx^-%=>_kD4J5xpV zXjB@tTDk6@Kxqa~7}Whz%<_0BCAl`AB#C_&1iW`|Zu{+hPKNss=TB48oYePlAYvRo-N?z3 zp8?m~b>~o_8B~LE7<9xpUDJy1W>EG$O?rcPd#bRe zo*vlmU;_d0Sn)1%(F~eOOKF-?kN9=GLEe6%>Qk}p>k_r z2`X4|ZPO<226#ENp&S~YK$)YCNY zye$Aa?`mGYLh>rXHG&C%qWWP3n3j`fxxN;7=Sea&tD8~j6CA-w9VE4tU@KZ?_-<{g zjlR=y4j65f#%4V#0y!qjF^RHPQr^neQ&N}7g+w=M#*To8!{m=(`M(Pjbr?(NynO?( z!(nfdd<#IkVUKR|E)X2@(3BP!TCW-Slbys=+aq3qqVOE!j9$!WIRoNgPzleG?T{bT z1FgfV2lc0*T={vXXZ2}XnrJ>#vPi!m0YeJ0BtwxvyX%f-Ot^X!6Yk_48i4?JuwEu$ zpR_gs9(SV11G(+J>{~IXr;c;LkWUEgvL_)h(wh(%=}QQV^d|&H&U6y{)@hG`XP|T1 z*@S?O@h-7*V95T9MP}Q$BJ+miIuhn#*FG_pTs!tRVhaR}7&}SuEKKFfxqb8yVh9F-gYFpOHP(hcx~Bla%abWDkiO zXJ>U{vW1qSf8pod0?B4#=zqwb)wU?Fcrl8;9Om+9{a#{Ae zW&7jSTU>MvD%L&O%gHYCK47=3reqwqNY?PLWEZ>Dw{E%N^V9)7&p2Wp1E5By2R=-{ zxAB$WyR`8oDh7^NkuflDzXsGuK!p^U3Td4Cweng}sBMN(VI?Sph|A&%^hwZ++-1Xl8tA3u$K~o~ zaJSiPG_^#mHk!4vn^J9{bzm+l(uJ-^WWli9r(X6~HdiApTYOWhHR_E@qY6P9=QVfn zq3dnU-F0+@b-Nu@L)Cjn;dT*Ij>&i20T#uAt3mVkAi^;+nTzQGGhi;8w7Hz>Lme7T zjhb7glExU17$1$hD$I=FLLO(Z{5$qMyKFWp|Bwh*4mecv31J2?nU)c4TmH;Y#3+Jr zdp4fQWXP80mc}KbIjy0AkevPiQ@O|@0In-&o{VdmRmDt{zLCQ_0}a zo6qd>?V}|>?~t64v9|Q*vhnJw5O5M-vF@!;|UDyX& za?2aHj0)A`(~*8%Ce&idZeiZ?_Tgeu!$4EZ=Y01U0`|<7ow;T9(vzXFIp3%U9hEc* zVy&r~+FY?^O4Jx$sg^5GU08A*6huexY*`f<1+{e-vi2ms4g)woZGQq9vdRkrtlvzS zthPJjz#VqU45!`57*b?~Yf>@ls-gD>ATCF=!fiV4i}|({bnS2}w7O)?XEe79$hiJ) zTu)lhxZ!>0mEwjDiQD)zkL@CulAf6o^0l@PC66iGyGZaF0e|H2*xGxq6I>;@MleC}%0|O`i&MT$@I8X}38n$s z?pN%nAGbVA6*7gKmNog@Eu`~~PdcB=XZ16f@6Au-&*jJS{Z2R!ocqm#xyR!rSjC-i XX|>RM&L;1F2h1U3yf2+K+0=gl-=&_G diff --git a/Jetson Nano/python2/lib/epd1in54c.py b/Jetson Nano/python2/lib/epd1in54c.py deleted file mode 100644 index 8231aca..0000000 --- a/Jetson Nano/python2/lib/epd1in54c.py +++ /dev/null @@ -1,152 +0,0 @@ -# /***************************************************************************** -# * | File : epd1in54c.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V4.0 -# * | Date : 2019-06-18 -# * | Info : python2 demo -# ****************************************************************************** -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# -import epdconfig - -# Display resolution -EPD_WIDTH = 152 -EPD_HEIGHT = 152 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 0) - epdconfig.delay_ms(1) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(10) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - print("e-Paper busy") - while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy - epdconfig.delay_ms(200) - print("e-Paper busy release") - - def init(self): - if (epdconfig.module_init() != 0): - return -1 - # EPD hardware init start - self.reset() - - self.send_command(0x06) # boost soft start - self.send_data(0x17) - self.send_data(0x17) - self.send_data(0x17) - self.send_command(0x04) # power on - - self.ReadBusy() - - self.send_command(0x00) # panel setting - self.send_data(0x0f) # LUT from OTP,160x296 - self.send_data(0x0d) # VCOM to 0V fast - - self.send_command(0x61) # resolution setting - self.send_data(0x98) - self.send_data(0x00) - self.send_data(0x98) - - self.send_command(0x50) - self.send_data(0x77) - - def getbuffer(self, image): - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - if(imwidth == self.width and imheight == self.height): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, blackimage, yellowimage): - self.send_command(0x10) - print("blackimage") - for i in range(0, self.width * self.height / 8): - self.send_data(blackimage[i]) - self.send_command(0x13) - print("yellowimage") - for i in range(0, self.width * self.height / 8): - self.send_data(yellowimage[i]) - - self.send_command(0x12) - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - - self.send_command(0x12) - self.ReadBusy() - - # after this, call epd.init() to awaken the module - def sleep(self): - self.send_command(0X02) # power off - self.ReadBusy() - self.send_command(0X07) # deep sleep - self.send_data(0xA5) - - epdconfig.module_exit() -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd1in54c.pyc b/Jetson Nano/python2/lib/epd1in54c.pyc deleted file mode 100644 index 3bd7cbef4f072dd0a0bff04ae94fd69c374ae07a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3967 zcmbVP+iqJ$6y0;|IJT3}OD=7Qf+~oR5o&r-+Xtv9G$~CVYDLE_Q6qxo_?#ru`WBxP zl9U)B1yvP%0KDio~#<}Jqc103`vldZ$%D89<72mQYvJy$G*T{(f$ZBrm#E9 zi-~Xp{x({)jxK~)2owrgg-oLaBza1tc?zd`2d!p!C`X1R$S9GOU|5Nq1X(5W66BN^ z5x-Q(D5xA1`tHBgqR5R7;0yR=w{nMnBB_!1JsAZkm>-%w7pk`{QVzSz-*DHE|-7VM26BGiw$IWT;|LpdXkiOP#7xe+VHPAfywRZbN@qnqsLQsh-$FP%b zQ#-l-Lo!E<YoMgPqL#de;VD1!lj2J9T%}NnnNe%tVw%$Zw#qO zKRvoPf^WT~)P%uaK#RTunt@*=96A-WCzGU%OiXk<=Av$9Hqt>=OfjIJd(ufu2Za$V z;wjR}$N?^}N+9O{kOM875aU=y{N9W~ZNd!h!Q$E%(ixV$hr%HR#p2ps>15>qvd|C9 zh9}d&0R=pl1L&fo?vROdR21e+qxNG0+|;d8_ft2wp9}t1ws&Nu@k>uBr^PeVRZ3Lm zGXu=v-ab#W(H zH7nbBv(gY+SSm366zvQ2mLZCnYp!S+Uuw4P(`Exj%w>mfIL$Smh3(i@G0e3NaE!1| zOm>re<4de@)!sf0m8dlgIQI%eyY%}}3f>pL5W0ClZB&dZNBcMD-Jx%Xk4_l=N-UvZ^Zx)@zmO z6OE1ofx4c>4)0Kr{jgSR?z(BF7Y7E-F>izQ6IcwS9QsG!1O7ZIKJztX_80+Toe6Bz z!W-&qkXow*xo61CnaSQavksBT!jS~yCoo5Xv3FJD;3CkEL#i8xap|}Ol@yTe_Y=pt z7@S-}J(18aBm=IebqIVx-9wvi?_TzHk4groXsNEH>Go%I?uDfYVu5nF;mL}( zZaEA0touE2k_U8D3&YkAkQDLBP7CvBV_t#fw)<@yv`s(Sh} zoZy?>zryY+yKCtBK3D2>KXH64m3Pn-#~G8$<+8a9K4ZBzb5rO?oglq2^np*!ed?=Q Xk9myRcGFq&(JYVSgJLw5F&Xb~LUVE% diff --git a/Jetson Nano/python2/lib/epd2in13.py b/Jetson Nano/python2/lib/epd2in13.py deleted file mode 100644 index 39b1914..0000000 --- a/Jetson Nano/python2/lib/epd2in13.py +++ /dev/null @@ -1,224 +0,0 @@ -# /***************************************************************************** -# * | File : epd2in13.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V4.0 -# * | Date : 2019-06-19 -# * | Info : python2 demo -# ******************************************************************************/ -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - - -import epdconfig -import numpy as np - -# Display resolution -EPD_WIDTH = 122 -EPD_HEIGHT = 250 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - lut_full_update = [ - 0x22, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x11, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00 - ] - - lut_partial_update = [ - 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0F, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - ] - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - epdconfig.digital_write(self.reset_pin, 0) - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - while(epdconfig.digital_read(self.busy_pin) == 1): # 0: idle, 1: busy - epdconfig.delay_ms(100) - - def TurnOnDisplay(self): - self.send_command(0x22) # DISPLAY_UPDATE_CONTROL_2 - self.send_data(0xC4) - self.send_command(0x20) # MASTER_ACTIVATION - self.send_command(0xFF) # TERMINATE_FRAME_READ_WRITE - - print("e-Paper busy") - self.ReadBusy() - print("e-Paper busy release") - - def init(self, lut): - if (epdconfig.module_init() != 0): - return -1 - # EPD hardware init start - self.reset() - self.send_command(0x01) # DRIVER_OUTPUT_CONTROL - self.send_data((EPD_HEIGHT - 1) & 0xFF) - self.send_data(((EPD_HEIGHT - 1) >> 8) & 0xFF) - self.send_data(0x00) # GD = 0 SM = 0 TB = 0 - - self.send_command(0x0C) # BOOSTER_SOFT_START_CONTROL - self.send_data(0xD7) - self.send_data(0xD6) - self.send_data(0x9D) - - self.send_command(0x2C) # WRITE_VCOM_REGISTER - self.send_data(0xA8) # VCOM 7C - - self.send_command(0x3A) # SET_DUMMY_LINE_PERIOD - self.send_data(0x1A) # 4 dummy lines per gate - - self.send_command(0x3B) # SET_GATE_TIME - self.send_data(0x08) # 2us per line - - self.send_command(0X3C) # BORDER_WAVEFORM_CONTROL - self.send_data(0x03) - - self.send_command(0X11) # DATA_ENTRY_MODE_SETTING - self.send_data(0x03) # X increment; Y increment - - # WRITE_LUT_REGISTER - self.send_command(0x32) - for count in range(30): - self.send_data(lut[count]) - - return 0 - -## - # @brief: specify the memory area for data R/W - ## - def SetWindows(self, x_start, y_start, x_end, y_end): - self.send_command(0x44) # SET_RAM_X_ADDRESS_START_END_POSITION - self.send_data((x_start >> 3) & 0xFF) - self.send_data((x_end >> 3) & 0xFF) - self.send_command(0x45) # SET_RAM_Y_ADDRESS_START_END_POSITION - self.send_data(y_start & 0xFF) - self.send_data((y_start >> 8) & 0xFF) - self.send_data(y_end & 0xFF) - self.send_data((y_end >> 8) & 0xFF) - -## - # @brief: specify the start point for data R/W - ## - def SetCursor(self, x, y): - self.send_command(0x4E) # SET_RAM_X_ADDRESS_COUNTER - # x point must be the multiple of 8 or the last 3 bits will be ignored - self.send_data((x >> 3) & 0xFF) - self.send_command(0x4F) # SET_RAM_Y_ADDRESS_COUNTER - self.send_data(y & 0xFF) - self.send_data((y >> 8) & 0xFF) - self.ReadBusy() - - def getbuffer(self, image): - if self.width%8 == 0: - linewidth = self.width/8 - else: - linewidth = self.width/8 + 1 - - buf = [0xFF] * (linewidth * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - - if(imwidth == self.width and imheight == self.height): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - if pixels[x, y] == 0: - # x = imwidth - x - buf[x / 8 + y * linewidth] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - # newy = imwidth - newy - 1 - buf[newx / 8 + newy*linewidth] &= ~(0x80 >> (y % 8)) - return buf - - - def display(self, image): - if self.width%8 == 0: - linewidth = self.width/8 - else: - linewidth = self.width/8 + 1 - - self.SetWindows(0, 0, self.width, self.height); - for j in range(0, self.height): - self.SetCursor(0, j); - self.send_command(0x24); - for i in range(0, linewidth): - self.send_data(image[i + j * linewidth]) - self.TurnOnDisplay() - - def Clear(self, color): - if self.width%8 == 0: - linewidth = self.width/8 - else: - linewidth = self.width/8 + 1 - - self.SetWindows(0, 0, self.width, self.height); - for j in range(0, self.height): - self.SetCursor(0, j); - self.send_command(0x24); - for i in range(0, linewidth): - self.send_data(color) - self.TurnOnDisplay() - - def sleep(self): - self.send_command(0x10) #enter deep sleep - self.send_data(0x01) - epdconfig.delay_ms(100) - - epdconfig.module_exit() - -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd2in13.pyc b/Jetson Nano/python2/lib/epd2in13.pyc deleted file mode 100644 index b350d678e7e468c59fe2a162973812b267e413a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5458 zcmcgwOLH4p6~4Fih$UNo#Fk^jR3^X-BVNfopco)bQi+2diqWLnnW)AvG>W?ITqCvQ z?iP_#Q598T!4Cj-uwVsL&4R`3sA9u{f<5p**s&SD@7z|a{RmF7z)~Ndb8q*(=keWh zPOI?mT2-%CKkTUVuYmv8amC*P@$uEFtJF@$YqjGj-%&dSlFwkvI7%Wl~1`5mzgOwMA zsVaX_m|5j72{Whs^TO1WzbwqW@>hgeP<~yQMdfZcR^i4Dyr_6NxNhQ#zXOsewXfA< zr94OYg78J*OTw3hKPUW*N-DxsRWd6KR8R;g*KIaxT(ANX4E#<%+%9?GI#}!u?@9CUXZ_^*V-=fPdRe5GsdUxE5>n(&Rc zE)Nb9>fm`MG>PZE20oqxQF<=@RJ8dlWb;1BA4rx+a4ACo8+yj9kt~2@K_J*A2yovt z2>XKUCyvsLi=g|7wt@tS^97ZgFRBysIzR8oyo89pXBa;L!^%NiYLAQPA^9uJJQ`u<@OG^m-_DH!hb zd%bq(pKUYY5eK2~rBCpX#RQRp*~@xSznIwwWQvNXnr%IkGh3j?ou6v9yUf|Cr9^_? zPTFUiNvDaKy#0F=j@Zbpd2wlh`RiatUpNw7#0}B>v7@3d$#@3$gMw-uHv@7WsPys# zs8P`NUCA>%de4JTs_f$F8^|#(_?Y%9{b}7fp+8MTmfXj-7I74$2oZki436ehutyU$ zU~`Mp2q2b55!&1m+o*8U=8nIBHJ3;}0g-bOeC1Ai5JZ=l{o)mj<_9iCK{sf}L4)Xa z>m(OQ)7p!Xtv-Vdr)B%gIG|} zDr@of)Kqc^>C`7EDyVk_wdNPq^@*dVgC%wC=tR!ZSf`x%7S;1yUYN-Xl}x}h)l9%M zvzdUIxlF)JEfX*^p9z>LWdddvG66G-nShz4OgKJsUS>wGDpVkpXjr}R;RQ8z1WR&~ zA3JKD&Nz5mw_x#hgV9b?7CR)Hu?Y-AxEdng{FCG#B)=y4GRf~qzDe>a61HgODhVTJ ztJ0g~Se2v!vnhWTVz2KHyMYurmt`=ADQ+iaHEM@@DdLC_>DIc#MCLmEVVE>9`oBvl z;lo1uBm9r4i_+(H(WwGzb-k`@&IEM$Pd|mla0FKuH zx9bzAp@bk-#|H73J*Zp*cSwQFKY{@w^XNJV^NE4nU2?$L)HKZosEvSx@D@eJ(I(yO z?Ai=1j%8vPd2!N?5~)0gDNn0M9x98t{E*z)E@yq;4w9A${rxF7uzLfVkjoQWSgtX2d(w-zt_5o>2&SOs=itv)v$s^cVwOF0>^xPUQW3XKWC zWKp%UGDcsmSp;lK8RO^|nI3=OsBuY+%OV1ZN{!KJOXCehbGM>?j9CGv6{UoX>KZV> zjAWGWtMQB)xjd+NR)#jz7@a!S0-aI2NHVGRAM+Go6uG938R)oj0fw(5r`plgYYXod zt{!}>@NFIZR<*+4Pc*XC`lE?PR>6<7KZBw+dLrAW8bzX!$!i29MVE0kH3!?R!Cz}* zyh)s*=%%Kkc91t z7etBaw7ce~9Op6F>PO~LKSb**pmdoSU6#nS{|kSDN9>D(c@zlK?W6N}3AZ$e8rv-L zn3`UDFOb)rt_cJCLPFHuAMPf63y^uQ*AM%hezzaV2Bv54Blb+szN^S<%fO6+ZtQ*@ zKv~WP zZDV?pv+;K@FLE|4mVrim?enBa2}Pwx`z$Q!1cn@x%X^B42e%;U;tBKfZ039g$ZiPot`E3O0W}2~ ztDVai9sB^3b#B4P*dI2YR7{WY7eUIpQd!gTDNg=ZW-4WTij``mQK?lbm5Y`6%Di2j4T$Z88Sik| m!*4$91HysJs^Cgy2lI@|NO8Gpo%Iea6z}5KqC#1ho&N%P`A)z9 diff --git a/Jetson Nano/python2/lib/epd2in13_V2.pyc b/Jetson Nano/python2/lib/epd2in13_V2.pyc deleted file mode 100644 index c2480b517818bb7a9e04eae73315721150a15565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7003 zcmd^D+ix6K89!&%m)*73_iNH5Zc@QQY0{K_2&iC2Uw9(X}QRpFgy#NPlx;S$t%Stx&bQw=-?@DE z^PS23y^#OiU-J(uD*j~fe+^Ig9RLqMt*T0`CAd~=j`AF}mQh|tt#v66zaHgvtDh+K zT&efgx;baL*o*n*Q+yW9Q=!gva^6;}gIpyW$moyJh(-TjM_bIPmc?IPSC~r`CLu%u; zvbt*tn5+q*5^$7y*6g;2nE*1-1FbCjod6jywZZ;x@guA>_ zT3T2XO2ZHRsI+B*s0Wm}Ss@VhD$<(;dgI>md(zLwqn&Us89%$6jIV^!%iR!NrPYPG zmHDU}ttZBd9!L4OfBxpet@#z%?6Ge)9!J7z)CF?rSJ#X9R|3LuU>7f5s+vca!2V?u zyzyq~{^g5XdlA_vl}uowQt8XU!+rpz`{Qp;8@3H~U_K!DA;C3*A%YnKrU66M8?tP; zo4HQ#D}u`euM?2*#8jLlrh<}NrrMN5@!V0G){}hkT-%12lJty9(Yw?kx=zy_p^G7@ z!9^>|AAwrQ$WxIjb17p)Gka#kMCEGfNy9|GOFl(So?k8Rm1?1A*&RT45zl98n7fK+ z+y@e?cT^X&eJWHNpF|yZ&`3PDT^&{fl02Fk=u*$L+JMAuO0s%`5=CwznJ7O zXY3otN^Z@cl3bjZJ0B~#J4$LxSo(ukj>;WLO4W&^oPli*h{@ggaCPx_hQjVw+H4H# z;XrubQH@unKk@tRj9NV?3AadjEEV1K*oI&BTuDpA9K>xqcT^h3#R4~wl{SHg)PmBd zb>)x+)09I_MMD( zhV9BuBX~EMGvOBEG(bn}ZUqEe;foT2+W)+Spv~HZSSmLnq=Ey2(2=Mys!|;4H)z?6 z@mvh@envGWXpCiA!YUtGf{lzg*)JU8$egeWF;pHcW3_eL?8-4x6E+Qs2|bB*LFr8z zpk$Kg;VHH62;=>t0JGa~Hr8MOjJ6mT82Agiyrpq(Q0&PCm0jDU` znwT$^n>Z=CC30oYo&L zx3YRfhO0YKX?>?!E$wXKu=J&-ZIpuzKjI3cZXx9v)LwRgJsDVPNtK(LRjKa;Q4xgC ztiMDHsBd{|4S&iRdPH|Qc|EA}I2ZDcJs%3`e~UMJw9weXGscHs`M2#+JwU zjqT&IqnZ41$wsX2qgv`>`hVc4{cg37fJaljbRX9rxeZ}c?lz#G*>qqFk^zlWe`|jC zH4STlB8kIS`&qU7K(R~KpL@8d_7Rm>3oxs2|DTSz|45e4sVUOI6|RF?jbjYB9h-y- zrg41O-ihxH-pO3q{z&1sy8TPF8vM4&n`P$XCU2J2k2MY(@b)udB(K~|WyP6v5YmEWhxV(~WOh~gW?-pXV@9OQldUgA%UPbW%NtcVP z3>OWJYw*Nz{3)=A)y*4ntGMsO;Vb2;+^*zmH(zg-Uyy1Yb>BG*Dbky4!OpVY)XIo0vQagGZ*Pyx6pwb+B_4%ds?~#frCzN!WCK&P zbaheER6mEid~kQWIa8#4$Yp4_{4RD`Ipkt8?Gxrc8n zgwyWpO#&(^2dC#bi7LdK+(Zyh^lmzb9PrzlaN!jdAEVEk^)DGd<{kazi-Xi!G!P^A9D!5k&t^%}jpkT+pQg$&|@gfoO z7Sp41*&f~FjO+O8@N`eU&Q#a&lw3B~gKw9>wcOcUe{KZdf@MW&BicZ`G1#f$Z8l$x g1Y2$%f38$QKsx7KbbQ5X^(xO_d4Ysi;TcNsAK3OGvj6}9 diff --git a/Jetson Nano/python2/lib/epd2in13bc.py b/Jetson Nano/python2/lib/epd2in13bc.py deleted file mode 100644 index 04f3512..0000000 --- a/Jetson Nano/python2/lib/epd2in13bc.py +++ /dev/null @@ -1,158 +0,0 @@ -# /***************************************************************************** -# * | File : epd2in13bc.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V4.0 -# * | Date : 2019-06-20 -# * | Info : python2 demo -# ******************************************************************************/ -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - -import epdconfig - -# Display resolution -EPD_WIDTH = 104 -EPD_HEIGHT = 212 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - epdconfig.digital_write(self.reset_pin, 0) - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - print("e-Paper busy") - while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy - epdconfig.delay_ms(100) - print("e-Paper busy release") - - def init(self): - if (epdconfig.module_init() != 0): - return -1 - - self.reset() - - self.send_command(0x06) # BOOSTER_SOFT_START - self.send_data(0x17) - self.send_data(0x17) - self.send_data(0x17) - - self.send_command(0x04) # POWER_ON - self.ReadBusy() - - self.send_command(0x00) # PANEL_SETTING - self.send_data(0x8F) - - self.send_command(0x50) # VCOM_AND_DATA_INTERVAL_SETTING - self.send_data(0xF0) - - self.send_command(0x61) # RESOLUTION_SETTING - self.send_data(self.width & 0xff) - self.send_data(self.height >> 8) - self.send_data(self.height & 0xff) - return 0 - - def getbuffer(self, image): - # print "bufsiz = ",(self.width/8) * self.height - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - # print "imwidth = %d, imheight = %d",imwidth,imheight - if(imwidth == self.width and imheight == self.height): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, imageblack, imagered): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(imageblack[i]) - self.send_command(0x92) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(imagered[i]) - self.send_command(0x92) - - self.send_command(0x12) # REFRESH - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - self.send_command(0x92) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - self.send_command(0x92) - - self.send_command(0x12) # REFRESH - self.ReadBusy() - - def sleep(self): - self.send_command(0x02) # POWER_OFF - self.ReadBusy() - self.send_command(0x07) # DEEP_SLEEP - self.send_data(0xA5) # check code - - epdconfig.module_exit() -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd2in13bc.pyc b/Jetson Nano/python2/lib/epd2in13bc.pyc deleted file mode 100644 index 789e1a1fe87d613bdf12c02e416816854fe626de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4050 zcmbVP%Whj$6y4|Aacno~D@ofBwL+*MBh>T(>Ht-=N>Z8*8b#MFQ6qw7``#p{^(($N zG>Kw_6jW7AkQnd>%=iI@%=iFC{RG4Si4Q1i?Q{K7(~=P9Z13~hXFt~2`#AN_cs~1Q zeyu9WUkcxM(4wm#0sf8DL{`CgvT7tq$*LzoT7rxOBl4Zdfym?46xS6Cqu66#;cv-q zlKlfDro_9;3%wHz`g3Se1tf%QNEJ$=V51DgdCK6NlrkeclWV%iu8vX#j$|bmRVF7v zR++p6Ib}|WUo7NtOqGYSd1&)!(dQts$P**`A|+4xl=5liN0iSfKdO9I;+!&hiBBjq zM#YN-%3UgqQ(z7xYz5V3W8H4VbcbJjSX#cnq%-X>3gc4CHsTCs7Up$=Y*5wFEZDh6 z#m73%PGvjV?X90L_SRP;9p!28Y-#2G!o$UQ1ifcAh&N+e%<;v$_wOw})WbGIyRjLo zs&N|AQCM3q;9HbLli+4&uhwkkD%8JW8`nRsRA*beF|{a_Y{SN-()-|}F%U6h$tP!e zo@JQTv+zmZvrjap2c8%@TjP3QTt_|6`IHRIr{%SIGdS<*y!xF6FIjru{!W4>mbMpY zq0fn!Q3>pZjmx#tv$l;xpL(iUL0BvAmg+G)V z#$kb)sig|dYO`K1H-e*B&8SCVBPb<%Zn95o2n?Svr_KK}9KlSG@kYa4@COXnc=O~p z8tzYUwr?xZ5R~KcQ4FQy)KG4?#m*oaO&N5SPRQhH~?|RrVH_QSPpzm zJ7+L@JY>^QAN%K^!5q(amXDYjbLNn1{uh=wU>~Rpo~ERIjz$-ePyuv|8gf0$*+D*c z7yRuV>={vSaT&P2D0elI-I?ARY#8lza7eb-!A!2#0m>i{B_uC*7z`(e6xHN}+Yqj5pCX|w zf0~4Ae5S7BMNsuXs$Rs-=rV|yvnK83y>TQceDJM2`)HH;(VNQysiI=~d*}&^k%s6Q z@SaSOGcq~Z@tC2Q#}v*Tl*|-k{G}(Iv~*B4(M5Yg<+tzjT#yT0A$2QclO`1~7tB&sBp&scluNHmDTz)Pp?U?gBt}p_4yU*NcX_Vlk%GrNg=cd_7$+nyrgwWh-x18bS+;1*W8>K9pjj=(<+0 zFT!?gtL2)@7vExBOaEfCZTFfDlsqkt1p>7XsU-C`zQ$(v6tH`tGPPzo&{sse+}H>U z3PP4e9kccFMyPMO%JzDE3d1^5sy7?WYO~gCt6W=mFA!qM*4?8+-ybcz6V@WteOKv@ z9@z+=^_blPHvQLogwB8-&|y7nSI~(*;4W{*oWf_!yJSXKk-T%}rb&2{LH=UDn!-xn z5jI8oZ(tIPyTr0{Q=lE9!BIz3G6}3tp-?TXofiTgQ(CS7^=VD%AIVB0rJvkzZCnaF zhDaRP75UBKBKsN7WyOH+Pv-k2%i`~Vpw9o1T^2&i1miHES>`=-`)KGV9am8_-h4x8 zbSt%T^{GNlyX`R0*x92*idqFWYT=Q!2UaVYAPZeKQ<{Cc-&Nw7^|Tk2U(p$k%8j>1 zWkNbGRrRXNRzD&x2#Gl7zMW%>+v`PRNL;_<3`B$8e=QnX2#y~Tx<%h>{xxt%@j4$A z^LQa3Jr4Q&OyYC*tv>JiU2no|EFbbYJGc``<<%lUtaG@V{0-89%k}PI$^b4|>TDT& z`!k4pq$%*UvT2Ru$%Az;+_CPb$+2GHQ7sHxKS5MPyb@Y@Epi1G>g0z@qg)S5CC!Q@ zq$;htC7;>r(7HRri7O=6Np6sQ0@C-qa&P>(&V diff --git a/Jetson Nano/python2/lib/epd2in13d.py b/Jetson Nano/python2/lib/epd2in13d.py deleted file mode 100644 index 30ebb77..0000000 --- a/Jetson Nano/python2/lib/epd2in13d.py +++ /dev/null @@ -1,357 +0,0 @@ -# /***************************************************************************** -# * | File : epd2in13d.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V4.0 -# * | Date : 2019-06-20 -# * | Info : python2 demo -# ******************************************************************************/ -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - - -import epdconfig -from PIL import Image -import RPi.GPIO as GPIO - -# Display resolution -EPD_WIDTH = 104 -EPD_HEIGHT = 212 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - lut_vcomDC = [ - 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, - 0x60, 0x28, 0x28, 0x00, 0x00, 0x01, - 0x00, 0x14, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x12, 0x12, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - ] - - lut_ww = [ - 0x40, 0x08, 0x00, 0x00, 0x00, 0x02, - 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, - 0x40, 0x14, 0x00, 0x00, 0x00, 0x01, - 0xA0, 0x12, 0x12, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - - lut_bw = [ - 0x40, 0x17, 0x00, 0x00, 0x00, 0x02, - 0x90, 0x0F, 0x0F, 0x00, 0x00, 0x03, - 0x40, 0x0A, 0x01, 0x00, 0x00, 0x01, - 0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - - lut_wb = [ - 0x80, 0x08, 0x00, 0x00, 0x00, 0x02, - 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, - 0x80, 0x14, 0x00, 0x00, 0x00, 0x01, - 0x50, 0x12, 0x12, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - - lut_bb = [ - 0x80, 0x08, 0x00, 0x00, 0x00, 0x02, - 0x90, 0x28, 0x28, 0x00, 0x00, 0x01, - 0x80, 0x14, 0x00, 0x00, 0x00, 0x01, - 0x50, 0x12, 0x12, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - - lut_vcom1 = [ - 0x00, 0x19, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, - ] - - lut_ww1 = [ - 0x00, 0x19, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - - lut_bw1 = [ - 0x80, 0x19, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - - lut_wb1 = [ - 0x40, 0x19, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - - lut_bb1 = [ - 0x00, 0x19, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - epdconfig.digital_write(self.reset_pin, 0) - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - print("e-Paper busy") - while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy - self.send_command(0x71) - epdconfig.delay_ms(100) - print("e-Paper busy release") - - def TurnOnDisplay(self): - self.send_command(0x12) - epdconfig.delay_ms(10) - self.ReadBusy() - - def init(self): - if (epdconfig.module_init() != 0): - return -1 - # EPD hardware init start - self.reset() - - self.send_command(0x01) # POWER SETTING - self.send_data(0x03) - self.send_data(0x00) - self.send_data(0x2b) - self.send_data(0x2b) - self.send_data(0x03) - - self.send_command(0x06) # boost soft start - self.send_data(0x17) # A - self.send_data(0x17) # B - self.send_data(0x17) # C - - self.send_command(0x04) - self.ReadBusy() - - self.send_command(0x00) # panel setting - self.send_data(0xbf) # LUT from OTP,128x296 - self.send_data(0x0d) # VCOM to 0V fast - - self.send_command(0x30) # PLL setting - self.send_data(0x3a) # 3a 100HZ 29 150Hz 39 200HZ 31 171HZ - - self.send_command(0x61) # resolution setting - self.send_data(self.width) - self.send_data((self.height >> 8) & 0xff) - self.send_data(self.height& 0xff) - - self.send_command(0x82) # vcom_DC setting - self.send_data(0x28) - return 0 - - def SetFullReg(self): - self.send_command(0x82) - self.send_data(0x00) - self.send_command(0X50) - self.send_data(0x97) - - self.send_command(0x20) # vcom - for count in range(0, 44): - self.send_data(self.lut_vcomDC[count]) - self.send_command(0x21) # ww -- - for count in range(0, 42): - self.send_data(self.lut_ww[count]) - self.send_command(0x22) # bw r - for count in range(0, 42): - self.send_data(self.lut_bw[count]) - self.send_command(0x23) # wb w - for count in range(0, 42): - self.send_data(self.lut_wb[count]) - self.send_command(0x24) # bb b - for count in range(0, 42): - self.send_data(self.lut_bb[count]) - - def SetPartReg(self): - self.send_command(0x82) - self.send_data(0x03) - self.send_command(0X50) - self.send_data(0x47) - - self.send_command(0x20) # vcom - for count in range(0, 44): - self.send_data(self.lut_vcom1[count]) - self.send_command(0x21) # ww -- - for count in range(0, 42): - self.send_data(self.lut_ww1[count]) - self.send_command(0x22) # bw r - for count in range(0, 42): - self.send_data(self.lut_bw1[count]) - self.send_command(0x23) # wb w - for count in range(0, 42): - self.send_data(self.lut_wb1[count]) - self.send_command(0x24) # bb b - for count in range(0, 42): - self.send_data(self.lut_bb1[count]) - - def getbuffer(self, image): - # print "bufsiz = ",(self.width/8) * self.height - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - # print "imwidth = %d, imheight = %d",imwidth,imheight - if(imwidth == self.width and imheight == self.height): - print "Vertical" - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print "Horizontal" - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, image): - if (Image == None): - return - - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0x00) - epdconfig.delay_ms(10) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(image[i]) - epdconfig.delay_ms(10) - - self.SetFullReg() - self.TurnOnDisplay() - - def DisplayPartial(self, image): - if (Image == None): - return - - self.SetPartReg() - self.send_command(0x91) - self.send_command(0x90) - self.send_data(0) - self.send_data(self.width - 1) - - self.send_data(0) - self.send_data(0) - self.send_data(self.height / 256) - self.send_data(self.height % 256 - 1) - self.send_data(0x28) - - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(image[i]) - epdconfig.delay_ms(10) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(~image[i]) - epdconfig.delay_ms(10) - - self.TurnOnDisplay() - - def Clear(self, color): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0x00) - epdconfig.delay_ms(10) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - epdconfig.delay_ms(10) - - self.SetFullReg() - self.TurnOnDisplay() - - def sleep(self): - self.send_command(0X50) - self.send_data(0xf7) - self.send_command(0X02) # power off - self.send_command(0X07) # deep sleep - self.send_data(0xA5) - - epdconfig.module_exit() - -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd2in13d.pyc b/Jetson Nano/python2/lib/epd2in13d.pyc deleted file mode 100644 index c5858906dbbfc61fa695ca48dca402098c8f2475..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8104 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 (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, image): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(image[i]) - self.send_command(0x12) - self.ReadBusy() - - def Clear(self, color): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - self.send_command(0x12) - self.ReadBusy() - - def sleep(self): - self.send_command(0X50) - self.send_data(0xf7) - self.send_command(0X02) - self.send_command(0X07) - self.send_data(0xA5) - - epdconfig.module_exit() -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd2in7.pyc b/Jetson Nano/python2/lib/epd2in7.pyc deleted file mode 100644 index 89c55ab72971821d570d728dbd12e412b15324ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5820 zcmc&&%Wqs~6+hpMJ)W7^@%t6mZJ+@SO-M=w0ig;)>^9D#ZgibuY9*bH=UzKsIuCp9 zb!=B2slq4}R!IE=Xoc8Sg1>=PHz2WP&zc1b=&JmF=eu+7_!ZkwQP14tbME&#?{mJ% z{&S%Cr@s~+Rwe$+;{Po?;SB&EUn4b<6(AW|G2&-sB_n>1_&M==FFb*RKiXDNy2+AG|3Z;Q@0F@o+&I_}_VWNmd~8SIz@;-hT!?V9p^u z419TdfMvgO9w6OCbx~M$P!X7BND+9&up%)1h$7&2R1qj)Op%M?k1H}L{)8e!;!i3v zEZ$OS3gJ*itO%bBo;f_>>j06+VR0t`9_a12mfqI) zBv!Y=-DLjUQZm09>RX}{uS8^FVU05SdXr(i5;%W0O1 zweJ#eM@ya9F@h0-TLix$_?X}Wf_ngoU6{wzF3@Odm&ckU_A_E=DrAX_>>Ed@-8i0= zuJN9u3?LTVR2$eD_%UR`b0>y?Ios>pPhFlhMYcmb^& z<^cp!kD4L#-$@NK#y)YP)J`#7QmaSuEPk-Wu*18zK8MP-LU6oUY7kHEKqsWbJc%>Z{MqI1g*== z6V9xkVe61_*FAK(71V-C7<73y4b$=LR#5Rh%~ebT=Wu9B>0$A09KQiP7Q5HXm|;`x zh)gxA*jMoe$rcKt+d{0Js}iZmE{NwJUXpevt~n9;*vPahU{;pnr7pzNrM>ipBTLmU z+|r*VOLK=#J$@-Nf9KSXlBIoTTAE9j{v}zOKhsjwn9ivMv#fTeTP@nlfX=qph<%OV zC4#RLyhv~bprpna2d0IfRcWjT-XzHj0JW{C`~)#r_N!VBNN;Z^=xP_bn!Md!?Ft4u zUA4K@h)O`7ndaz8taCWy3DM`d0BLT*Oq~GLRXXmXu5t^p;!@wfddquRX-zOVmgoft zf9&WyB#sag=;@qu#DsIQn1HR}amNwPD>#C9b9RoWIm;bK6q4PrrkD`m;6gXipAd(q z4J0F2bMmx{-P2Ne4(~SDJ#8o<4o@3SMxJ@-NcXgp4;}5EHkJ@LbUYz&&Vdakk`dS= zwP8933nr5}*lH>vFfyGG7`c=X7@0{3SQGo=)TPpM@VmI$@!I5SeHJh6RRV^WW%p(E zX2n>s|0Z~s;P(W-BG9(wBVrnM9~1k8ASCz+!2|*Goc#mA%LGjF_U8obfb{m}nhM5a zz3Fe&0&T544toq-4OefP7^D0giCB+DoAygA3m*W888JQCVrBpl7k@f(;yGPncwjdF< zB5h<(q;1`SHSlk;r%gDvaimtjof(4!hY^JH{KI#o-6uP5G3Q~ezPcmryzF5wz&=^a z$TTju+~7mm126j49WpjaM$v&x z%~`X&Sv1QHlviZPlB*kEz%tsJqr{4QN1N842Cc|eD>YY7KEQjuD=aiy_Wfo9U9QGR zi9zAf!k%7g7#_IMJi%gjcd+jViqx8D94=wBq?6eMYw@x5%6gzbO{{LMMT2;)Z_4#% zqgid%nl0@iZQb2g=tj2gE+|@iHtbGN3zh9%g*$p$BiK%m-BYU&l>jEdz*^AyGl=k; z0Fs$8gZT7ko;SU0K{FHPripQrL)$`Hn^GnU#+7>b?|?W%bXu2J;?{+4VJg6^jG-8f zYd10~^n1KSZgMqg^J>x%xKgxp^O-wLraK^hU{}}7)RSG(vgJ~#&#Nd+wP@MQI}@vJ z)f3p;x=f_j)qF$KrFKr!Pl>W?v+ptGsSWg6cWT}DZMcDZ(ciHuBp0mvSD;nGaloUR z{VgVa*_u7KZT`<%)gaM8@V*D}PxWQ?UUTT+TmJxZM6cBD(GKd(!+NEXwb}0ULCDkY zb`h&T?VT{q`Dm1(Tko@=(!1z6i+XRj{{rgn{8~I&E#2)REo4kP+I+^vF4(c|2Z*!Z zmcv>QYo^}> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, imageblack, imagered): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(~imageblack[i]) - self.send_command(0x11) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(~imagered[i]) - self.send_command(0x11) - - self.send_command(0x12) - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0x00) - self.send_command(0x11) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(0x00) - self.send_command(0x11) - - self.send_command(0x12) - self.ReadBusy() - - def sleep(self): - self.send_command(0X50) - self.send_data(0xf7) - self.send_command(0X02) - self.send_command(0X07) - self.send_data(0xA5) -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd2in7b.pyc b/Jetson Nano/python2/lib/epd2in7b.pyc deleted file mode 100644 index f88a113c0189adff6de45cf3171f04ed5bcf9615..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5849 zcmc&&&2L;+6+d^rJmdHy{>(UzOG*kFnvj$V5kM7$*lC`($)FK_m^PZiX%!fVi zxwaz@R0M^>2BiK2-LONVTXsln5DVC|W5pkU5bVnDckY`vGoIRxvjC6pnRD*v`MT$v zJL!Lp4*&V@g@;v%|I+xrg%;ib@bPb?CbAABCF@4~w5+GZ&xoHBKPx{Ic_#ASdYbcA zOG8*=Kf~XO{gi0lh(z4+&i$q2glnL0qlHzMSCp?S~%)y>7 z!Ncpaj)Tq*@POTp$T-LYI6pFHVt@zq9MQw1_(${r9-!y{yB?t1K^~?CWE|83?0!TK zFKr8KH7#^em~uuD_|mK*P~!zfpuM6Z;C4vEmxnThy z*!HW<#-`nhcw@cQ2j%03tBikQ{T?R`fu~!@`wljQ>*y_MM`B<^NDUNm}r6>56sB*fPRGNy( z=`9j{GV*9PZmn+qZ6L_TcbE6S(r02A4^I9hC9OBKALfID!=gKRS@SbkpaQA$ss{yM zyH>-KBp?mgZk*Dbi5q)Ph-4L({KT>}5b_ z+-t;MC3v0Siv(8)UIQqpF=l{iu4q*nTY-0hLvG#8;fY+FL42(YE%*QdEhCTA!cNHx}9Qpic2mdZA9iYNXO5WgP5sZWvbT86!_GG+xk@C>mn~jyitqo;m_rD!H`!>#;_`+ zpI1DM5?&X~&VpIn88&MTBuRw1l8gSI!7^HNBTk2d&6fD>auDK19Dh3YMEK z`?T3Wy{Z?XM9=qVVNYK#yaRZ;e1OI7kzk(&iqx9O|E%&$I+^9HrVv}NYz6uo#K!Js zG>&fVDc75gX0=&swzL?ub@wcx8`-*hiD(Adw);UXRJIQk?(1odU@t)qPR}LO0=NJN zn?dWZAVNM>BsFiw@fk_IVzR6yQ?uq9CdN$;)d%S+Ljf-no4WWPfjCRVp=JMOT!F9` zwgODcG*Zfp78OPHbaZMt0Uw_mXB6MLnk4sbV!?%RiRBD?;>2XnpM3tF-TZ{z5ea<0 zUueq}_W%PHKgw9WSr)MxvYh!f64AC@M{qHT(aF_=YVTn#qrEq3mFg4qG9_DqueP(N zTZ%mSHr&S3=pR6}3T4)R4Ypv&>U>w}$gG7EtNb2Bzg6Bm(JE7&DiOa?xJTV7208O~ zPyhF}phonG<=q5!y1H49EuyS%{R>EsvL|9?yKhx?N8x$}?qGVKvPozWPS1`<+_NJl zx-O1s&c)RU8DCahX8bo$O9@=2WomV$qxv6{;92q?MGI>|u$>0yAzhPx9#yzD2;IqH77o zj`=ag!%X=STKGOd&J+qcYte@> 3) & 0xFF) - self.send_data((x_end >> 3) & 0xFF) - self.send_command(0x45) # SET_RAM_Y_ADDRESS_START_END_POSITION - self.send_data(y_start & 0xFF) - self.send_data((y_start >> 8) & 0xFF) - self.send_data(y_end & 0xFF) - self.send_data((y_end >> 8) & 0xFF) - - def SetCursor(self, x, y): - self.send_command(0x4E) # SET_RAM_X_ADDRESS_COUNTER - # x point must be the multiple of 8 or the last 3 bits will be ignored - self.send_data((x >> 3) & 0xFF) - self.send_command(0x4F) # SET_RAM_Y_ADDRESS_COUNTER - self.send_data(y & 0xFF) - self.send_data((y >> 8) & 0xFF) - self.ReadBusy() - - def init(self, lut): - if (epdconfig.module_init() != 0): - return -1 - # EPD hardware init start - self.reset() - - self.send_command(0x01) # DRIVER_OUTPUT_CONTROL - self.send_data((EPD_HEIGHT - 1) & 0xFF) - self.send_data(((EPD_HEIGHT - 1) >> 8) & 0xFF) - self.send_data(0x00) # GD = 0 SM = 0 TB = 0 - - self.send_command(0x0C) # BOOSTER_SOFT_START_CONTROL - self.send_data(0xD7) - self.send_data(0xD6) - self.send_data(0x9D) - - self.send_command(0x2C) # WRITE_VCOM_REGISTER - self.send_data(0xA8) # VCOM 7C - - self.send_command(0x3A) # SET_DUMMY_LINE_PERIOD - self.send_data(0x1A) # 4 dummy lines per gate - - self.send_command(0x3B) # SET_GATE_TIME - self.send_data(0x08) # 2us per line - - self.send_command(0x11) # DATA_ENTRY_MODE_SETTING - self.send_data(0x03) # X increment Y increment - - self.send_command(0x32) # WRITE_LUT_REGISTER - for i in range(0, len(lut)): - self.send_data(lut[i]) - # EPD hardware init end - return 0 - - def getbuffer(self, image): - # print "bufsiz = ",(self.width/8) * self.height - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - # print "imwidth = %d, imheight = %d",imwidth,imheight - if(imwidth == self.width and imheight == self.height): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, image): - if (image == None): - return - self.SetWindow(0, 0, self.width - 1, self.height - 1) - for j in range(0, self.height): - self.SetCursor(0, j) - self.send_command(0x24) # WRITE_RAM - for i in range(0, self.width / 8): - self.send_data(image[i + j * (self.width / 8)]) - self.TurnOnDisplay() - - def Clear(self, color): - self.SetWindow(0, 0, self.width - 1, self.height - 1) - for j in range(0, self.height): - self.SetCursor(0, j) - self.send_command(0x24) # WRITE_RAM - for i in range(0, self.width / 8): - self.send_data(color) - self.TurnOnDisplay() - - def sleep(self): - self.send_command(0x10) # DEEP_SLEEP_MODE - self.send_data(0x01) - - epdconfig.module_exit() -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd2in9.pyc b/Jetson Nano/python2/lib/epd2in9.pyc deleted file mode 100644 index bbcf85c7c68fa5a18bb0e6c498a3be5db34de324..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5394 zcmbVQ&2JmW6@Rm&D3OvZ$&zd-id@BZ6Q&LDm$V5gd^;Xx&QU`_`Nf}5!rwrtOSs7?C zuMBj#pbXUcmNHm;K^bWDiZamaqB4--k}~7sZxk=Xj8z(*w}*QPcXR_J7TGm&C{p&6 z&nTZ&en9!0@`K6`Nt{=vAn~v=5JBKyu3IXOa=|=E*bJ(T`nKJP2hs93Zk5;9N;=XC zqcAQvZ9UFmWO+#k$OcvIB~Y$?uyI@a*|^(|4$|kBHqz&-k@j*ofTp~;wtQ<-FN@(QtZf(ZD@vjXaEps?)a>0iApV=S{$`KB=3{_ zh-8*zoMeWCQrIbyWsua9j2QJKe9-gcu7<}k0+r4MmOVK(uA!dhct-lhvrmqj{&6>7 z{mi&6Ic>iH>$IS)i?pauTf{^`V0Ua>sg)nJY#jO=Q%eS6t#VM_i_{7J7`ltNpXmVZ zsGzw5Cb9mc88z;%a!1~&Dc(aP1@%c&IPGDOo_1L|G_r&C2?IHsxlFfFyJ8VA+J-d?31JXd8xEDGyEIhk;SZ9+hx^`sd$ z-%M+`F~P*wYV8c8o_1O*uDSEqYV8x2eTvf8K_#v{SIayeR4w`RyKJ0LkvsFI2^Hf% z0MmK>gm2+B`0~Cdt?z1oiuL`BY(B2V7nt9NQX097(pFdreD3ZudS3vXItP=lAxZg| z8c};Ob0!VZRD5cPG`ovk9o*Q^BaGNfMi7?0h6_s^YAdT8hWoHI4!D(7RgIao`a2d{VJ)mgp+eg~hf$wt#(xRq1+-_N-)gt&H|xtb zY9g{fL`QT6L=d3*^#)AAR2eb6i7EBvAHY1t7>GqAtEu9CY|CAOD>B4GM26IW1tfjDOPkWslUF~3=+RMcRvzUf=ryRwVR;>I% z!c*%`8L_NK(*e06x}KTw7#JI2ylLw}-Crp*{b#FCl6&Nl`ofQr-oukcVg0m(;8x_-HIBm`K@%Yt zXWT9Ei5plt*2p^6NV}hr7K$-XHhM8c4xs7<8_FG2Vi}nMtWtpVItir{1AP&Ub#l@L zD*!dv-x%s|2Wq7!K$#l1}+L<$eDMsL>K;&YscCEO3N18tTjfy%<32+|{x7GH>la5?q`6ZP~2n82VesHdODo8rkXF;k6+x3ea z!Trp0odsLq3Z>7$M$E5#lgygS$UWmY(&kOE=K~(Inq&S1hDvFsNldDRlG@x^Uu_=p zKa|udYPt8jHh0eG*<8;%wK+=XbQYHF+I+HWb0i2?uhx3Uak?wDDh%BbrkkGkCb<-p5(GI1u!J z!6G03homQ2*s<<^hSR^|Mzt_({sT)y^t;y2UXiC}@()D4vKN-inzPEtCVF6&eHMnA zWpD(Rx7)Q^x!uI;R2UOm>}#SRwRjJA-H)HHJf9WS&P$ire4XT{Bs{qNw@I#o^x&=B z)Bi5{bswr`JsFc-)z2+AI|6V7xOdxb&C&Sj;ji2@Ab8Jef&5B t`0I9YWqs|Y#w!_L^DfH+-Sbq^sVU!b#=F9Q7b6}4BM7~*OwQ!I{{x%wMx_7% diff --git a/Jetson Nano/python2/lib/epd2in9bc.py b/Jetson Nano/python2/lib/epd2in9bc.py deleted file mode 100644 index baee127..0000000 --- a/Jetson Nano/python2/lib/epd2in9bc.py +++ /dev/null @@ -1,154 +0,0 @@ -# /***************************************************************************** -# * | File : epd2in9bc.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V4.0 -# * | Date : 2019-06-19 -# * | Info : python2 demo -# ******************************************************************************/ -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - - -import epdconfig - -# Display resolution -EPD_WIDTH = 128 -EPD_HEIGHT = 296 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - epdconfig.digital_write(self.reset_pin, 0) - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - print("e-Paper busy") - while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy - epdconfig.delay_ms(200) - print("e-Paper busy release") - - def init(self): - if (epdconfig.module_init() != 0): - return -1 - # EPD hardware init start - self.reset() - - self.send_command(0x06) # boost - self.send_data (0x17) - self.send_data (0x17) - self.send_data (0x17) - self.send_command(0x04) # POWER_ON - self.ReadBusy() - self.send_command(0X00) # PANEL_SETTING - self.send_data(0x8F) - self.send_command(0X50) # VCOM_AND_DATA_INTERVAL_SETTING - self.send_data(0x77) - self.send_command(0x61) # TCON_RESOLUTION - self.send_data (0x80) - self.send_data (0x01) - self.send_data (0x28) - # self.send_command(VCM_DC_SETTING_REGISTER) - # self.send_data (0x0A) - - return 0 - - def getbuffer(self, image): - # print "bufsiz = ",(self.width/8) * self.height - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - # print "imwidth = %d, imheight = %d",imwidth,imheight - if(imwidth == self.width and imheight == self.height): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, blackimage, ryimage): # ryimage: red or yellow image - if (blackimage != None): - self.send_command(0X10) - for i in range(0, self.width * self.height / 8): - self.send_data(blackimage[i]) - if (ryimage != None): - self.send_command(0X13) - for i in range(0, self.width * self.height / 8): - self.send_data(ryimage[i]) - - self.send_command(0x12) - self.ReadBusy() - - def Clear(self): - self.send_command(0X10) - for i in range(0, self.width * self.height / 8): - self.send_data(0xff) - self.send_command(0X13) - for i in range(0, self.width * self.height / 8): - self.send_data(0xff) - - self.send_command(0x12) - self.ReadBusy() - - def sleep(self): - self.send_command(0X02) # power off - self.ReadBusy() - self.send_command(0X07) # deep sleep - self.send_data(0xA5) - - epdconfig.module_exit() -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd2in9bc.pyc b/Jetson Nano/python2/lib/epd2in9bc.pyc deleted file mode 100644 index f35e880c3c64dcfd3cfab6b758b78af44873a988..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3984 zcmbVP>uwuW5T3JkoY+a|C25-|Dj-yl5o$||peia9H7QMg)QZ+EQ6qw7dpGH6eT#QP zk}8%e1(gaRA@KtI;t%3AkopFdcnuz)eBYe)+EH7Y5a*0%&Smar<~Z}uWa0UX{90X- zzYM;=!iX*c1o$`75LpG{$*PecBdeYSSqX9yjK~in`y%&NGu&4$j^d1cfxnV{Otff3 zVsgB>ypT%3oZP^OY5*a4gR77e85>2w&Qk<(GK!2)CinEku8vX#&WuSgsz_dfF+~az zR*6l`2clhNymF1<9u5`mFj4K`6igQ?5nAZiOL0xCZfZn)UzNhmf zYFp86x_`c$?ypBWOKI?IWo2pM&SE?QYTE|!{g@VWe(~ngt;IVk?0#rB?#HTXoW*h! zHr9*y76s81unQM1Hf-%8)W2+7S8MePo!yv9R4TS*<4WZN;L!wtn2F?*H>qP8WpylE zGH~nz4e7oohQ8LY?i)v_R>J$GhOdrA@l&MkV?MR$4WhRXqb!Hbw>WteU(kwgZ z3}?SyoWA{8*)y^Mdk?tCc?~X9tI4|LY^8-oYNWRM$B8M)yin7lj&)|&cH^)}&D2m$ z%zC@othRzf7|obRVJoO4N3M`&W(e$_GRMvTvm2pI^5V62yU-8WtZrBK`Q8<*}3{5}3yJ0o(wd9<@?2*!% zcKSGe0}ALRc7~6bIdfug#Z$wdW4p`hef7Y@jC4=a<}zw2vK+I9SZX*4lyY~u|C_*> z5p@=~0UNM#_aZr+OZVWwXi7lHSV~|epAuLp3=`wS#Do&s!dNkq`^83PS)T0~0%nr^ zg85)MY^0K}X$ zS+C$tq6E25A;prJtX@uP!kB7se}b;C6@`Y*1n$WxVn(K?dmd|0QkISM&=NBYn-%>wn9h_DryGq-OfgoIzv43i5wp?K|m>%FbQklqSQ%+AZmg z$sTwCj>@_xvxq+#Je57@qO(rO^cgA&b7s-_u>k7y^<%d)*EXLD{#Q1)WTo|IUn!@> z6O$+<%JYdquHe2tQ4JEMwp6Lcuu{-d1^2Y!!y<^AL1xYL3a`}ltf8*hjAeDmL0$1w zNp(GIHqV-s&4O8J2`wxaS$0bH1)yb!VrJ4MZBgHZ-PqQv4ObH$bCLaRvE8+g+AZ`n z%{rHGjIht-O^SQ#dmMJH-aZNyX|$_>z7o3C)<#&=6YP6BXPecHP~U2`t@ZdArgf&$ zY`5C=cB9=@zP9OJ7*y0Y-J?R^7ahA3HX_x1SK*F|Y=zq?vdi1?hW7@20X3k)df2Uj zi1_LdZ_XUUXTp2ijIif;r_E<3!A%Y|igZ1LoxCC(n&^K4K{f{nJ}T5*jSWawNOrDD zjMoR^hKT9Q4|zR}N_`4#X<_Y*=028?s)&C^X0?J}L5^wM5~hFjnY!9`1f~$&XZo{a z3SrQ0Q2kKjaKj;}tRXI0c6gTy>VI}R%bKF^ZuNJm-3ncWc@Oh`niN9?hu(3o0OnGy zQLR68v1jY(?m9fJW^afW&jdE=;3@S8sJ1LV4=2qzGt>V@d8(5k`v;|KY<>gc?n*x% zmznxWJo-@?#A8Z&u3n{mWb-3gNjNy4?HrjyGvzSoC*alhI<0%j>v~ZKuGea>HT|_7 zr`_st{}Ql6+ycG~=F#fAKLUvuby1I=aIo*szE9Pk*RknROs^e+O_6Ej5t+$|Vvd<2O*+-NGH~ep?*n9UV2ou=6XJL`+0lsLjhO z@==rg@@Q3?VWpx~uYyvft+e8^I=!ly`g2@3PjH#w6M|0x20mBpbw77}Y?b#hG>>y8 wpU;owbNZRh&*Ufb> 8) & 0xff) - self.send_data(self.height& 0xff) - - self.send_command(0x82) # vcom_DC setting - self.send_data(0x28) - return 0 - - def SetFullReg(self): - self.send_command(0x82) - self.send_data(0x00) - self.send_command(0X50) - self.send_data(0x97) - - self.send_command(0x20) # vcom - for count in range(0, 44): - self.send_data(self.lut_vcomDC[count]) - self.send_command(0x21) # ww -- - for count in range(0, 42): - self.send_data(self.lut_ww[count]) - self.send_command(0x22) # bw r - for count in range(0, 42): - self.send_data(self.lut_bw[count]) - self.send_command(0x23) # wb w - for count in range(0, 42): - self.send_data(self.lut_wb[count]) - self.send_command(0x24) # bb b - for count in range(0, 42): - self.send_data(self.lut_bb[count]) - - def SetPartReg(self): - self.send_command(0x82) - self.send_data(0x03) - self.send_command(0X50) - self.send_data(0x47) - - self.send_command(0x20) # vcom - for count in range(0, 44): - self.send_data(self.lut_vcom1[count]) - self.send_command(0x21) # ww -- - for count in range(0, 42): - self.send_data(self.lut_ww1[count]) - self.send_command(0x22) # bw r - for count in range(0, 42): - self.send_data(self.lut_bw1[count]) - self.send_command(0x23) # wb w - for count in range(0, 42): - self.send_data(self.lut_wb1[count]) - self.send_command(0x24) # bb b - for count in range(0, 42): - self.send_data(self.lut_bb1[count]) - - def getbuffer(self, image): - # print "bufsiz = ",(self.width/8) * self.height - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - # print "imwidth = %d, imheight = %d",imwidth,imheight - if(imwidth == self.width and imheight == self.height): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, image): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0x00) - epdconfig.delay_ms(10) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(image[i]) - epdconfig.delay_ms(10) - - self.SetFullReg() - self.TurnOnDisplay() - - def DisplayPartial(self, image): - self.SetPartReg() - self.send_command(0x91) - self.send_command(0x90) - self.send_data(0) - self.send_data(self.width - 1) - - self.send_data(0) - self.send_data(0) - self.send_data(self.height / 256) - self.send_data(self.height % 256 - 1) - self.send_data(0x28) - - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(image[i]) - epdconfig.delay_ms(10) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(~image[i]) - epdconfig.delay_ms(10) - - self.TurnOnDisplay() - - def Clear(self, color): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0x00) - epdconfig.delay_ms(10) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - epdconfig.delay_ms(10) - - self.SetFullReg() - self.TurnOnDisplay() - - def sleep(self): - self.send_command(0X50) - self.send_data(0xf7) - self.send_command(0X02) #power off - self.send_command(0X07) #deep sleep - self.send_data(0xA5) - - epdconfig.module_exit() - -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd2in9d.pyc b/Jetson Nano/python2/lib/epd2in9d.pyc deleted file mode 100644 index 4fea1697cade3a1ef1ddde3493db52de93d8dabf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8088 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 diff --git a/Jetson Nano/python2/lib/epd4in2.py b/Jetson Nano/python2/lib/epd4in2.py deleted file mode 100644 index 36c07b1..0000000 --- a/Jetson Nano/python2/lib/epd4in2.py +++ /dev/null @@ -1,240 +0,0 @@ -# /***************************************************************************** -# * | File : epd4in2.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V4.0 -# * | Date : 2019-06-20 -# * | Info : python2 demo -# ******************************************************************************/ -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - - -import epdconfig -from PIL import Image -import RPi.GPIO as GPIO - -# Display resolution -EPD_WIDTH = 400 -EPD_HEIGHT = 300 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - lut_vcom0 = [ - 0x00, 0x17, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x17, 0x17, 0x00, 0x00, 0x02, - 0x00, 0x0A, 0x01, 0x00, 0x00, 0x01, - 0x00, 0x0E, 0x0E, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - lut_ww = [ - 0x40, 0x17, 0x00, 0x00, 0x00, 0x02, - 0x90, 0x17, 0x17, 0x00, 0x00, 0x02, - 0x40, 0x0A, 0x01, 0x00, 0x00, 0x01, - 0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - lut_bw = [ - 0x40, 0x17, 0x00, 0x00, 0x00, 0x02, - 0x90, 0x17, 0x17, 0x00, 0x00, 0x02, - 0x40, 0x0A, 0x01, 0x00, 0x00, 0x01, - 0xA0, 0x0E, 0x0E, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - lut_wb = [ - 0x80, 0x17, 0x00, 0x00, 0x00, 0x02, - 0x90, 0x17, 0x17, 0x00, 0x00, 0x02, - 0x80, 0x0A, 0x01, 0x00, 0x00, 0x01, - 0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - lut_bb = [ - 0x80, 0x17, 0x00, 0x00, 0x00, 0x02, - 0x90, 0x17, 0x17, 0x00, 0x00, 0x02, - 0x80, 0x0A, 0x01, 0x00, 0x00, 0x01, - 0x50, 0x0E, 0x0E, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - ] - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - epdconfig.digital_write(self.reset_pin, 0) - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy - epdconfig.delay_ms(100) - - def set_lut(self): - self.send_command(0x20) # vcom - for count in range(0, 44): - self.send_data(self.lut_vcom0[count]) - - self.send_command(0x21) # ww -- - for count in range(0, 42): - self.send_data(self.lut_ww[count]) - - self.send_command(0x22) # bw r - for count in range(0, 42): - self.send_data(self.lut_bw[count]) - - self.send_command(0x23) # wb w - for count in range(0, 42): - self.send_data(self.lut_bb[count]) - - self.send_command(0x24) # bb b - for count in range(0, 42): - self.send_data(self.lut_wb[count]) - - def init(self): - if (epdconfig.module_init() != 0): - return -1 - # EPD hardware init start - self.reset() - - self.send_command(0x01) # POWER SETTING - self.send_data(0x03) # VDS_EN, VDG_EN - self.send_data(0x00) # VCOM_HV, VGHL_LV[1], VGHL_LV[0] - self.send_data(0x2b) # VDH - self.send_data(0x2b) # VDL - - self.send_command(0x06) # boost soft start - self.send_data(0x17) - self.send_data(0x17) - self.send_data(0x17) - - self.send_command(0x04) # POWER_ON - self.ReadBusy() - - self.send_command(0x00) # panel setting - self.send_data(0xbf) # KW-BF KWR-AF BWROTP 0f - self.send_data(0x0d) - - self.send_command(0x30) # PLL setting - self.send_data(0x3c) # 3A 100HZ 29 150Hz 39 200HZ 31 171HZ - - self.send_command(0x61) # resolution setting - self.send_data(0x01) - self.send_data(0x90) # 128 - self.send_data(0x01) - self.send_data(0x2c) - - self.send_command(0x82) # vcom_DC setting - self.send_data(0x28) - - self.send_command(0X50) # VCOM AND DATA INTERVAL SETTING - self.send_data(0x97) # 97white border 77black border VBDF 17|D7 VBDW 97 VBDB 57 VBDF F7 VBDW 77 VBDB 37 VBDR B7 - - self.set_lut() - # EPD hardware init end - return 0 - - def getbuffer(self, image): - # print "bufsiz = ",(self.width/8) * self.height - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - # print "imwidth = %d, imheight = %d",imwidth,imheight - if(imwidth == self.width and imheight == self.height): - print "Horizontal" - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print "Vertical" - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, image): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(image[i]) - - self.send_command(0x12) - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - - self.send_command(0x12) - self.ReadBusy() - - def sleep(self): - self.send_command(0x02) # POWER_OFF - self.ReadBusy() - self.send_command(0x07) # DEEP_SLEEP - self.send_data(0XA5) - - epdconfig.module_exit() - -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd4in2.pyc b/Jetson Nano/python2/lib/epd4in2.pyc deleted file mode 100644 index 8d0194fe377fd9c261c0af134cf06557d238247e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5522 zcmc&%OK%(36+U-JQ6f!QZ&{9OCvAl!mByH>AwrDtzK~OWNpKz#TYpV;lk=@gJP!@TZ6MYqE)5AYr;G7D3CHwxo@2 z%p;uSm5u+Jlllv4f$yCM=(cbMJz&fudN}vL(*ujMJ6SfQ)Ei~_0l|!LyZTBuZMRDZ}cWWEOOt-kx0c; zJfnD4@e##yijOKjCUIVog2d+(0WX4c%5}@7aW0q#2zP>7yR~iW@hB*N{Z3_VwX8jz zFbdJ72|RgV9HG`?e?|uSvyb$uc>9UiQwkeS#mDH!%eLA2|6{z6Rj&(wB9mZjaoT-@V z%e8j1S#1TUicB|&!d6g8Ce%rf0SKg?F_Y#$lNx4BeBxNConq9|PHJ^V?tHA&{w#a@ zg3{JOHLjj2B~PD9$f_NR`}rjJck`?{&`q*HV1LGDL6Jym6MJdz9^SfbQsBBlbgr7YKet@MD6j09xz$%v2i2 zJJnV_^cP5SnZ{mR`2c6>B@N}I_V-hCYXIF!TlcpHT$%^I*4}HyB_Jn8d}b`>DD1IM z^a>{+Sk0RS@5xXdWysHWK)C?+Kz-%?jCAJdC+qY99Ad2K{DV;(?m+?-j&qHKa4wb* zaFYJ8K7rHXd?Fdlp?G)ITE4cCgn7wLI`=K&$(z)B4Ylq=!F6C{o5y zYWxY)B61{V+GM=~{4RNV7`{m>TY9Yy)0Tp#35HBEz%Aj8{s^yxrjROWdElPR5i>G7 z+x2*Sld{4{7m*A1w2ZvxNjEE9gcQBDLD^lz2m~ixfnoa_InqKA%QzBVe0$~KlEE=X z58QV7?(d{KDhF@#WMi&2-Inf{9APcMQQ7w7B5qt<;A1%gFWTxhnY}oMiHcxV!)MAv+1aNPn^50!(2sXb+?F~}77)Q!7Zc!%l2#Xy(|GRxQkdK1fwI};tbJC&@U$mnyoMuU`A#Un&vd;&ItV;jfg2O_U1!A|q)igYzDX+9(2OXlWq~U$LExmqPdP?? zh^8sKJ10$QKLv0VzB-NOAC^zazaV&p;8lWO0`#q+*pu&@ zK6U*QywQ6AIg`&%Bail;E14d~@50%sY> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, imageblack, imagered): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(imageblack[i]) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(imagered[i]) - - self.send_command(0x12) - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - - self.send_command(0x13) - for i in range(0, self.width * self.height / 8): - self.send_data(0xFF) - - self.send_command(0x12) - self.ReadBusy() - - def sleep(self): - self.send_command(0x02) # POWER_OFF - self.ReadBusy() - self.send_command(0x07) # DEEP_SLEEP - self.send_data(0xA5) # check code - - epdconfig.module_exit() -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd4in2bc.pyc b/Jetson Nano/python2/lib/epd4in2bc.pyc deleted file mode 100644 index ef2ec4a31d6ec6b8b98bc694656cf4fb7571d9d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3822 zcmbVP+iqJ`5S@MOIJT3}OOiHG)C!@3jG*a7RUc4AQIgX1p;mR=5;YKxY@d^Kx4y;a zggR9$kbqggFVvNAePmD^rj#uS`+G zf-)20S4u@3Q|F;<9@;Wm{5eP>^4Q3pNZ=`-Q9i5unDRO0$Cb}ZQc$KS$%HbKRJ>B6 z+;VA(0t+BfC#<(yn|3Q99De0~aPLl8XSz`wB|*owk{o7MmUV(`Sl7`!*rf-RhdRzq zZ71GM*DqJn_4Qasc^Z%n*6ys_Urol)duqevQ9_G3zIyAR+?1tF`)KXE&h|L10@p34-^*$CDspCI_E_Nr9!86<9!W z0PJIR>Aok1SgTw2jq51zoX^O}d{$nWH>2~O&MWM+w`>W%{gVVuEKM)bK%Wx{of6tD zn^YUY)2>Y-pL(iUVbrMZ2F+M8@!!Gl5%A!d>cvGc12Cq|lyR-j=weI3xQk92Wrx9V z_UpwN+Mks@BU`Zd5JV0&K&VzzblKTT3ro~UZS_x*(=OveO^-X)nO)mWq7pSzLp3n# z?Pjyu3XfnkeI7@xFc@sP&OReUVE42+Y5t$xaOEH_-e|XT{fOP_ZJzu_yM2c8h^dT) zu$oklU?*WyJGuS_JBN(q*=%VF`2-y#tlO)-4-YvR?nC-|;z{?ij>Cb7arksQFKb~I z8`L6=UyY&Y;=O7o>b}eC?p%un63>8)PQBZW8c{WlM&g^U8OC=vs)oL%oKqM*R#?+c zAKRCpz!La@;bUgOoI1GTso_6hiHqueMc_$Bx@Tx}1-TSaj!{D{HJlx!a(B7k-oc(R z1&hnT9f)%GVz4{s^1!g@3~mHVk7Yu&XG!RLdjh1yF_#f0z%|?9P9xH^=AY)wED5*x z^B~89PR~GoT*bzC4n)jpll6+;6w(4d_*UN2OTyC$_A*-hBcciMg9}fizutl%@;;{mPSmR{E$;=mJlXeoppqfm8xx?l0NX+66JLs}a{*Fenh1K^(4Z zd@cQP={*n*sZ&-qZc9HedyoY>E}Ndr!w(ejLiV7Gj=Do;&QejBGmip{3G~j~JaIR3 zWBY~Re{Fk5)>?lIm2z4M(@Fs^`!G1l1mAn>g8tA`+ zasEKKGZFT#6J9ujqmE`|23c|zC1GXbtj0U0v@jsj=QVqNBx?gHE|DBV3eFfx*-oYW zJI{oC%rR4xEo-UswIa-#VwowNk2PJqhpwM`dn9|%Y*%La7*X%l8rAv}jTr5AqfmWg zkKhSLQE1~19xE}}n3@R^%LOxw)Z%D;Se8=6f5oE1h+lmx;?vT1St!lY+XrYnoO;KW z&`gnb*_sML7SvayY1u1C>-9Sp+^k9pw|^Pj5fEkFT}C18ehX#<&r^ygsp2`rR3rE% zmL9^B9mMjWI%)1^jB?mLY59a3rf6p`ol~|{*V1(R8;EB)^{r|%3Ia`W0TPTB#lUCId0kob7dUZ|B&sad#} diff --git a/Jetson Nano/python2/lib/epd5in83.py b/Jetson Nano/python2/lib/epd5in83.py deleted file mode 100644 index e309db0..0000000 --- a/Jetson Nano/python2/lib/epd5in83.py +++ /dev/null @@ -1,199 +0,0 @@ -# /***************************************************************************** -# * | File : epd5in83.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V4.0 -# * | Date : 2019-06-20 -# * | Info : python2 demo -# ******************************************************************************/ -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - - -import epdconfig - -# Display resolution -EPD_WIDTH = 600 -EPD_HEIGHT = 448 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - epdconfig.digital_write(self.reset_pin, 0) - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - print("e-Paper busy") - while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy - epdconfig.delay_ms(100) - print("e-Paper busy release") - - def init(self): - if (epdconfig.module_init() != 0): - return -1 - # EPD hardware init start - self.reset() - - self.send_command(0x01) # POWER_SETTING - self.send_data(0x37) - self.send_data(0x00) - - self.send_command(0x00) # PANEL_SETTING - self.send_data(0xCF) - self.send_data(0x08) - - self.send_command(0x06) # BOOSTER_SOFT_START - self.send_data(0xc7) - self.send_data(0xcc) - self.send_data(0x28) - - self.send_command(0x04) # POWER_ON - self.ReadBusy() - - self.send_command(0x30) # PLL_CONTROL - self.send_data(0x3c) - - self.send_command(0x41) # TEMPERATURE_CALIBRATION - self.send_data(0x00) - - self.send_command(0x50) # VCOM_AND_DATA_INTERVAL_SETTING - self.send_data(0x77) - - self.send_command(0x60) # TCON_SETTING - self.send_data(0x22) - - self.send_command(0x61) # TCON_RESOLUTION - self.send_data(0x02) # source 600 - self.send_data(0x58) - self.send_data(0x01) # gate 448 - self.send_data(0xC0) - - self.send_command(0x82) # VCM_DC_SETTING - self.send_data(0x1E) # decide by LUT file - - self.send_command(0xe5) # FLASH MODE - self.send_data(0x03) - - # EPD hardware init end - return 0 - - def getbuffer(self, image): - buf = [0x00] * (self.width * self.height / 4) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - print("imwidth = ", imwidth, "imheight = ", imheight) - if(imwidth == self.width and imheight == self.height): - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] < 64: # black - buf[(x + y * self.width) / 4] &= ~(0xC0 >> (x % 4 * 2)) - elif pixels[x, y] < 192: # convert gray to red - buf[(x + y * self.width) / 4] &= ~(0xC0 >> (x % 4 * 2)) - buf[(x + y * self.width) / 4] |= 0x40 >> (x % 4 * 2) - else: # white - buf[(x + y * self.width) / 4] |= 0xC0 >> (x % 4 * 2) - elif(imwidth == self.height and imheight == self.width): - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] < 64: # black - buf[(newx + newy*self.width) / 4] &= ~(0xC0 >> (y % 4 * 2)) - elif pixels[x, y] < 192: # convert gray to red - buf[(newx + newy*self.width) / 4] &= ~(0xC0 >> (y % 4 * 2)) - buf[(newx + newy*self.width) / 4] |= 0x40 >> (y % 4 * 2) - else: # white - buf[(newx + newy*self.width) / 4] |= 0xC0 >> (y % 4 * 2) - return buf - - def display(self, image): - self.send_command(0x10) - for i in range(0, self.width / 4 * self.height): - temp1 = image[i] - j = 0 - while (j < 4): - if ((temp1 & 0xC0) == 0xC0): - temp2 = 0x03 - elif ((temp1 & 0xC0) == 0x00): - temp2 = 0x00 - else: - temp2 = 0x04 - temp2 = (temp2 << 4) & 0xFF - temp1 = (temp1 << 2) & 0xFF - j += 1 - if((temp1 & 0xC0) == 0xC0): - temp2 |= 0x03 - elif ((temp1 & 0xC0) == 0x00): - temp2 |= 0x00 - else: - temp2 |= 0x04 - temp1 = (temp1 << 2) & 0xFF - self.send_data(temp2) - j += 1 - - self.send_command(0x12) - epdconfig.delay_ms(100) - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) - for i in range(0, self.width / 4 * self.height): - for j in range(0, 4): - self.send_data(0x33) - self.send_command(0x12) - self.ReadBusy() - - def sleep(self): - self.send_command(0x02) # POWER_OFF - self.ReadBusy() - self.send_command(0x07) # DEEP_SLEEP - self.send_data(0XA5) - - epdconfig.module_exit() - -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd5in83.pyc b/Jetson Nano/python2/lib/epd5in83.pyc deleted file mode 100644 index ec4406c225f5f866134bf92f13ab957de6f6aa49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4758 zcmbVQ&2L-97C&=u;@D2yw9Q8w5Hvi|_l$s)@>PTilqS$tg0#BnQ%Xc-9N(LCTHA4a zZ>fXg1r+`RSiqh=E0(Ad3y_M$k|iq;%O~-+PrTpn%+0mk64H=#PR_^NnK>VG&YAkZ zmx`y3jb5!u`s3s88I1S@K!|@v>LM#ZJXtXk`m*9lI3!_C!eRMX|vHSX4st-z zl5wNP*y6}+@ivGo#s+QS)YogXqyCU=8(D|C0~T^dg9TM-F1_efrGjOiNL39E5>t{< zp_<1n>$G0oN}@7Prg~~v);1cAYBSthXL>x2nqejV;uLAdg+T2IbI|-fwc*G#Dt1-d zIlfPA^)+|iRqbGc(w?S_gs_@a_g0feQ#CpL6%qqFa%&DQtzrH$5G1Q}=Q~dfxERhu z>bl`c`x)iKeF$)PbTco@;SfGhg*13If}*D{Ra;SemRH?5784|%1n3vdwxfDfjibKc zre}77yB$@-K-0}3aQ73_R5QTWXR*I(=JXym51T{1>z(QS1+3sg`nDS2hA-`Ds=S0W ziVz3a5Xzy}910+QarAQ|tM9Lxwv4rK(sIh+xYOk@Nkll{b0KjGpd)p5cPH>6f7QuT2 z{~)LmFc|C=f;$8s5j;xp3xN+%<{mBuj{<9Kgg5Jv){%gfCYT~PLNEicpK#TKq8?qq zckx*OF^A2NSM*BA!=-+xl=8{#ADr3a_?p0YOj>6iBmNN@!koy(^ol4nGKnakn(TT^ z(`n%{(nZhUGu+?xq&p;Cv<)B;?IK;YDoAc{5SYWV#>)@NEy)b=i2<9W(S-4d>0I_u z#lb|vSh)H>>5fR}ze1K?pM|TxN;fatIoSprku^_d&;#8-QTkc7aW3V$^(T+;v`}pZ zHwOYx)3`R1uZ_R$pWgiRo<&A*PBR1VP{L|uo#!|1YI9ffX6alC1B!c3c|%$)b46m5ZUYj&#NiPKp2`SKHnxV!lkG5n8zVA90BVzM4T!!8~M>&QF>? ze7&6y8DthDlrtF29+r6p`KEb{DMtma@%Tu;h5-4;*NlY6lP|9#Rh)782`Rx*NM1-! zc{zp6b{27~-(?!Y1{b-*zcQiQ;Wrg}PKdjr>vJa8=vy25VcoQ*XB%xU$nxfsvYeX7 zm2X7Fb)2_XzESVtijeOshR&j8gXlyv*-oeFt5!$$gSH|Z+V-{CI-Fe&;5kBK+ zoC_RY&K$sR5qOEiD}pMS!&=E|JR^0?!iwd1Fs$C}^Q4%Jb-b z+g}4oA6+!#w3&jT)I>BB17MyrUIQ2~5ef8iuzt#Rk4O^k`N{XzPSJJ|M|&^2n4%x; zmjLe3p$bx&UJ&6w1F{w;>R9*4-p7kFu18Vp8?2$(m@!hsD0yWz_~{e8S#3m>iazWs zNRrx4RRZSCKWnH0wt>Nu1Pr_2Bmq6uv$kTpJo^L8l;ars3dxy5p^z`+^!H@pSmBXE k-mOC`xyL8VNWkOjrw_J^YIfS`^6D|}#sC}hb0+8g9~fZb_y7O^ diff --git a/Jetson Nano/python2/lib/epd5in83bc.py b/Jetson Nano/python2/lib/epd5in83bc.py deleted file mode 100644 index 60ef7d6..0000000 --- a/Jetson Nano/python2/lib/epd5in83bc.py +++ /dev/null @@ -1,199 +0,0 @@ -# /***************************************************************************** -# * | File : epd5in83b.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V4.0 -# * | Date : 2019-06-20 -# * | Info : python2 demo -# ******************************************************************************/ -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - - -import epdconfig - -# Display resolution -EPD_WIDTH = 600 -EPD_HEIGHT = 448 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - epdconfig.digital_write(self.reset_pin, 0) - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - print("e-Paper busy") - while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy - epdconfig.delay_ms(100) - print("e-Paper busy release") - - def init(self): - if (epdconfig.module_init() != 0): - return -1 - - self.reset() - - self.send_command(0x01) # POWER_SETTING - self.send_data(0x37) - self.send_data(0x00) - - self.send_command(0x00) # PANEL_SETTING - self.send_data(0xCF) - self.send_data(0x08) - - self.send_command(0x30) # PLL_CONTROL - self.send_data(0x3A) # PLL: 0-15:0x3C, 15+:0x3A - self.send_command(0X82) # VCOM VOLTAGE SETTING - self.send_data(0x28) # all temperature range - - self.send_command(0x06) # boost - self.send_data(0xc7) - self.send_data(0xcc) - self.send_data(0x15) - - self.send_command(0X50) # VCOM AND DATA INTERVAL SETTING - self.send_data(0x77) - - self.send_command(0X60) # TCON SETTING - self.send_data(0x22) - - self.send_command(0X65) # FLASH CONTROL - self.send_data(0x00) - - self.send_command(0x61) # tres - self.send_data(0x02) # source 600 - self.send_data(0x58) - self.send_data(0x01) # gate 448 - self.send_data(0xc0) - - self.send_command(0xe5) # FLASH MODE - self.send_data(0x03) - self.send_data(0x03) - - return 0 - - def getbuffer(self, image): - # print "bufsiz = ",(self.width/8) * self.height - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - # print "imwidth = %d, imheight = %d",imwidth,imheight - if(imwidth == self.width and imheight == self.height): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, imageblack, imagered): - self.send_command(0x10) - for i in range(0, self.width / 8 * self.height): - temp1 = imageblack[i] - temp2 = imagered[i] - j = 0 - while (j < 8): - if ((temp2 & 0x80) == 0x00): - temp3 = 0x04 #red - elif ((temp1 & 0x80) == 0x00): - temp3 = 0x00 #black - else: - temp3 = 0x03 #white - - temp3 = (temp3 << 4) & 0xFF - temp1 = (temp1 << 1) & 0xFF - temp2 = (temp2 << 1) & 0xFF - j += 1 - if((temp2 & 0x80) == 0x00): - temp3 |= 0x04 #red - elif ((temp1 & 0x80) == 0x00): - temp3 |= 0x00 #black - else: - temp3 |= 0x03 #white - temp1 = (temp1 << 1) & 0xFF - temp2 = (temp2 << 1) & 0xFF - self.send_data(temp3) - j += 1 - - self.send_command(0x04) # POWER ON - self.ReadBusy() - self.send_command(0x12) # display refresh - epdconfig.delay_ms(100) - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) - for i in range(0, self.width / 8 * self.height): - self.send_data(0x33) - self.send_data(0x33) - self.send_data(0x33) - self.send_data(0x33) - - self.send_command(0x04) # POWER ON - self.ReadBusy() - self.send_command(0x12) # display refresh - epdconfig.delay_ms(100) - self.ReadBusy() - - def sleep(self): - self.send_command(0x02) # POWER_OFF - self.ReadBusy() - self.send_command(0x07) # DEEP_SLEEP - self.send_data(0xA5) # check code - - epdconfig.module_exit() -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd5in83bc.pyc b/Jetson Nano/python2/lib/epd5in83bc.pyc deleted file mode 100644 index 56cd1b8868282e2dc84935466d55f928c9f26738..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4558 zcmbVPTW=dh6h5;~9NSIWv`y27sDQW{pCHc$Xdj?N*3M9b4k($Ud7*Cds1Q}WOBp8w)E5WdQDY7eabveU%i^UPVWB^7W$Sbo?{KaAc+f=zJA6O-`c%lzLVv!q0c0|ga@)_lalpj_;tNe)aIf?Vi z6eQlK%qR_CEOOmaaf}P*LBdv0Z8lczTFh|xiyz%^F$6q!-y6n$ulR41=wC-8D|o$Wxz@KK+n9pf~+`PxTsiI$W}hzWs#+ zk68L%q=!BgF|!ibH5*rI<;}K@L!Wl4TR~W>Y?tei2F2fx;k^Wen`$0;K9Xo0He<#; zRpN_J8jTMjq&ORlh6{imoo)bzWXH%F93F^~3mamnZgc69bCxa^X^}eXkCRi8$WY&- zmUVuwY{y}dmZ_%-&1$n=uQYPea~#P`knvE*UGn=J z*L-v5hdS;brncuR(GXPP%3d60;M7sR@GgY`FS$7%F0NpI8w`rph54;l2GWcKqJ-V_ zqlVD_t?ZHKk65`}#bXKuO> zZ-+i5%u~<5MI0QkcQphzGt!=<(~Bsm06Inu zxzuwCsORp0CxSzIGOZ_I+OS3|nU+ljtTvJgn3hWgX!5B5O(7Ma*_R5?jP?s-{lflK zz&i(00q=~b0yGCx0h&Xp0L|f4fTrgUG!y-rBmKf;zu-WUxP3I$V1Z+)fTgD%6!Zdq z3OP(_1FvCM9C=vnZzRm9JxxN~+Am0oB)o*|&m_N+93fdC*(CXlo!E=iGkGuWtwdV%2Jj1+&F5)|y0TFY^40#1_47GQx zpLQkpO-=XV%&ykcf<+4%6NUR%FbF|J^=0_Mdvb)Fk%@_p$HJUkRz^DL6f%VNC!TbM zq=RMwB9JZ8$;u9jnXbU&|GVsHD}iO4sE2=R+Tgy11|?zc+NaVPk*&+ZAw3>**DgpW zCp%aRbVOD?nZk+S0(WHxw&6i@yr!+qe6wwDH5<6nU7@@Ujo#=Vhwa!_ zG0eF|V%leheQnKH715V{jybLavbREIYRyWZ%~QM5SPP5#2D3 z!#Yx~Hyh1rv({|uO=|0|@zV2EcfFRjT`jv6)*`iiTj`c=*$6jNW}64_QEeE50XtyB zYS{i9Ld0fFylHa)pHc5=Gt7(Fn>25jgg04~ZOT<1OIpS=q)7h~@o@=BYSh+Q1M83t zj%r7y$j`_G?&rB{lZJptx-&8bxHGBb(31oHS=suV*~k5M6RptQz}vg4nyOz$Mon>W90IfP)*@t9Ko_IePsQ zYbDFJ%^_LwbDN^pJ0{MZ00P>wep6vz06uT6kXRzR~iR`{;e zD%G2MWK?X2fr8U2X z818P!wO*XX)PZnQKzGxFy8BheVfT9u5mtaRVW7xCzftjXu|xqMbXC-TSg&*%5Ml^7CtI(Zy@8mzDGbszQa9p}$`&u~9pbfcN9 H$$I|+?{mnN diff --git a/Jetson Nano/python2/lib/epd7in5.py b/Jetson Nano/python2/lib/epd7in5.py deleted file mode 100644 index 6e5a70f..0000000 --- a/Jetson Nano/python2/lib/epd7in5.py +++ /dev/null @@ -1,200 +0,0 @@ -# /***************************************************************************** -# * | File : epd7in5.py -# * | Author : Waveshare team -# * | Function : Electronic paper driver -# * | Info : -# *---------------- -# * | This version: V4.0 -# * | Date : 2019-06-20 -# * | Info : python2 demo -# ******************************************************************************/ -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - - -import epdconfig - -# Display resolution -EPD_WIDTH = 640 -EPD_HEIGHT = 384 - -class EPD: - def __init__(self): - self.reset_pin = epdconfig.RST_PIN - self.dc_pin = epdconfig.DC_PIN - self.busy_pin = epdconfig.BUSY_PIN - self.cs_pin = epdconfig.CS_PIN - self.width = EPD_WIDTH - self.height = EPD_HEIGHT - - # Hardware reset - def reset(self): - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - epdconfig.digital_write(self.reset_pin, 0) - epdconfig.delay_ms(10) - epdconfig.digital_write(self.reset_pin, 1) - epdconfig.delay_ms(200) - - def send_command(self, command): - epdconfig.digital_write(self.dc_pin, 0) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([command]) - epdconfig.digital_write(self.cs_pin, 1) - - def send_data(self, data): - epdconfig.digital_write(self.dc_pin, 1) - epdconfig.digital_write(self.cs_pin, 0) - epdconfig.spi_writebyte([data]) - epdconfig.digital_write(self.cs_pin, 1) - - def ReadBusy(self): - print("e-Paper busy") - while(epdconfig.digital_read(self.busy_pin) == 0): # 0: idle, 1: busy - epdconfig.delay_ms(100) - print("e-Paper busy release") - - def init(self): - if (epdconfig.module_init() != 0): - return -1 - # EPD hardware init start - self.reset() - - self.send_command(0x01) # POWER_SETTING - self.send_data(0x37) - self.send_data(0x00) - - self.send_command(0x00) # PANEL_SETTING - self.send_data(0xCF) - self.send_data(0x08) - - self.send_command(0x06) # BOOSTER_SOFT_START - self.send_data(0xc7) - self.send_data(0xcc) - self.send_data(0x28) - - self.send_command(0x04) # POWER_ON - self.ReadBusy() - - self.send_command(0x30) # PLL_CONTROL - self.send_data(0x3c) - - self.send_command(0x41) # TEMPERATURE_CALIBRATION - self.send_data(0x00) - - self.send_command(0x50) # VCOM_AND_DATA_INTERVAL_SETTING - self.send_data(0x77) - - self.send_command(0x60) # TCON_SETTING - self.send_data(0x22) - - self.send_command(0x61) # TCON_RESOLUTION - self.send_data(EPD_WIDTH >> 8) #source 640 - self.send_data(EPD_WIDTH & 0xff) - self.send_data(EPD_HEIGHT >> 8) #gate 384 - self.send_data(EPD_HEIGHT & 0xff) - - self.send_command(0x82) # VCM_DC_SETTING - self.send_data(0x1E) # decide by LUT file - - self.send_command(0xe5) # FLASH MODE - self.send_data(0x03) - - # EPD hardware init end - return 0 - - def getbuffer(self, image): - buf = [0x00] * (self.width * self.height / 4) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - print("imwidth = ", imwidth, "imheight = ", imheight) - if(imwidth == self.width and imheight == self.height): - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] < 64: # black - buf[(x + y * self.width) / 4] &= ~(0xC0 >> (x % 4 * 2)) - elif pixels[x, y] < 192: # convert gray to red - buf[(x + y * self.width) / 4] &= ~(0xC0 >> (x % 4 * 2)) - buf[(x + y * self.width) / 4] |= 0x40 >> (x % 4 * 2) - else: # white - buf[(x + y * self.width) / 4] |= 0xC0 >> (x % 4 * 2) - elif(imwidth == self.height and imheight == self.width): - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] < 64: # black - buf[(newx + newy*self.width) / 4] &= ~(0xC0 >> (y % 4 * 2)) - elif pixels[x, y] < 192: # convert gray to red - buf[(newx + newy*self.width) / 4] &= ~(0xC0 >> (y % 4 * 2)) - buf[(newx + newy*self.width) / 4] |= 0x40 >> (y % 4 * 2) - else: # white - buf[(newx + newy*self.width) / 4] |= 0xC0 >> (y % 4 * 2) - return buf - - def display(self, image): - self.send_command(0x10) - for i in range(0, self.width / 4 * self.height): - temp1 = image[i] - j = 0 - while (j < 4): - if ((temp1 & 0xC0) == 0xC0): - temp2 = 0x03 - elif ((temp1 & 0xC0) == 0x00): - temp2 = 0x00 - else: - temp2 = 0x04 - temp2 = (temp2 << 4) & 0xFF - temp1 = (temp1 << 2) & 0xFF - j += 1 - if((temp1 & 0xC0) == 0xC0): - temp2 |= 0x03 - elif ((temp1 & 0xC0) == 0x00): - temp2 |= 0x00 - else: - temp2 |= 0x04 - temp1 = (temp1 << 2) & 0xFF - self.send_data(temp2) - j += 1 - - self.send_command(0x12) - epdconfig.delay_ms(100) - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) - for i in range(0, self.width / 4 * self.height): - for j in range(0, 4): - self.send_data(0x33) - - self.send_command(0x12) - self.ReadBusy() - - def sleep(self): - self.send_command(0x02) # POWER_OFF - self.ReadBusy() - - self.send_command(0x07) # DEEP_SLEEP - self.send_data(0XA5) - - epdconfig.module_exit() -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd7in5.pyc b/Jetson Nano/python2/lib/epd7in5.pyc deleted file mode 100644 index 2b03b1fd7abd40d3d3a6655c3047f8c14f6a7f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4729 zcmbVP&2Jo460g^7k7veqoWvhVKoIYWzyOIuVA)8k048?6Bygg3kcCAwjHlbqOJ>I7 z>CR@1JQ5K24|Wgx2keCtC$1oI*p-6Bk>j2~dqjdOg5R%RyQc?Y5|ha*SJnHfuUA#= z|1e&D_qov-EJ!#kABo%(d3)98y5-6U z_Sm2CZ^^#z0e#y3yao{AY@8}Qi3b}+aGa+I?(r2F=AB%#d+q87 zMIfgr;fNw735$x9B`hg2D#3E4jBDz=lmk-90!DlhAQ8D`WJjdxDefyir1-Gn1;s}c zFG^BUq%6s(B4ZSMxx#aoD&st`1Q4~u`etk0ZX`5EuzbCG?aGqQbfP#)s%_g!3Yb}3 z&Tlpl`?!?>K`i13eeLYq#Z-Zs4D_0h;UrvTW-L+wIGoi-hU%qhV z(&g)V+0Dpq+)Px|WC+u7)L5_JuPBHQ0h^mU-LPw?A^ut0dU>wBolt~o)wXO>tv(Gr z9s>|Fmi|g6Gb??pW`#leX1%2jz2}LcrPZnTj3dIIxg=#tQG*re8|-tE{V3Mi+l6-JHPcC{I+MS=rhKhzq$Q9a0)k(y%C zj2k!Vj4Y1K6mNpaB5cqUPJ4YcyV?)Qj*$&$J76GZGZ;{H=Fv+|Q|ectM5<|UkeHH; z2~|99Tc`Beb`n)6nX0KlS>J3nYpw91D%0O_)C#NVhO?v@6#}g%%|Y|Ww1ykgnAlTm z=k}b|>S^A*r`EwFXZwmW4#HYed#IK)nQF<^uaFo}kvDVjWR3B^0YRd=bh-QNfP>*W zq^;YYbY4(CoQLR!Kevjq5)NU5>Z6gX@e`f8R%=I{Sw3^;RxFTs3Lrl<+ld-cEsk=L zO~>p;b|I;BbhHg zHei!9nm#@@-RmCeIhY8N#T!3KZ$!F33R(J^7H@nfy`t+;1x~1Hu0u^ZtEYvI%Gr-xoY-v$lhyJzU;!Q?!HG9&#hkB z`ao7%7fos|XP^6CYA#W8-S@gDOwL?WhUOYoR%$L-P)*X)4vtMJ#h6yd4_Xn=bHIvUnn71MEBAF9`4=M3YH{*(2b>Kzm=7AT+*zk2;BK zG3|SiB8|;jsNHF&*4l_Fx`Q2;@@%uV5$QL=+MV@e0&L|}o13l8`etLZqYXbwUc{tLID4o=`Vh8*!E`yFq_ zoHjG&q?z;n>Nuu=xja`h2<<}4Y6iIk^STg9t4epmKv2XFx!M3v6Z2&XP0`|w@5SX6 zxat^E3f3W+bidK;;p^jk%pkEKpUh)0d03_uq?^`pW*nVxUC4*J8xu%Bz9uAmMfvh7 zGR3@0Psj+4LheF#D#}@0wtI*>{XVl0F1X4Yp2;TN4gc3k&rRZ~==og9GjeA`Kb)IZ z`0S#sMOoQ;URF}`xMGf=xCMFp#T?Zit_b;|#mHH*>~&qYq$S`Bl0JbJqbxiv3ysCT zv>0j0nFZMoSyzD={{dSktwk=X8J@wP05qnoMrsl@+h>%%mC-LgG`9FELL0a7x$!Tc zF)OQ}LOo^5h@J`b&?OG9U=H9{20qT=l|hZ0!&=Ac6p<=sQN>z37*%gj)IFo>l=O^r zpGwyt2sG9vHP+NQ2pjezTdxneq~DXdE=s+?@cxY#UIJ4s?(Daxv03gbR7F2Vf|JDN z$iw*EH_EPg0c~*SGa%{L7p*vBrePzs5UoV_FL1@n00R~xfxZsLPucEcl7#yVh5D)= zjlAU29Gz$X4d6spt+Zib>#~ntg~G>;C~ALBgxv*0fGtUdT~GR<-KsUCYE{49tH^)a zGF1bn#0NG_k8|RA0>)HuhTuhjz9|)Z@V9+{g>nKzzcvb{R4Nrq1^t~V9WOmmD!F55 f4EKqd^=P{FkuFia&N)q9J> 8) # source 640 - self.send_data(self.width & 0xff) - self.send_data(self.height >> 8) # gate 384 - self.send_data(self.height & 0xff) - - self.send_command(0xe5) # FLASH MODE - self.send_data(0x03) - - return 0 - - def getbuffer(self, image): - # print "bufsiz = ",(self.width/8) * self.height - buf = [0xFF] * ((self.width/8) * self.height) - image_monocolor = image.convert('1') - imwidth, imheight = image_monocolor.size - pixels = image_monocolor.load() - # print "imwidth = %d, imheight = %d",imwidth,imheight - if(imwidth == self.width and imheight == self.height): - print("Horizontal") - for y in range(imheight): - for x in range(imwidth): - # Set the bits for the column of pixels at the current position. - if pixels[x, y] == 0: - buf[(x + y * self.width) / 8] &= ~(0x80 >> (x % 8)) - elif(imwidth == self.height and imheight == self.width): - print("Vertical") - for y in range(imheight): - for x in range(imwidth): - newx = y - newy = self.height - x - 1 - if pixels[x, y] == 0: - buf[(newx + newy*self.width) / 8] &= ~(0x80 >> (y % 8)) - return buf - - def display(self, imageblack, imagered): - self.send_command(0x10) - for i in range(0, self.width / 8 * self.height): - temp1 = imageblack[i] - temp2 = imagered[i] - j = 0 - while (j < 8): - if ((temp2 & 0x80) == 0x00): - temp3 = 0x04 #red - elif ((temp1 & 0x80) == 0x00): - temp3 = 0x00 #black - else: - temp3 = 0x03 #white - - temp3 = (temp3 << 4) & 0xFF - temp1 = (temp1 << 1) & 0xFF - temp2 = (temp2 << 1) & 0xFF - j += 1 - if((temp2 & 0x80) == 0x00): - temp3 |= 0x04 #red - elif ((temp1 & 0x80) == 0x00): - temp3 |= 0x00 #black - else: - temp3 |= 0x03 #white - temp1 = (temp1 << 1) & 0xFF - temp2 = (temp2 << 1) & 0xFF - self.send_data(temp3) - j += 1 - - self.send_command(0x04) # POWER ON - self.ReadBusy() - self.send_command(0x12) # display refresh - epdconfig.delay_ms(100) - self.ReadBusy() - - def Clear(self): - self.send_command(0x10) - for i in range(0, self.width / 8 * self.height): - self.send_data(0x33) - self.send_data(0x33) - self.send_data(0x33) - self.send_data(0x33) - - self.send_command(0x04) # POWER ON - self.ReadBusy() - self.send_command(0x12) # display refresh - epdconfig.delay_ms(100) - self.ReadBusy() - - def sleep(self): - self.send_command(0x02) # POWER_OFF - self.ReadBusy() - - self.send_command(0x07) # DEEP_SLEEP - self.send_data(0XA5) - - epdconfig.module_exit() -### END OF FILE ### - diff --git a/Jetson Nano/python2/lib/epd7in5bc.pyc b/Jetson Nano/python2/lib/epd7in5bc.pyc deleted file mode 100644 index 4aff03d2d03a06a13fee3efec7124ece2d69e9d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4443 zcmbVPTW=Fb6h5;~9NS3$zKNF(|Dp2AOZf3)I=7*c(Pz5$jE{x!GHu=2?phn$U~7^3mMLvD-Piu`wV|2 z`@jSHz=*_L@yhj?bO(&dB|On0NQkwus&FMPY?Q%ro-)`cqs$=p|p%{JmJG&7e~K{lxB zXb$Y9n{&5xoWkNpw3W`kJeSU|Mmoyf5ZUtlwV4~U@gSsoHi+-U^qAwbSFT;1y`h`k z3GMQoSWS%wppL@YQW4*xB-#gVYU)JIE}nq-XKmy3Vs&b5E2a_UvTfM7Tz(&XGy)=K zB>Ch`8dzpo1B;M!0=uFqedvi{tTn9EdDHD_eul9Lw=96=v<9X_4mrt5G?$eJ?OleSwD}6Y`XsAP+&jfUP z!%cS{g)0+}s&jP~6$gapSwpVL4Ub>1tc9(kJcrRZW_Ax8ZH2Y45{1qrF4`}Oa-17h zf=gIdji7g81~V_7rXR4b3*$qzb2THa30B8Blq~=XqlO#;jB|veMFCaQoufp+2}(3B z51na)sYWY$*R-K-O)eF%Kt2`lP9YVb8BPUgM!JR3Zedp{;GMBlz&pEB0h&Fj0L|W1 zfM#DRK-1&gc$bFGShYE}U#5G4Bd z8-`eK1{<|di?zQOvQNPJ6C_motcCxp*b$X1{nzjvT>ufY*9>?CZxj`8v_r``$$jt0 z_#Ss39nnfcOBfJ^{kH%&BDn189(YgoGebtk$J?H48zS7{x{bRzLzsW*Nqa!rxSk;b zCNV(o@G^@>8 zv!(0Wx@&dxaMfLRqm9m*-3)7y+Pv6)IF$r(7W{;s<<>91ZJU|NcM+lG0M^dgfPa7DAWN=h5uE5X8I4=H~ z+Y^R(N47I^5NKyk$)R!q{aM+3%H-oDcgXi|cU8HzZCGe;XJB9z; z3Gu-0$?cPFyI#VvIwtc;5Iffvxa0;z`EWNAV6cL{IyaM>qgOkjR=@~J-1${!kmjn>f7eh)U{MI$KE@0tQWSs-?|$@B5D-Y&yW0n#WR zub}d%*^44wU}1MXJ=@6?zdu3f#qTYahgahFoU~m{R{(ad+TOOLr$=$Z>vNpddpF5( zr%CC`F?01oj!$9G<@gPgnzq;e6qf2EC+y5Gqd{!_0w&@$>@uR4r`gjRZGwk8XtlTq zrYG7I(B^c2j=nGH;dbsvgNo^{L-(_RsViA7Y4u0>kKl?l$)Q*gtE~Zd#?RTbeF!(L z`!gfguDwdxXMKOZTT$ZY0^SOLhKgaWv`FHZW+(L|#JG!*or@i`WpWCQ! T=bbkfj&M8Pfg_o$$$I|+u#vR9 diff --git a/Jetson Nano/python2/lib/epdconfig.py b/Jetson Nano/python2/lib/epdconfig.py deleted file mode 100644 index 403d6a1..0000000 --- a/Jetson Nano/python2/lib/epdconfig.py +++ /dev/null @@ -1,97 +0,0 @@ -# /***************************************************************************** -# * | File : epdconfig.py -# * | Author : Waveshare team -# * | Function : Hardware underlying interface -# * | Info : -# *---------------- -# * | This version: V1.0 -# * | Date : 2019-06-06 -# * | Info : -# ****************************************************************************** -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documnetation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS OR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -# THE SOFTWARE. -# - -import Jetson.GPIO as GPIO -import time - -import ctypes -# import spidev - -# Pin definition -RST_PIN = 17 -DC_PIN = 25 -CS_PIN = 8 -BUSY_PIN = 24 - -# SPI device, bus = 0, device = 0 -# SPI = spidev.SpiDev(0, 0) - -clib = ctypes.cdll.LoadLibrary -spi = clib('../lib/sysfs_software_spi.so') -# gpio2 = clib('../lib/sysfs_gpio.so') - -def digital_write(pin, value): - GPIO.output(pin, value) - -def digital_read(pin): - return GPIO.input(BUSY_PIN) - # return gpio2.SYSFS_GPIO_Read(15) - -def delay_ms(delaytime): - time.sleep(delaytime / 1000.0) - -def spi_writebyte(data): - # SPI.writebytes(data) - spi.SYSFS_software_spi_transfer(data[0]) - -def module_init(): - # print("module_init") - GPIO.setmode(GPIO.BCM) - GPIO.setwarnings(False) - # print("RST_PIN") - GPIO.setup(RST_PIN, GPIO.OUT) - # print("DC_PIN") - GPIO.setup(DC_PIN, GPIO.OUT) - # print("CS_PIN") - GPIO.setup(CS_PIN, GPIO.OUT) - # print("BUSY_PIN") - GPIO.setup(BUSY_PIN, GPIO.IN) - # SPI.max_speed_hz = 2000000 - # SPI.mode = 0b00 - - # gpio2.SYSFS_GPIO_Export(15) - # gpio2.SYSFS_GPIO_Direction(15, 0) - - spi.SYSFS_software_spi_begin() - return 0 - - -def module_exit(): - print("spi end") - spi.SYSFS_software_spi_end() - - print("close 5V, Module enters 0 power consumption ...") - GPIO.output(RST_PIN, 0) - GPIO.output(DC_PIN, 0) - - GPIO.cleanup() - - - -### END OF FILE ### diff --git a/Jetson Nano/python2/lib/epdconfig.pyc b/Jetson Nano/python2/lib/epdconfig.pyc deleted file mode 100644 index da933d7a75550aaad8dc0b6e107eb57c1c4b678c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1793 zcmbVNZEG7x5S~3r){CWBY3igVrRbwR1i6J43N3B0gIyO#2`9T?K~T=OYq92hcigV( z2>i|YUit&`EAj)9XXfMx*9nN;Y3H7qeS3Chc2s%aX}x~ed==B;3GjW2=Kh7y_$f+= z&J~T-jT+E6xWN?~S4hKBB@J97U8V6F=^BmeWGZytpz|h;TVz_K*XSDStdp+OTcUBB zbVERgbW^}R(k%fSq}K&>Nw)>uXC|Y52dwM|JVSe*;TDSqi*F#@w-AHDc4AMr-Q1nI ziObIXWmK4n%k98rF&~dx1#K72eGTE|fLBCUimn4vIQFQo&@t@uSYL(Me|hl2uK{E; zpU-^R!K>sp^)-C|j*^+_1CR*!0BAwQ1o)6f2H@tY~5RGJSn}U*OH|!jbP9`r8hC)B&Wmcfn#;_Yog^Bc!(ErPb zHxx#j0G}L&m~4Vo=`r4IIE6q4{quC`I&UwG&~%A0xiIrh4ALfv=G?ggMLwI1pIo?~ zfmf!tb(@~WTv`SXS>YeUGCCRUjcz5~QO&P-AAlIEr=FUouka`U2lAjAx%<` zfR!G(2O4EQ)q$Mx7nwGmS?=sU_v@t%7b&&r)JZV+q6EV@^YNMGp67+5BThb<_u}|S z?#r`XG4a*e9We|UBAbbTIrThW-Oohe)J$!u&a=c!Y-;`QP+b>-g0AWW z56ZXRQgfg@uk1x71P5csSP!&XA!K@8z~+p>VlhHAWlq_&hr1^H}l5&V=Uu%Yf?4U3TmpWxVa!|`qvu9$RB(lO`7U@HKT13TM>S~NyEm;uquuzW9JB1r8_-=;ZL9BWl h=JRWr2fy(=`A67L?Vw# Jetson Nano/RPI(BCM) -VCC -> 3.3 -GND -> GND -DIN -> 10(SPI0_MOSI) -CLK -> 11(SPI0_SCK) -CS -> 8(SPI0_CS0) -DC -> 25 -RST -> 17 -BUSY -> 24 - -3.安装库: - sudo apt-get update - sudo apt-get install python3-pip - sudo apt-get install python3-pil - sudo apt-get install python3-numpy - sudo pip3 install Jetson.GPIO - -4.基本使用: -由于本工程是一个综合工程,对于使用而言,你可能需要阅读以下内容: -你可以在examples\目录中查看测试程序 -请注意你购买的是哪一款的墨水屏。 -栗子1: - 如果你购买的5.83inch e-paper,那么你应该执行命令: - sudo python epd_5in83_test.py -栗子2: - 如果你购买的2.9inch e-paper (B),由于2.9寸的B型和C型是公用的驱动代码, - 那么你应该执行命令: - sudo python epd_2in9bc_test.py - -注意:对于epd_1in54_V2_test.py和epd_2in13_V2_test.py请注意你的屏幕背面是否贴有V2标识。 \ No newline at end of file diff --git a/Jetson Nano/python2/readme_EN.txt b/Jetson Nano/python2/readme_EN.txt deleted file mode 100644 index 2904db3..0000000 --- a/Jetson Nano/python2/readme_EN.txt +++ /dev/null @@ -1,56 +0,0 @@ -/***************************************************************************** -* | File : Readme_CN.txt -* | Author : Waveshare team -* | Function : Help with use -* | Info : -*---------------- -* | This version: V1.0 -* | Date : 2019-06-20 -* | Info : Here is an English version of the documentation for your quick use. -******************************************************************************/ -This file is to help you use this routine. -Since our ink screens are getting more and more, it is not convenient for our maintenance, so all the ink screen programs are made into one project. -A brief description of the use of this project is here: - -1. Basic information: -This routine was developed based on the jetson-nano-sd-r32.1-2019-03-18 system -image. Since the current system does not have a hardware SPI,Currently developed -with analog SPI, so the ink screen refresh rate is slower; -This routine was developed based on the Jetson Nano and the routines were -verified on the Jetson Nano; -This routine has been verified using the e-paper Driver HAT module. -You can view the corresponding test routines in the examples\ -of the project. - -2. Pin connection: -Pin connections can be viewed in \lib\epdconfig.py and will be repeated here: -EPD => Jetson Nano/RPI(BCM) -VCC -> 3.3 -GND -> GND -DIN -> 10(SPI0_MOSI) -CLK -> 11(SPI0_SCK) -CS -> 8(SPI0_CS0) -DC -> 25 -RST -> 17 -BUSY -> 24 - -3.Installation library - sudo apt-get update - sudo apt-get install python3-pip - sudo apt-get install python3-pil - sudo apt-get install python3-numpy - sudo pip3 install Jetson.GPIO - -4. Basic use: -Since this project is a comprehensive project, you may need to read the following for use: -You can view the test program in the examples\ directory. -Please note which ink screen you purchased. -Chestnut 1: -     If you purchased 5.83inch e-paper, then you should execute the command: -     Sudo python epd_5in83_test.py -Chestnut 2: -     If you buy a 2.9inch e-paper (B), since the 2.9-inch Type B and Type C are common driver codes, -     Then you should execute the command: -     Sudo python epd_2in9bc_test.py -     -Note: For epd_1in54_V2_test.py and epd_2in13_V2_test.py, please note that the V2 logo is attached to the back of your screen. \ No newline at end of file diff --git a/Jetson Nano/python3/examples/epd_1in54_V2_test.py b/Jetson Nano/python3/examples/epd_1in54_V2_test.py deleted file mode 100644 index 2e51114..0000000 --- a/Jetson Nano/python3/examples/epd_1in54_V2_test.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd1in54_V2 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd1in54_V2 Demo") - - epd = epd1in54_V2.EPD() - print("init and Clear") - epd.init() - epd.Clear(0xFF) - time.sleep(1) - - # Drawing on the image - print("1.Drawing on the image...") - image = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - - draw = ImageDraw.Draw(image) - font = ImageFont.truetype('../lib/Font.ttc', 24) - draw.rectangle((0, 10, 200, 34), fill = 0) - draw.text((8, 12), 'hello world', font = font, fill = 255) - draw.text((8, 36), u'微雪电子', font = font, fill = 0) - draw.line((16, 60, 56, 60), fill = 0) - draw.line((56, 60, 56, 110), fill = 0) - draw.line((16, 110, 56, 110), fill = 0) - draw.line((16, 110, 16, 60), fill = 0) - draw.line((16, 60, 56, 110), fill = 0) - draw.line((56, 60, 16, 110), fill = 0) - draw.arc((90, 60, 150, 120), 0, 360, fill = 0) - draw.rectangle((16, 130, 56, 180), fill = 0) - draw.chord((90, 130, 150, 190), 0, 360, fill = 0) - epd.display(epd.getbuffer(image.rotate(90))) - time.sleep(2) - - # read bmp file - print("2.read bmp file...") - image = Image.open('../pic/1in54.bmp') - epd.display(epd.getbuffer(image)) - time.sleep(2) - - # read bmp file on window - print("3.read bmp file on window...") - epd.Clear(0xFF) - image1 = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - image1.paste(bmp, (50,50)) - epd.display(epd.getbuffer(image1)) - time.sleep(2) - - # partial update - print("4.show time...") - time_image = Image.new('1', (epd.width, epd.height), 255) - epd.displayPartBaseImage(epd.getbuffer(time_image)) - - time_draw = ImageDraw.Draw(time_image) - num = 0 - while (True): - time_draw.rectangle((10, 10, 120, 50), fill = 255) - time_draw.text((10, 10), time.strftime('%H:%M:%S'), font = font, fill = 0) - newimage = time_image.crop([10, 10, 120, 50]) - time_image.paste(newimage, (10,10)) - epd.displayPart(epd.getbuffer(time_image)) - num = num + 1 - if(num == 10): - break - - print("Clear...") - epd.init() - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() \ No newline at end of file diff --git a/Jetson Nano/python3/examples/epd_1in54_test.py b/Jetson Nano/python3/examples/epd_1in54_test.py deleted file mode 100644 index 7844db3..0000000 --- a/Jetson Nano/python3/examples/epd_1in54_test.py +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd1in54 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd1in54 Demo") - - epd = epd1in54.EPD() - print("init and Clear") - epd.init(epd.lut_full_update) - epd.Clear(0xFF) - - # Drawing on the image - print("1.Drawing on the image...") - image = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - - draw = ImageDraw.Draw(image) - font = ImageFont.truetype('../lib/Font.ttc', 24) - draw.rectangle((0, 10, 200, 34), fill = 0) - draw.text((8, 12), 'hello world', font = font, fill = 255) - draw.text((8, 36), u'微雪电子', font = font, fill = 0) - draw.line((16, 60, 56, 60), fill = 0) - draw.line((56, 60, 56, 110), fill = 0) - draw.line((16, 110, 56, 110), fill = 0) - draw.line((16, 110, 16, 60), fill = 0) - draw.line((16, 60, 56, 110), fill = 0) - draw.line((56, 60, 16, 110), fill = 0) - draw.arc((90, 60, 150, 120), 0, 360, fill = 0) - draw.rectangle((16, 130, 56, 180), fill = 0) - draw.chord((90, 130, 150, 190), 0, 360, fill = 0) - epd.display(epd.getbuffer(image.rotate(90))) - time.sleep(2) - - # read bmp file - print("2.read bmp file...") - image = Image.open('../pic/1in54.bmp') - epd.display(epd.getbuffer(image)) - time.sleep(2) - - # read bmp file on window - print("3.read bmp file on window...") - epd.Clear(0xFF) - image1 = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - image1.paste(bmp, (50,50)) - epd.display(epd.getbuffer(image1)) - time.sleep(2) - - # # partial update - print("4.show time...") - epd.init(epd.lut_partial_update) - epd.Clear(0xFF) - - time_image = Image.new('1', (epd.width, epd.height), 255) - time_draw = ImageDraw.Draw(time_image) - num = 0 - while (True): - time_draw.rectangle((10, 10, 120, 50), fill = 255) - time_draw.text((10, 10), time.strftime('%H:%M:%S'), font = font, fill = 0) - newimage = time_image.crop([10, 10, 120, 50]) - time_image.paste(newimage, (10,10)) - epd.display(epd.getbuffer(time_image)) - num = num + 1 - if(num == 10): - break - - print("Clear...") - epd.init(epd.lut_full_update) - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/examples/epd_1in54c_test.py b/Jetson Nano/python3/examples/epd_1in54c_test.py deleted file mode 100644 index 7374e6d..0000000 --- a/Jetson Nano/python3/examples/epd_1in54c_test.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd1in54c -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd1in54c Demo") - - epd = epd1in54c.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("1.Drawing on the image...") - blackimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - yellowimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - - font = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - drawblack = ImageDraw.Draw(blackimage) - drawyellow = ImageDraw.Draw(yellowimage) - drawblack.rectangle((0, 10, 200, 34), fill = 0) - drawblack.text((8, 12), 'hello world', font = font, fill = 255) - drawblack.text((8, 36), u'微雪电子', font = font, fill = 0) - drawblack.line((10, 100, 70, 100), fill = 0) - drawblack.line((40, 70, 40, 130), fill = 0) - - drawyellow.rectangle((10, 70, 70, 130), outline = 0) - drawyellow.arc((80, 70, 140, 130), 0, 360, fill = 0) - drawyellow.chord((90, 80, 130, 120), 0, 360, fill = 0) - epd.display(epd.getbuffer(blackimage),epd.getbuffer(yellowimage)) - time.sleep(1) - - # read bmp file - print("2.read bmp file...") - blackimage = Image.open('../pic/1in54c-b.bmp') - yellowimage = Image.open('../pic/1in54c-y.bmp') - epd.display(epd.getbuffer(blackimage),epd.getbuffer(yellowimage)) - time.sleep(1) - - # read bmp file on window - print("3.read bmp file on window...") - blackimage1 = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - yellowimage2 = Image.new('1', (epd.width, epd.height), 255) - - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (50,50)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(yellowimage2)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/examples/epd_2in13d_test.py b/Jetson Nano/python3/examples/epd_2in13d_test.py deleted file mode 100644 index 883ccb3..0000000 --- a/Jetson Nano/python3/examples/epd_2in13d_test.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in13d -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in13d Demo") - - epd = epd2in13d.EPD() - print("init and Clear") - epd.init() - epd.Clear(0xFF) - - font15 = ImageFont.truetype('../lib/Font.ttc', 15) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(Himage) - draw.rectangle([(0,0),(50,50)],outline = 0) - draw.rectangle([(55,0),(100,50)],fill = 0) - draw.line([(0,0),(50,50)], fill = 0,width = 1) - draw.line([(0,50),(50,0)], fill = 0,width = 1) - draw.chord((10, 60, 50, 100), 0, 360, fill = 0) - draw.ellipse((55, 60, 95, 100), outline = 0) - draw.pieslice((55, 60, 95, 100), 90, 180, outline = 0) - draw.pieslice((55, 60, 95, 100), 270, 360, fill = 0) - draw.polygon([(110,0),(110,50),(150,25)],outline = 0) - draw.polygon([(190,0),(190,50),(150,25)],fill = 0) - draw.text((110, 60), 'e-Paper demo', font = font15, fill = 0) - draw.text((110, 80), u'微雪电子', font = font15, fill = 0) - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("3.read bmp file") - Himage = Image.open('../pic/2in13d.bmp') - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("4.read bmp file on window") - Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - Himage2.paste(bmp, (20,20)) - epd.display(epd.getbuffer(Himage2)) - time.sleep(2) - - # # partial update - print("5.show time...") - epd.init() - epd.Clear(0xFF) - - time_image = Image.new('1', (epd.width, epd.height), 255) - time_draw = ImageDraw.Draw(time_image) - num = 0 - while (True): - time_draw.rectangle((10, 10, 120, 50), fill = 255) - time_draw.text((10, 10), time.strftime('%H:%M:%S'), font = font24, fill = 0) - newimage = time_image.crop([10, 10, 120, 50]) - time_image.paste(newimage, (10,10)) - epd.DisplayPartial(epd.getbuffer(time_image)) - num = num + 1 - if(num == 10): - break - - print("Clear...") - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/examples/epd_2in7b_test.py b/Jetson Nano/python3/examples/epd_2in7b_test.py deleted file mode 100644 index ece7390..0000000 --- a/Jetson Nano/python3/examples/epd_2in7b_test.py +++ /dev/null @@ -1,98 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in7b -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in7b Demo") - - epd = epd2in7b.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("Drawing") - blackimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - redimage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - HBlackimage = Image.new('1', (epd.height, epd.width), 255) # 298*126 - HRedimage = Image.new('1', (epd.height, epd.width), 255) # 298*126 - - drawblack = ImageDraw.Draw(HBlackimage) - drawred = ImageDraw.Draw(HRedimage) - drawblack.text((10, 0), 'hello world', font = font24, fill = 0) - drawblack.text((10, 20), '2.9inch e-Paper', font = font24, fill = 0) - drawblack.text((150, 0), u'微雪电子', font = font24, fill = 0) - drawblack.line((20, 50, 70, 100), fill = 0) - drawblack.line((70, 50, 20, 100), fill = 0) - drawblack.rectangle((20, 50, 70, 100), outline = 0) - drawred.line((165, 50, 165, 100), fill = 0) - drawred.line((140, 75, 190, 75), fill = 0) - drawred.arc((140, 50, 190, 100), 0, 360, fill = 0) - drawred.rectangle((80, 50, 130, 100), fill = 0) - drawred.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRedimage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - LBlackimage = Image.new('1', (epd.width, epd.height), 255) # 126*298 - LRedimage = Image.new('1', (epd.width, epd.height), 255) # 126*298 - drawblack = ImageDraw.Draw(LBlackimage) - drawred = ImageDraw.Draw(LRedimage) - - drawblack.text((2, 0), 'hello world', font = font18, fill = 0) - drawblack.text((2, 20), '2.9inch epd', font = font18, fill = 0) - drawblack.text((20, 50), u'微雪电子', font = font18, fill = 0) - drawblack.line((10, 90, 60, 140), fill = 0) - drawblack.line((60, 90, 10, 140), fill = 0) - drawblack.rectangle((10, 90, 60, 140), outline = 0) - drawred.line((95, 90, 95, 140), fill = 0) - drawred.line((70, 115, 120, 115), fill = 0) - drawred.arc((70, 90, 120, 140), 0, 360, fill = 0) - drawred.rectangle((10, 150, 60, 200), fill = 0) - drawred.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRedimage)) - time.sleep(2) - - print("3.read bmp file") - HBlackimage = Image.open('../pic/2in7b-b.bmp') - HRedimage = Image.open('../pic/2in7b-r.bmp') - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRedimage)) - time.sleep(2) - - print("4.read bmp file on window") - blackimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126 - redimage1 = Image.new('1', (epd.height, epd.width), 255) # 298*126 - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (50,10)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/examples/epd_2in9_test.py b/Jetson Nano/python3/examples/epd_2in9_test.py deleted file mode 100644 index 59c7ca1..0000000 --- a/Jetson Nano/python3/examples/epd_2in9_test.py +++ /dev/null @@ -1,102 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in9 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in9 Demo") - - epd = epd2in9.EPD() - print("init and Clear") - epd.init(epd.lut_full_update) - epd.Clear(0xFF) - - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(Himage) - draw.text((10, 0), 'hello world', font = font24, fill = 0) - draw.text((10, 20), '2.9inch e-Paper', font = font24, fill = 0) - draw.text((150, 0), u'微雪电子', font = font24, fill = 0) - draw.line((20, 50, 70, 100), fill = 0) - draw.line((70, 50, 20, 100), fill = 0) - draw.rectangle((20, 50, 70, 100), outline = 0) - draw.line((165, 50, 165, 100), fill = 0) - draw.line((140, 75, 190, 75), fill = 0) - draw.arc((140, 50, 190, 100), 0, 360, fill = 0) - draw.rectangle((80, 50, 130, 100), fill = 0) - draw.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - Limage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - draw = ImageDraw.Draw(Limage) - draw.text((2, 0), 'hello world', font = font18, fill = 0) - draw.text((2, 20), '2.9inch epd', font = font18, fill = 0) - draw.text((20, 50), u'微雪电子', font = font18, fill = 0) - draw.line((10, 90, 60, 140), fill = 0) - draw.line((60, 90, 10, 140), fill = 0) - draw.rectangle((10, 90, 60, 140), outline = 0) - draw.line((95, 90, 95, 140), fill = 0) - draw.line((70, 115, 120, 115), fill = 0) - draw.arc((70, 90, 120, 140), 0, 360, fill = 0) - draw.rectangle((10, 150, 60, 200), fill = 0) - draw.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(Limage)) - time.sleep(2) - - print("3.read bmp file") - Himage = Image.open('../pic/2in9.bmp') - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("4.read bmp file on window") - Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - Himage2.paste(bmp, (50,10)) - epd.display(epd.getbuffer(Himage2)) - time.sleep(2) - - # partial update - print("5.show time") - epd.init(epd.lut_partial_update) - epd.Clear(0xFF) - time_image = Image.new('1', (epd.height, epd.width), 255) - time_draw = ImageDraw.Draw(time_image) - num = 0 - while (True): - time_draw.rectangle((10, 10, 120, 50), fill = 255) - time_draw.text((10, 10), time.strftime('%H:%M:%S'), font = font24, fill = 0) - newimage = time_image.crop([10, 10, 120, 50]) - time_image.paste(newimage, (10,10)) - epd.display(epd.getbuffer(time_image)) - - num = num + 1 - if(num == 10): - break - - print("Clear...") - epd.init(epd.lut_full_update) - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/examples/epd_2in9d_test.py b/Jetson Nano/python3/examples/epd_2in9d_test.py deleted file mode 100644 index 34f5f71..0000000 --- a/Jetson Nano/python3/examples/epd_2in9d_test.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd2in9d -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd2in9d Demo") - - epd = epd2in9d.EPD() - print("init and Clear") - epd.init() - epd.Clear(0xFF) - - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - Himage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(Himage) - draw.text((10, 0), 'hello world', font = font24, fill = 0) - draw.text((10, 20), '2.9inch e-Paper d', font = font24, fill = 0) - draw.text((150, 0), u'微雪电子', font = font24, fill = 0) - draw.line((20, 50, 70, 100), fill = 0) - draw.line((70, 50, 20, 100), fill = 0) - draw.rectangle((20, 50, 70, 100), outline = 0) - draw.line((165, 50, 165, 100), fill = 0) - draw.line((140, 75, 190, 75), fill = 0) - draw.arc((140, 50, 190, 100), 0, 360, fill = 0) - draw.rectangle((80, 50, 130, 100), fill = 0) - draw.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - Limage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - draw = ImageDraw.Draw(Limage) - draw.text((2, 0), 'hello world', font = font18, fill = 0) - draw.text((2, 20), '2.9inch epd d', font = font18, fill = 0) - draw.text((20, 50), u'微雪电子', font = font18, fill = 0) - draw.line((10, 90, 60, 140), fill = 0) - draw.line((60, 90, 10, 140), fill = 0) - draw.rectangle((10, 90, 60, 140), outline = 0) - draw.line((95, 90, 95, 140), fill = 0) - draw.line((70, 115, 120, 115), fill = 0) - draw.arc((70, 90, 120, 140), 0, 360, fill = 0) - draw.rectangle((10, 150, 60, 200), fill = 0) - draw.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(Limage)) - time.sleep(2) - - print("3.read bmp file") - Himage = Image.open('../pic/2in9d.bmp') - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("4.read bmp file on window") - Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - Himage2.paste(bmp, (50,10)) - epd.display(epd.getbuffer(Himage2)) - time.sleep(2) - - # # partial update - print("5.show time...") - epd.init() - epd.Clear(0xFF) - - time_image = Image.new('1', (epd.width, epd.height), 255) - time_draw = ImageDraw.Draw(time_image) - num = 0 - while (True): - time_draw.rectangle((10, 10, 120, 50), fill = 255) - time_draw.text((10, 10), time.strftime('%H:%M:%S'), font = font24, fill = 0) - newimage = time_image.crop([10, 10, 120, 50]) - time_image.paste(newimage, (10,10)) - epd.display(epd.getbuffer(time_image)) - num = num + 1 - if(num == 10): - break - - print("Clear...") - epd.Clear(0xFF) - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/examples/epd_4in2_test.py b/Jetson Nano/python3/examples/epd_4in2_test.py deleted file mode 100644 index 6343f58..0000000 --- a/Jetson Nano/python3/examples/epd_4in2_test.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd4in2 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd4in2 Demo") - - epd = epd4in2.EPD() - print("init and Clear") - epd.init() - epd.Clear() - - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - Himage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - draw = ImageDraw.Draw(Himage) - draw.text((10, 0), 'hello world', font = font24, fill = 0) - draw.text((10, 20), '4.2inch e-Paper', font = font24, fill = 0) - draw.text((150, 0), u'微雪电子', font = font24, fill = 0) - draw.line((20, 50, 70, 100), fill = 0) - draw.line((70, 50, 20, 100), fill = 0) - draw.rectangle((20, 50, 70, 100), outline = 0) - draw.line((165, 50, 165, 100), fill = 0) - draw.line((140, 75, 190, 75), fill = 0) - draw.arc((140, 50, 190, 100), 0, 360, fill = 0) - draw.rectangle((80, 50, 130, 100), fill = 0) - draw.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - Limage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(Limage) - draw.text((2, 0), 'hello world', font = font18, fill = 0) - draw.text((2, 20), '4.2inch epd', font = font18, fill = 0) - draw.text((20, 50), u'微雪电子', font = font18, fill = 0) - draw.line((10, 90, 60, 140), fill = 0) - draw.line((60, 90, 10, 140), fill = 0) - draw.rectangle((10, 90, 60, 140), outline = 0) - draw.line((95, 90, 95, 140), fill = 0) - draw.line((70, 115, 120, 115), fill = 0) - draw.arc((70, 90, 120, 140), 0, 360, fill = 0) - draw.rectangle((10, 150, 60, 200), fill = 0) - draw.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(Limage)) - time.sleep(2) - - print("3.read bmp file") - Himage = Image.open('../pic/4in2.bmp') - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("4.read bmp file on window") - Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - Himage2.paste(bmp, (50,10)) - epd.display(epd.getbuffer(Himage2)) - time.sleep(2) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/examples/epd_4in2bc_test.py b/Jetson Nano/python3/examples/epd_4in2bc_test.py deleted file mode 100644 index ad1abda..0000000 --- a/Jetson Nano/python3/examples/epd_4in2bc_test.py +++ /dev/null @@ -1,95 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd4in2bc -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd4in2bc Demo") - - epd = epd4in2bc.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("Drawing") - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - HBlackimage = Image.new('1', (epd.width, epd.height), 255) # 298*126 - HRYimage = Image.new('1', (epd.width, epd.height), 255) # 298*126 ryimage: red or yellow image - drawblack = ImageDraw.Draw(HBlackimage) - drawry = ImageDraw.Draw(HRYimage) - drawblack.text((10, 0), 'hello world', font = font24, fill = 0) - drawblack.text((10, 20), '4.2inch e-Paper bc', font = font24, fill = 0) - drawblack.text((150, 0), u'微雪电子', font = font24, fill = 0) - drawblack.line((20, 50, 70, 100), fill = 0) - drawblack.line((70, 50, 20, 100), fill = 0) - drawblack.rectangle((20, 50, 70, 100), outline = 0) - drawry.line((165, 50, 165, 100), fill = 0) - drawry.line((140, 75, 190, 75), fill = 0) - drawry.arc((140, 50, 190, 100), 0, 360, fill = 0) - drawry.rectangle((80, 50, 130, 100), fill = 0) - drawry.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - LBlackimage = Image.new('1', (epd.height, epd.width), 255) # 126*298 - LRYimage = Image.new('1', (epd.height, epd.width), 255) # 126*298 - drawblack = ImageDraw.Draw(LBlackimage) - drawry = ImageDraw.Draw(LRYimage) - - drawblack.text((2, 0), 'hello world', font = font18, fill = 0) - drawblack.text((2, 20), '4.2inch epd bc', font = font18, fill = 0) - drawblack.text((20, 50), u'微雪电子', font = font18, fill = 0) - drawblack.line((10, 90, 60, 140), fill = 0) - drawblack.line((60, 90, 10, 140), fill = 0) - drawblack.rectangle((10, 90, 60, 140), outline = 0) - drawry.line((95, 90, 95, 140), fill = 0) - drawry.line((70, 115, 120, 115), fill = 0) - drawry.arc((70, 90, 120, 140), 0, 360, fill = 0) - drawry.rectangle((10, 150, 60, 200), fill = 0) - drawry.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRYimage)) - time.sleep(2) - - print("3.read bmp file") - HBlackimage = Image.open('../pic/4in2b-b.bmp') - HRYimage = Image.open('../pic/4in2b-r.bmp') - # HBlackimage = Image.open('../pic/4in2c-b.bmp') - # HRYimage = Image.open('../pic/4in2c-y.bmp') - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - print("4.read bmp file on window") - blackimage1 = Image.new('1', (epd.width, epd.height), 255) # 298*126 - redimage1 = Image.new('1', (epd.width, epd.height), 255) # 298*126 - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (50,10)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/examples/epd_5in83_test.py b/Jetson Nano/python3/examples/epd_5in83_test.py deleted file mode 100644 index cb7858c..0000000 --- a/Jetson Nano/python3/examples/epd_5in83_test.py +++ /dev/null @@ -1,84 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd5in83 -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd5in83 Demo") - - epd = epd5in83.EPD() - print("init and Clear") - epd.init() - epd.Clear() - - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - Himage = Image.new('1', (epd.width, epd.height), 255) # 255: clear the frame - draw = ImageDraw.Draw(Himage) - draw.text((10, 0), 'hello world', font = font24, fill = 0) - draw.text((10, 20), '5.83inch e-Paper', font = font24, fill = 0) - draw.text((150, 0), u'微雪电子', font = font24, fill = 0) - draw.line((20, 50, 70, 100), fill = 0) - draw.line((70, 50, 20, 100), fill = 0) - draw.rectangle((20, 50, 70, 100), outline = 0) - draw.line((165, 50, 165, 100), fill = 0) - draw.line((140, 75, 190, 75), fill = 0) - draw.arc((140, 50, 190, 100), 0, 360, fill = 0) - draw.rectangle((80, 50, 130, 100), fill = 0) - draw.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - Limage = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - draw = ImageDraw.Draw(Limage) - draw.text((2, 0), 'hello world', font = font18, fill = 0) - draw.text((2, 20), '5.83inch epd', font = font18, fill = 0) - draw.text((20, 50), u'微雪电子', font = font18, fill = 0) - draw.line((10, 90, 60, 140), fill = 0) - draw.line((60, 90, 10, 140), fill = 0) - draw.rectangle((10, 90, 60, 140), outline = 0) - draw.line((95, 90, 95, 140), fill = 0) - draw.line((70, 115, 120, 115), fill = 0) - draw.arc((70, 90, 120, 140), 0, 360, fill = 0) - draw.rectangle((10, 150, 60, 200), fill = 0) - draw.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(Limage)) - time.sleep(2) - - print("3.read bmp file") - Himage = Image.open('../pic/5in83.bmp') - epd.display(epd.getbuffer(Himage)) - time.sleep(2) - - print("4.read bmp file on window") - Himage2 = Image.new('1', (epd.height, epd.width), 255) # 255: clear the frame - bmp = Image.open('../pic/100x100.bmp') - Himage2.paste(bmp, (50,10)) - epd.display(epd.getbuffer(Himage2)) - time.sleep(2) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/examples/epd_5in83bc_test.py b/Jetson Nano/python3/examples/epd_5in83bc_test.py deleted file mode 100644 index b5e3b39..0000000 --- a/Jetson Nano/python3/examples/epd_5in83bc_test.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/python -# -*- coding:utf-8 -*- -import sys -sys.path.append(r'../lib') - -import epd5in83bc -import epdconfig -import time -from PIL import Image,ImageDraw,ImageFont -import traceback - -try: - print("epd5in83bc Demo") - - epd = epd5in83bc.EPD() - print("init and Clear") - epd.init() - epd.Clear() - time.sleep(1) - - # Drawing on the image - print("Drawing") - font24 = ImageFont.truetype('../lib/Font.ttc', 24) - font18 = ImageFont.truetype('../lib/Font.ttc', 18) - - # Drawing on the Horizontal image - print("1.Drawing on the Horizontal image...") - HBlackimage = Image.new('1', (epd.width, epd.height), 255) # 298*126 - HRYimage = Image.new('1', (epd.width, epd.height), 255) # 298*126 ryimage: red or yellow image - drawblack = ImageDraw.Draw(HBlackimage) - drawry = ImageDraw.Draw(HRYimage) - drawblack.text((10, 0), 'hello world', font = font24, fill = 0) - drawblack.text((10, 20), '5.83inch e-Paper bc', font = font24, fill = 0) - drawblack.text((150, 0), u'微雪电子', font = font24, fill = 0) - drawblack.line((20, 50, 70, 100), fill = 0) - drawblack.line((70, 50, 20, 100), fill = 0) - drawblack.rectangle((20, 50, 70, 100), outline = 0) - drawry.line((165, 50, 165, 100), fill = 0) - drawry.line((140, 75, 190, 75), fill = 0) - drawry.arc((140, 50, 190, 100), 0, 360, fill = 0) - drawry.rectangle((80, 50, 130, 100), fill = 0) - drawry.chord((200, 50, 250, 100), 0, 360, fill = 0) - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - # Drawing on the Vertical image - print("2.Drawing on the Vertical image...") - LBlackimage = Image.new('1', (epd.height, epd.width), 255) # 126*298 - LRYimage = Image.new('1', (epd.height, epd.width), 255) # 126*298 - drawblack = ImageDraw.Draw(LBlackimage) - drawry = ImageDraw.Draw(LRYimage) - - drawblack.text((2, 0), 'hello world', font = font18, fill = 0) - drawblack.text((2, 20), '5.83inch epd bc', font = font18, fill = 0) - drawblack.text((20, 50), u'微雪电子', font = font18, fill = 0) - drawblack.line((10, 90, 60, 140), fill = 0) - drawblack.line((60, 90, 10, 140), fill = 0) - drawblack.rectangle((10, 90, 60, 140), outline = 0) - drawry.line((95, 90, 95, 140), fill = 0) - drawry.line((70, 115, 120, 115), fill = 0) - drawry.arc((70, 90, 120, 140), 0, 360, fill = 0) - drawry.rectangle((10, 150, 60, 200), fill = 0) - drawry.chord((70, 150, 120, 200), 0, 360, fill = 0) - epd.display(epd.getbuffer(LBlackimage), epd.getbuffer(LRYimage)) - time.sleep(2) - - print("3.read bmp file") - HBlackimage = Image.open('../pic/5in83bc-b.bmp') - HRYimage = Image.open('../pic/5in83bc-ry.bmp') - epd.display(epd.getbuffer(HBlackimage), epd.getbuffer(HRYimage)) - time.sleep(2) - - print("4.read bmp file on window") - blackimage1 = Image.new('1', (epd.width, epd.height), 255) # 298*126 - redimage1 = Image.new('1', (epd.width, epd.height), 255) # 298*126 - newimage = Image.open('../pic/100x100.bmp') - blackimage1.paste(newimage, (50,10)) - epd.display(epd.getbuffer(blackimage1), epd.getbuffer(redimage1)) - - print("Clear...") - epd.init() - epd.Clear() - - print("Goto Sleep...") - epd.sleep() - -except IOError as e: - print(e) - -except KeyboardInterrupt: - print("ctrl + c:") - epdconfig.module_exit() - exit() diff --git a/Jetson Nano/python3/lib/Font.ttc b/Jetson Nano/python3/lib/Font.ttc deleted file mode 100644 index 4cbb7c54cc4cdb418c41c0306e70bd709aaf470c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5177387 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