joukos / papertty Goto Github PK
View Code? Open in Web Editor NEWPaperTTY - Python module to render a TTY or VNC on e-ink
PaperTTY - Python module to render a TTY or VNC on e-ink
EDIT: sudo is working now, not sure what I did
I am stuck. I try to use sudo and get an error...
sudo papertty --driver EPD4IN2 terminal
sudo: papertty: command not found
...and without....
papertty --driver EPD4IN2 terminal
Loading PIL font /home/pi/.local/lib/python3.7/site-packages/papertty/resources/tom-thumb.pil. Font size is ignored.
No read access to /dev/vcsa1 - maybe run with sudo?
.....any suggestions?
I have a 10.3" 1872x1404 display. I'm able to get VNC working on it great, but I can't get VNC to mirror the image, so all the text is backwards.
On a clean June 27, Raspbian Stretch Lite install on a Pi Zero W 1.1, I followed your installation instructions.
I set up the virtualenv with:
mkvirtualenv -p /usr/bin/python3 -r requirements.txt papertty
which says (the second time I ran it to be sure, which is why they're already satisfied):
Installing setuptools, pkg_resources, pip, wheel...done.
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: Pillow in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from -r requirements.txt (line 1)) (5.2.0)
Requirement already satisfied: RPi.GPIO in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from -r requirements.txt (line 2)) (0.6.3)
Requirement already satisfied: spidev in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from -r requirements.txt (line 3)) (3.2)
Requirement already satisfied: click in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from -r requirements.txt (line 4)) (6.7)
When I finally get into the PaperTTY virtualenv following the above, I receive the following when I run:
sudo ./papertty.py list
Traceback (most recent call last):
File "./papertty.py", line 14, in
import drivers.drivers_base as drivers_base
File "/home/pi/PaperTTY/drivers/drivers_base.py", line 18, in
from PIL import Image
ImportError: No module named 'PIL'
Any suggestions? This is a completely clean Pi Zero and I just imaged it from Raspbian.
My Pi Zero W with the same epaper display was also recently featured by hackday:
https://www.youtube.com/watch?v=1h0B2MWSVmQ
I've put the files on thingiverse.
I had the same idea as you, I wanted to display basic info about the system's state on the display, like wifi ssid / ip address and interact with it. I was really dreaming of having a terminal on it.
You made it happen! Can't wait to try it out at home!
BTW, the bigger Waveshare displays don't have partial refresh and it's really complicated to make them fast enough. There's a bigger display incl partial refresh from papirus:
https://uk.pi-supply.com/products/papirus-epaper-eink-screen-hat-for-raspberry-pi
I'm planning to design a bigger case for the Pi3 and that display, would love to see your terminal on that one, too.
Would be great to stay in touch!
I would like to use a second device on the SPI, which requires to let control of CS pin to spi-dev. Otherwise the code simply sets CS pin active while driver for second device currently has CS pin for second device active and transfers data. IT8951 would then receive data meant for second device.
Basic idea: With a regular TFT screen, you can be using the terminal, and then use fbi
to view images on the TFT. If you quit, then it sends you back to the terminal.
I'm not sure if there's a way to do that with the existing codebase. I didn't find anything, and it appears that trying to write to the SPI/launch a second papertty process to draw an image just fails because the device is busy.
One imaginary approach is that the papertty process has some way of providing information, whether that's using inotify, or sending information via a port, or ???
I'm not sure exactly what process things currently use, but it would be really neat if that were a possibility.
I have the 4.2 Waveshare display and I can run their python demo code fine. For papertty I have installed in a virtualenv as indicated in the readme. When I try the following command (from within the virtualenv)
papertty --driver EPD4in2 image --image test-img.bmp
, both as root or regular user, I get the following error:
Traceback (most recent call last):
File "/home/pi/papertty_venv/bin/papertty", line 10, in <module>
sys.exit(papertty.cli())
File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/home/pi/papertty_venv/lib/python3.7/site-packages/click/decorators.py", line 33, in new_func
return f(get_current_context().obj, *args, **kwargs)
File "/home/pi/papertty_venv/lib/python3.7/site-packages/papertty/papertty.py", line 567, in image
ptty = settings.get_init_tty()
File "/home/pi/papertty_venv/lib/python3.7/site-packages/papertty/papertty.py", line 398, in get_init_tty
tty = PaperTTY(**self.args)
File "/home/pi/papertty_venv/lib/python3.7/site-packages/papertty/papertty.py", line 75, in __init__
self.driver = get_drivers()[driver]['class']()
File "/home/pi/papertty_venv/lib/python3.7/site-packages/papertty/drivers/drivers_4in2.py", line 72, in __init__
super(drivers_partial.WavesharePartial, self).__init__(name='4.2"',
NameError: name 'drivers_partial' is not defined
Other attempts to run papertty produce similar errors.
Scrub states that you can specify a size between 8 and 32. It won't accept 32 but then tells you it must be 8-32.
pi@raspberrypi:~/PaperTTY $ sudo ./papertty.py --driver epd2in13 scrub --size 32 Invalid stripe size, must be 8-32
Tested on the Waveshare 2.13 Raspberry Pi Hat ( https://www.waveshare.com/wiki/2.13inch_e-Paper_HAT ) and can confirm that partial refresh works and the scrub function is needed periodically.
Instead of reading /dev/vcsa*
, allocate a pseudo TTY.
A big problem with the VT buffer is that the original unicode value is lost.
Having an option to use a pty should:
Thanks for authoring this. You should add a "Buy me a coffee" or similar reward so people can show you some appreciation.
Low priority, since journalctl
can show the service stdout and there's not much output anyway, but when running as a service (or debugging), being able to configure the logging level might be a nice feature to have, and simple to implement.
Hi, thank you very much for the code, this is really great work.
It's my first post in Github in my life, but it seems I've found error, so just made account of Github.
I'm not good at programming, so posting this with hoping this is right manner...
I'm using EPD 2.7" (monochrome) of waveshare,
and tried command
sudo ./papertty.py --driver epd2in7 scrub
but got error (text file attached) hope this can be useful.
error.txt
by the way I have EPD1.54" also, and command worked for this display.
The current drivers are essentially exactly the same as the reference drivers - they leave a lot to be desired:
Having more knowledge of the particulars of these displays (and the actual hardware available for testing!) should yield a rewrite that is much simpler and nice to read.
Pull requests / issues are very welcome.
ERROR: Failed building wheel for Pillow
plz help me to solve this....
`pi@raspberrypi:~/PaperTTY $ mkvirtualenv -p /usr/bin/python3 -r requirements.txt papertty
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/pi/.virtualenvs/papertty/bin/python3
Also creating executable in /home/pi/.virtualenvs/papertty/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Collecting Pillow
Downloading https://files.pythonhosted.org/packages/5b/bb/cdc8086db1f15d0664dd22a62c69613cdc00f1dd430b5b19df1bea83f2a3/Pillow-6.2.1.tar.gz (37.7MB)
|████████████████████████████████| 37.7MB 3.5kB/s
Collecting RPi.GPIO
Downloading https://www.piwheels.org/simple/rpi-gpio/RPi.GPIO-0.7.0-cp35-cp35m-linux_armv6l.whl (67kB)
|████████████████████████████████| 71kB 162kB/s
Collecting spidev
Downloading https://www.piwheels.org/simple/spidev/spidev-3.4-cp35-cp35m-linux_armv6l.whl
Collecting click
Downloading https://www.piwheels.org/simple/click/Click-7.0-py2.py3-none-any.whl (81kB)
|████████████████████████████████| 81kB 128kB/s
Collecting vncdotool
Downloading https://www.piwheels.org/simple/vncdotool/vncdotool-0.13.0-py3-none-any.whl
Collecting Twisted
Downloading https://www.piwheels.org/simple/twisted/Twisted-19.10.0-cp35-cp35m-linux_armv6l.whl (3.1MB)
|████████████████████████████████| 3.1MB 72kB/s
Collecting Automat>=0.3.0
Downloading https://files.pythonhosted.org/packages/e5/11/756922e977bb296a79ccf38e8d45cafee446733157d59bcd751d3aee57f5/Automat-0.8.0-py2.py3-none-any.whl
Collecting constantly>=15.1
Downloading https://files.pythonhosted.org/packages/b9/65/48c1909d0c0aeae6c10213340ce682db01b48ea900a7d9fce7a7910ff318/constantly-15.1.0-py2.py3-none-any.whl
Collecting hyperlink>=17.1.1
Downloading https://files.pythonhosted.org/packages/7f/91/e916ca10a2de1cb7101a9b24da546fb90ee14629e23160086cf3361c4fb8/hyperlink-19.0.0-py2.py3-none-any.whl
Collecting zope.interface>=4.4.2
Downloading https://www.piwheels.org/simple/zope-interface/zope.interface-4.7.1-cp35-cp35m-linux_armv6l.whl (163kB)
|████████████████████████████████| 163kB 7.1kB/s
Collecting PyHamcrest>=1.9.0
Downloading https://www.piwheels.org/simple/pyhamcrest/PyHamcrest-1.9.0-py2.py3-none-any.whl (52kB)
|████████████████████████████████| 61kB 32kB/s
Collecting attrs>=17.4.0
Downloading https://www.piwheels.org/simple/attrs/attrs-19.3.0-py2.py3-none-any.whl
Collecting incremental>=16.10.1
Downloading https://files.pythonhosted.org/packages/f5/1d/c98a587dc06e107115cf4a58b49de20b19222c83d75335a192052af4c4b7/incremental-17.5.0-py2.py3-none-any.whl
Collecting six
Downloading https://www.piwheels.org/simple/six/six-1.13.0-py2.py3-none-any.whl
Collecting idna>=2.5
Downloading https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl (58kB)
|████████████████████████████████| 61kB 235kB/s
Requirement already satisfied: setuptools in /home/pi/.virtualenvs/papertty/lib/python3.5/site-packages (from zope.interface>=4.4.2->Twisted->vncdotool->-r requirements.txt (line 5)) (41.6.0)
Building wheels for collected packages: Pillow
Building wheel for Pillow (setup.py) ... error
ERROR: Command errored out with exit status 1:
command: /home/pi/.virtualenvs/papertty/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"'; file='"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-c7l05ek4 --python-tag cp35
cwd: /tmp/pip-install-cz_wrs2v/Pillow/
Complete output (172 lines):
running bdist_wheel
running build
running build_py
creating build
creating build/lib.linux-armv6l-3.5
creating build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageQt.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TiffImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageDraw.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcdImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ContainerIO.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IptcImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_tkinter_finder.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageOps.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GbrImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/EpsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GimpGradientFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/init.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FpxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SunImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BufrStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MspImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageShow.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ExifTags.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageChops.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/features.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PdfImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMode.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageGrab.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TiffTags.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImagePath.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_binary.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XbmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FliImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageDraw2.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PixarImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FtexImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImagePalette.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WalImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageStat.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GdImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PyAccess.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/CurImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/DcxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SgiImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/JpegImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GifImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_util.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MpegImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TarIO.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PaletteFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BdfFontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFilter.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GimpPaletteFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/main.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XpmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PalmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcfFontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WmfImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/JpegPresets.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GribStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MpoImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Hdf5StubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMorph.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FitsStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageEnhance.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Jpeg2KImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PpmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageColor.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFont.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_version.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WebPImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/McIdasImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PdfParser.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageWin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageTransform.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PSDraw.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageTk.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/DdsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMath.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MicImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IcoImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageSequence.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IcnsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImtImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Image.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageCms.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TgaImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XVThumbImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PngImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PsdImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SpiderImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BlpImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BmpImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
running egg_info
writing top-level names to src/Pillow.egg-info/top_level.txt
writing src/Pillow.egg-info/PKG-INFO
writing dependency_links to src/Pillow.egg-info/dependency_links.txt
reading manifest file 'src/Pillow.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '.c'
warning: no files found matching '.h'
warning: no files found matching '.sh'
warning: no previously-included files found matching '.appveyor.yml'
warning: no previously-included files found matching '.coveragerc'
warning: no previously-included files found matching '.codecov.yml'
warning: no previously-included files found matching '.editorconfig'
warning: no previously-included files found matching '.readthedocs.yml'
warning: no previously-included files found matching 'azure-pipelines.yml'
warning: no previously-included files matching '.git' found anywhere in distribution
warning: no previously-included files matching '.pyc' found anywhere in distribution
warning: no previously-included files matching '.so' found anywhere in distribution
no previously-included directories found matching '.azure-pipelines'
no previously-included directories found matching '.travis'
writing manifest file 'src/Pillow.egg-info/SOURCES.txt'
running build_ext
The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.
Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html
Traceback (most recent call last):
File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 888, in
zip_safe=not (debug_build() or PLATFORM_MINGW),
File "/home/pi/.virtualenvs/papertty/lib/python3.5/site-packages/setuptools/init.py", line 145, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python3.5/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.5/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/home/pi/.virtualenvs/papertty/lib/python3.5/site-packages/wheel/bdist_wheel.py", line 192, in run
self.run_command('build')
File "/usr/lib/python3.5/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/lib/python3.5/distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/usr/lib/python3.5/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/lib/python3.5/distutils/command/build_ext.py", line 339, in run
self.build_extensions()
File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 687, in build_extensions
raise RequiredDependencyException(f)
main.RequiredDependencyException: jpeg
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "", line 1, in
File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 903, in
raise RequiredDependencyException(msg)
main.RequiredDependencyException:
The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.
Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html
ERROR: Failed building wheel for Pillow
Running setup.py clean for Pillow
Failed to build Pillow
Installing collected packages: Pillow, RPi.GPIO, spidev, click, attrs, six, Automat, constantly, idna, hyperlink, zope.interface, PyHamcrest, incremental, Twisted, vncdotool
Running setup.py install for Pillow ... error
ERROR: Command errored out with exit status 1:
command: /home/pi/.virtualenvs/papertty/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"'; file='"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-161nk5do/install-record.txt --single-version-externally-managed --compile --install-headers /home/pi/.virtualenvs/papertty/include/site/python3.5/Pillow
cwd: /tmp/pip-install-cz_wrs2v/Pillow/
Complete output (174 lines):
running install
running build
running build_py
creating build
creating build/lib.linux-armv6l-3.5
creating build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageQt.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TiffImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageDraw.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcdImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ContainerIO.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IptcImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_tkinter_finder.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageOps.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GbrImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/EpsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GimpGradientFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/init.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FpxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SunImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BufrStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MspImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageShow.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ExifTags.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageChops.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/features.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PdfImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMode.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageGrab.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TiffTags.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImagePath.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_binary.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XbmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FliImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageDraw2.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PixarImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FtexImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImagePalette.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WalImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageStat.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GdImageFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PyAccess.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/CurImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/DcxImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SgiImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/JpegImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GifImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_util.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MpegImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TarIO.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PaletteFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BdfFontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFilter.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GimpPaletteFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/main.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XpmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PalmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PcfFontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WmfImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/JpegPresets.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/GribStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MpoImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Hdf5StubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMorph.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FitsStubImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageEnhance.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Jpeg2KImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PpmImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageColor.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageFont.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/_version.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/WebPImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/McIdasImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PdfParser.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageWin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageTransform.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PSDraw.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageTk.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/DdsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageMath.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/MicImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IcoImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageSequence.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/IcnsImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImtImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/Image.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/ImageCms.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/TgaImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/XVThumbImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PngImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/FontFile.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/PsdImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/SpiderImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BlpImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
copying src/PIL/BmpImagePlugin.py -> build/lib.linux-armv6l-3.5/PIL
running egg_info
writing src/Pillow.egg-info/PKG-INFO
writing top-level names to src/Pillow.egg-info/top_level.txt
writing dependency_links to src/Pillow.egg-info/dependency_links.txt
reading manifest file 'src/Pillow.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '.c'
warning: no files found matching '.h'
warning: no files found matching '.sh'
warning: no previously-included files found matching '.appveyor.yml'
warning: no previously-included files found matching '.coveragerc'
warning: no previously-included files found matching '.codecov.yml'
warning: no previously-included files found matching '.editorconfig'
warning: no previously-included files found matching '.readthedocs.yml'
warning: no previously-included files found matching 'azure-pipelines.yml'
warning: no previously-included files matching '.git' found anywhere in distribution
warning: no previously-included files matching '.pyc' found anywhere in distribution
warning: no previously-included files matching '.so' found anywhere in distribution
no previously-included directories found matching '.azure-pipelines'
no previously-included directories found matching '.travis'
writing manifest file 'src/Pillow.egg-info/SOURCES.txt'
running build_ext
The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.
Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html
Traceback (most recent call last):
File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 888, in <module>
zip_safe=not (debug_build() or PLATFORM_MINGW),
File "/home/pi/.virtualenvs/papertty/lib/python3.5/site-packages/setuptools/__init__.py", line 145, in setup
return distutils.core.setup(**attrs)
File "/usr/lib/python3.5/distutils/core.py", line 148, in setup
dist.run_commands()
File "/usr/lib/python3.5/distutils/dist.py", line 955, in run_commands
self.run_command(cmd)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/home/pi/.virtualenvs/papertty/lib/python3.5/site-packages/setuptools/command/install.py", line 61, in run
return orig.install.run(self)
File "/usr/lib/python3.5/distutils/command/install.py", line 583, in run
self.run_command('build')
File "/usr/lib/python3.5/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/lib/python3.5/distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/usr/lib/python3.5/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/usr/lib/python3.5/distutils/dist.py", line 974, in run_command
cmd_obj.run()
File "/usr/lib/python3.5/distutils/command/build_ext.py", line 339, in run
self.build_extensions()
File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 687, in build_extensions
raise RequiredDependencyException(f)
__main__.RequiredDependencyException: jpeg
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-install-cz_wrs2v/Pillow/setup.py", line 903, in <module>
raise RequiredDependencyException(msg)
__main__.RequiredDependencyException:
The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.
Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html
----------------------------------------
ERROR: Command errored out with exit status 1: /home/pi/.virtualenvs/papertty/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"'; file='"'"'/tmp/pip-install-cz_wrs2v/Pillow/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, file, '"'"'exec'"'"'))' install --record /tmp/pip-record-161nk5do/install-record.txt --single-version-externally-managed --compile --install-headers /home/pi/.virtualenvs/papertty/include/site/python3.5/Pillow Check the logs for full command output.
(papertty) pi@raspberrypi:/PaperTTY $ ^C/PaperTTY $ dir
(papertty) pi@raspberrypi:
`
In order to prevent any potential damage for long running applications and keep the image clean, a couple of things ought to be done:
terminal
mode (vnc
does this already)
scrub
currently - but it's not as useful)Rationale for deep sleep is an entry in the FAQ tab of Waveshare wiki page for 2.13" (not sure when it was added but I don't remember seeing this particular mention earlier):
Question:
Why my e-paper has ghosting problem after working for some days
Answer:
Please set the e-paper to sleep mode or disconnect it if you needn't refresh the e-paper but need to power on your development board or Raspberry Pi for long time.Otherwise, the voltage of panel keeps high and it will damage the panel
Rationale for full refreshes every now and then is also on the same FAQ page:
Note that you cannot use Partial refresh all the time, you should full refresh e-paper regularly, otherwise, ghost problem will get worse even damage.
Also regarding the three-color variants, there's yet another note (though its exact meaning is a bit vague to me):
You need to update the content of three-color e-Paper at least one time every 24h to avoid from burn-in problem.
The last thing I want is someone's display suffering damage from running PaperTTY too long (which might be a very typical use case), so I think these should be addressed.
I'm guessing this is only feasible on the raspberry pi because Waveshare sell with hats - but is there any info/discussions/plans for using this on a generic box?
Would this be in scope for this project? Hardware issues aside, I imagine straightforward configurations (e.g. 2x2 screens of the same size) would be pretty trivial to code. Of course, hardware would be the main problem and this isn't my area - does anyone have any ideas, or can link relevant discussions? Naively, it looks like only 8 pins are needed, and the Pi has more than that ... so maybe?
Thank you so for much for this AWESOME project that I have been following for a long time. I'm thinking about building a Psion-like portable computer and it would be great to use the 7.5in HD screen: https://www.waveshare.com/7.5inch-hd-e-paper-hat.htm can anybody tell me whether the software in this project supports it? If not, would the normal 800x600 resolution version work?
It would be very nice if it was possible to simplify the installation of PaperTTY to just pip install papertty
. Any help with achieving this is appreciated.
Just tested on the Waveshare 2.7 Inch epaper Pi Hat (https://www.waveshare.com/wiki/2.7inch_e-Paper_HAT) and can confirm everything installed and that the terminal commands work when using ssh. The script to run at boot also works however I'm not able to use an external keyboard (screen remains static in the login prompt and all key presses are not reflected or refreshing). Was there anything that you e configured to allow usb keyboard inputs to show up on the mirrored terminal?
I'm running the Waveshare 4.2 display and the epd4in2 display driver. stdin is not responsive, but the terminal option works. However, any setting for the --font argument does nothing. I'm running on a Raspberry Pi 3, Raspbian, and running directly without virtualenv. What other info do you need for a diagnosis?
Implement "proper" support for different encodings and error handling, meaning that the program shouldn't for example crash because of a character that can't be drawn. For now it just barely works.
There's a few things to consider, such as:
tmux
supports UTF-8 only, for exampleGoal would be to handle any garbage without problems and displaying it as well as possible using default settings - if this were to be used as the only means to get output from a RPi, it should never crash.
Hi,
I acquired an 9.7 inch e-ink display which, according to the waveshare, supports partial refresh. I've used their example code for full refreshes, but did not yet find out how to do a partial refresh - the displays refreshes partially, but doesn't display new text in the refreshed area - yet ;)
I'd be very interesting in working on PaperTTY support for this display, but I am new to e-ink displays in general and the 9.7in model seems to work quite differently compared to the smaller models. It uses a IT8951 controller. As far as I understand, I'd need the LUT values for PaperTTY? They seem to be stored in the hat, at least I haven't found them in the demo code yet. And information on the public internet seems sparse.
Anyone else interested in this?
More Infos on the official Wiki page: https://www.waveshare.com/wiki/9.7inch_e-Paper_HAT, the chinese version has a bit more info and code: http://www.waveshare.net/wiki/9.7inch_e-Paper_HAT
Last month, I managed to get a partial window working on my 7.5" screen (the GDEW075T7) but haven't found the time to iron out everything and clean up the code. I'll get to this by and by, but instead of sitting on it, I decided to paste the code out here in case someone else wants to use it without waiting.
This is built upon my previous pull request at #35, as well as the work done later by @colin-nolan in #51. I managed to get a partial window working (only that part of the screen gets refreshed), but not a partial refresh (simple change of pixels with no blink, blink each time). To get it working, you need to
drivers/drivers_partial.py
drivers_partial.EPD7in5v2partial
to driverlist
(under the get_drivers
function in papertty.py
)Like I said the code is very messy, and I'll come clean it up at some point. Just wanted to get the code out in case it helps someone in the meantime.
File "./papertty.py", line 716, in
cli()
File "/usr/lib/python3/dist-packages/click/core.py", line 764, in call
return self.main(*args, **kwargs)
File "/usr/lib/python3/dist-packages/click/core.py", line 717, in main
rv = self.invoke(ctx)
File "/usr/lib/python3/dist-packages/click/core.py", line 1137, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python3/dist-packages/click/core.py", line 956, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python3/dist-packages/click/core.py", line 555, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python3/dist-packages/click/decorators.py", line 27, in new_func
return f(get_current_context().obj, *args, **kwargs)
File "./papertty.py", line 502, in vnc
ptty = settings.get_init_tty()
File "./papertty.py", line 394, in get_init_tty
tty.init_display()
File "./papertty.py", line 246, in init_display
self.driver.init(partial=self.partial)
File "/home/pi/PaperTTY/drivers/drivers_partial.py", line 69, in init
if self.epd_init() != 0:
File "/home/pi/PaperTTY/drivers/drivers_base.py", line 184, in epd_init
self.SPI = spidev.SpiDev(0, 0)
FileNotFoundError: [Errno 2] No such file or directory
There's plenty of tweaking to do, but the 4.2" module seems to more or less work with full refreshes. Now the partial refresh should be implemented for it.
Hi there! General question:
Does the entire screen flash whenever something changes?
Add support for reading a configuration file to simplify usage.
Sorry if this is incredibly basic, but I've installed papertty on my raspberry pi 3 with a 9.7" waveshare epaper screen and it's been running quite well. I've gotten the VNC, image, etc... features running without issue. However, when trying to run terminal, it's outputting absolutely tiny font and in the wrong orientation (see this image: https://postimg.cc/QBtb0sCQ). I'm running Debian 10 (Buster) which may be part of the reason for the error. Per the dev updates on the front page, it looks like unicode support was incorporated for this particular OS. However, when I run papertty terminal it provides an error message about unicode being unsupported and defaulting to 8 bit, which may be part of the issue.
In addition to the tiny sideways text, it appears that the terminal on my papertty screen is not receiving input commands, as nothing I type is showing up.
Forgive me if this issue is extremely pedestrian. If it's been addressed elsewhere, just let me know. I'm not very familiar with programming for drivers, but I have some experience with python, so if this seems like an error of some kind that you could use help fixing, I wouldn't mind helping out if you could point me to where I can learn some about how all this works.
Thanks and this has been a wonderful project to stumble on to! I was worried I'd have to learn how to program an IT8951 driver for this bad boy myself, which probably would have required a great deal of time.
Hi there!
firstly thanks for all the awesome work on this. I'm super excited to play with it.
It seems the 2.13b is different enough that the standardization of the driver seems to have sorta rendered it unfunctional.
I'll play around with it and see if I can't get something working, but figured I'd open an issue first before digging in.
Hello!
I’ve got Raspberry Pi 2 Model B V1.1 and IT8951 hat from Waveshare (https://www.waveshare.com/wiki/6inch_HD_e-Paper_HAT). Both this repository and version from @GregDMeyer have a trouble communicating to the HAT while this https://github.com/waveshare/IT8951-ePaper.git works.
Any suggestions how to debug this or configuration tips?
Thanks!
I am developing the partial refresh 4.2 inch driver and during development I always use htop
for testing and sometimes I just leave the display running for an hour or two. Now I can see the htop
layout every time my screen does a refresh. After doing constant refreshes for 5 minutes, the `htop screen has faded a bit on displayed images, but is still very much noticeable during refreshes.
I guess terminals are the worst case scenario for burn ins, because they have characters always at the same positions.
Anyone else with this problem?
Is this going to be permanent?
Do we need a random frame buffer for refreshing or random shifts (like OLED displays) to avoid this?
Python 3 treats TabErrors as syntax errors
flake8 testing of https://github.com/joukos/PaperTTY on Python 3.7.0
$ flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
./papertty.py:312:20: E999 TabError: inconsistent use of tabs and spaces in indentation
if not noclear:
^
1 E999 TabError: inconsistent use of tabs and spaces in indentation
1
I followed the install instructions to the letter on a fresh install, but on the first run of I got the following error:
(papertty) rroels@piz:~/PaperTTY $ sudo ~/.virtualenvs/papertty/bin/python3 ./papertty.py list
Traceback (most recent call last):
File "./papertty.py", line 14, in
import drivers.drivers_base as drivers_base
File "/home/rroels/PaperTTY/drivers/drivers_base.py", line 18, in
from PIL import Image
File "/home/rroels/.virtualenvs/papertty/lib/python3.7/site-packages/PIL/Image.py", line 93, in >
from . import _imaging as core
ImportError: libtiff.so.5: cannot open shared object file: No such file or directory
Luckily the solution is trivial:
sudo apt install libtiff5
Maybe this should be added to the install instructions?
Hello,
i try to use blessed-contrib with you PaperTTY script.
I start your script with...
sudo ~/PaperTTY/papertty.py --driver EPD2in9 terminal --sleep 2 --autofit
open another terminal window
sudo openvt -fc 1 -- node ./examples/map.js
Only the x is displayed.
I tried to change the color and made it monochrome, but no luck.
Any ideas?
I have very limited experience with all of this, but the pwnagotchi project has partial refresh working great on the waveshare v2 and I was thinking maybe the code could be adapted here?
The relevant code:
https://github.com/evilsocket/pwnagotchi/blob/master/pwnagotchi/ui/hw/libs/waveshare/v2/waveshare.py
The main README is too long. There's old but valid documentation way too far to be comfortably scrolled to because of meandering hit-and-run updates and not having the time to keep the docs concise and updated.
Some stuff to do:
This would be easiest for me to do, but since it's so hard to get a proper moment to do it, I've created this issue to nag me. And if I never get around to it, maybe someone else with a knack for documentation will :)
For future reference:
I'm trying to make PaperTTY work through VNC, I have my Waveshare 9.7".
When running papertty --driver it8951 vnc --display 1 --sleep 0.1 --rotate 90
this is what happens:
$ papertty --driver it8951 vnc --display 1 --sleep 0.1 --rotate 90 Loading PIL font /home/pi/.local/lib/python3.7/site-packages/papertty/resources/tom-thumb.pil. Font size is ignored. width = 1200 height = 825 img_addr = 0011a1e0 firmware = SWv_0.2.1T lut = M841 VCOM = -2.00V Timeout to server localhost:1
Sorry if I'm being lame (new to this)
Sent with GitHawk
Now that there's more than enough features, should also add proper tests.
Just though I'd share my notes here on how to use pypy with papertty. I'm working on a 4in2 display with a pi zero and am trying to improve performance. Not sure yet if pypy helps, but here's a short how-to:
sudo apt install pypy3 pypy3-devel libjpeg-dev zlib1g-dev wiringpi virtualenv
virtualenv --python=/usr/bin/pypy3 papertty_venv_pypy
. papertty_venv_pypy/bin/activate
pip3 install papertty
For fonts:
sudo apt install ttf-mscorefonts-installer
and to see what's provided:
ls /usr/share/fonts/truetype/msttcorefonts
And in my start.sh, I use:
. /home/pi/papertty_venv_pypy/bin/activate
papertty --driver EPD4in2 terminal --size 11 --autofit --font /usr/share/fonts/truetype/msttcorefonts/cour.ttf --portrait
Also, thanks everyone who has contributed to this tool. This is super cool stuff. :D
Comment on this issue for your experiences with the IT8951 support.
Tested:
stdin
for example has --portrait
but nothing for flipping the display upside down.
I can do this with image
using --rotate 270
This issue is for future reference.
@cclauss outlined some steps to replace the imaging library with Pillow in #2 (comment).
Currently there's some wrinkles in going for it because the Waveshare library uses PIL. There are forks around already.
I have a Pi 3 B+ system where I've been successfully using a 2.9 inch display. I ordered a monochrome 4.2 inch display, which arrived today. I connected it up and changed it from epd2in9 to epd4in2 in start.sh so I would get console on it on boot but nothing happened (not even the scrub).
My start.sh's command line is:
${VENV} papertty.py --driver epd4in2 terminal --font /usr/share/fonts/truetype/msttcorefonts/Andale_Mono.ttf --size 12 --scrub --autofit
I investigated by stopping the service and then trying to run a scrub by hand with:
sudo ./papertty.py --driver epd4in2 scrub
and I get the following error:
~/PaperTTY $ sudo ./papertty.py --driver epd4in2 scrubTraceback (most recent call last):
File "./papertty.py", line 443, in <module>
cli()
File "/usr/lib/python3/dist-packages/click/core.py", line 716, in __call__
return self.main(*args, **kwargs)
File "/usr/lib/python3/dist-packages/click/core.py", line 696, in main
rv = self.invoke(ctx)
File "/usr/lib/python3/dist-packages/click/core.py", line 1060, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/lib/python3/dist-packages/click/core.py", line 889, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/lib/python3/dist-packages/click/core.py", line 534, in invoke
return callback(*args, **kwargs)
File "/usr/lib/python3/dist-packages/click/decorators.py", line 27, in new_func
return f(get_current_context().obj, *args, **kwargs)
File "./papertty.py", line 310, in scrub
ptty.driver.scrub(fillsize=size)
File "/home/pi/PaperTTY/drivers/drivers_base.py", line 53, in scrub
self.fill(self.black, fillsize=fillsize)
File "/home/pi/PaperTTY/drivers/drivers_base.py", line 60, in fill
self.draw(x, 0, image)
File "/home/pi/PaperTTY/drivers/drivers_full.py", line 66, in draw
self.display_frame(self.get_frame_buffer(image))
File "/home/pi/PaperTTY/drivers/drivers_full.py", line 76, in get_frame_buffer
({0}x{1}).'.format(self.width, self.height))
ValueError: Image must be same dimensions as display (400x300).
I don't think I am doing anything obviously wrong and this worked on the 2.9 on the same Raspberry Pi.
I've just bought a pi Zero W and a 2.13" waveshare hat, looking forward to make a little distraction free word processor. I've managed to set almost all up, but oddly, using the driver for v2 I can only understand what is shown on the console when I launch a command with --nopartial
. Otherwise, the screen only renders noise, or perhaps only some pixels become active.
I could still manage to use the device as intentded, as I want it to be sort of a reference of what I'm writing, and I don't think I'll be editing anything, but the full flashing is a bit annoying and the screen is supposed to be capable of partial refreshing.
Also, it is very likely that I am doin something wrong.
What is the expected CPU load on a Pi Zero? I'm seeing constant 50-70% load on my Zero just sitting at a terminal prompt and I'm curious if that is expected for this hardware or something is wonky.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.