Giter VIP home page Giter VIP logo

zerowriter1's Introduction

zerowriter


Interest form / survey for potential future products: https://forms.gle/8dZwQsYdUa9X49WCA

Yo! Check the back of your 4.2" waveshare e-Paper. If it says Rev2.2 or has a V2 sticker, you'll want to use this branch:

https://github.com/zerowriter/zerowriter1/tree/waveshare_2.2 The waveshare_2.2 branch is built specifically for the v2 displays. The main branches won't function properly on these displays. Going forward, this will likely be the default branch for the project.

If it says Rev2.1, you'll want to use these branches:

https://github.com/zerowriter/zerowriter1/tree/main_full The main_full branch has a bunch of updates and includes a lot of new features.

This main branch will be discontinued and not further developed. I am leaving it as-is because some people may want the simple typewriter with no extra software features. And it is a small codebase.


An easy, DIY eink typewriter running on a raspberry pi zero. Perfect for beginners.

This project is open-source. Do whatever you want with it. Please note the display drivers and waveshare code belongs to them. But buy their displays, they rock.

Credit to: https://penkesu.computer/ for the original project that inspired this.

Components list: https://github.com/zerowriter/zerowriter1/blob/main/componentslist

pi zero setup steps: https://github.com/zerowriter/zerowriter1/blob/main/how-to-setup-your-pi


The e-Paper directory is modified waveshare drivers. All waveshare code belongs to them. Great company, buy their gadgets!

Use this modified code at your own risk. The modified driver may cause damage to your display. Don't blame me.

I have included .STL files for the enclosure I have been using. Feel free to use them however you want.


How it works:

Inside the e-Paper directory, I built an application on top of the example code from waveshare. You can find it in e-Paper/RaspberryPiJetsonNano/python/examples main.py

The application itself can be modified to do whatever you want (or just leave it be). The basics:

epd.init() clears the screen using slow look up tables -- this prevents artifacting

epd.init_Partial() runs a faster update using modified LUT. (Ben Krasnow: https://hackaday.com/2017/10/31/ben-krasnow-hacks-e-paper-for-fastest-refresh-rate/) -- important to note this only works with the 4.2" v1 waveshare display.

Use a Pi Zero 2W. Don't use an original Zero. The extra power is very useful.


Setup / Getting Started:

https://github.com/zerowriter/zerowriter1/blob/main/how-to-setup-your-pi

  • requires pi zero 2w running bookworm, light install recomend (headless/no GUI)
  • set up ssh and configure your pi zero remotely via terminal or powershell
  • Drop in the e-Paper folder provided in this repo and run main.py from ssh
  • Set up crontab (from command line: crontab -e) to boot to main.py

Hardware Features:

  • 40% keyboard and an eink display
  • tons of storage
  • bring-your-own-battery-pack: 10,000mah battery will yield around 25-30 hours of usage, a lot more if you cut networking
  • or just plug it into something
  • portable! stylish! cool! modified from the https://penkesu.computer/ penkesu computer

Program Features:

  • light weight python typewriter
  • works with any USB keyboard
  • KEYMAPS file to edit key maps if you don't want to program your keyboard's firmware
  • files save in the /data directory where the program resides, access via SMB
  • autosaves the cache every time return is pressed
  • CTRL S saves the cache to a txt file
  • CTRL N starts a new file
  • CTRL ESC turns unit off.
  • (NEW, likely buggy) The arrow keys can be used to navigate through and review previous writing
  • You could easily add an output to google drive or etc

===

Have fun! Happy writing...

===

Steps to use a Bluetooth Keyboard

  1. Run sudo bluetoothctl
  2. Run agent on
  3. Run default-agent
  4. Run scan on
  5. Wait until you see your device listed (be sure your keyboard is in pairing mode)
  6. Run scan off
  7. Run devices to list known Bluetooth devices
  8. Run pair AA:BB:CC:DD:EE:FF where AA:BB:CC:DD:EE:FF is the MAC address of your bluetooth keyboard
  9. You may need to reboot your raspberry pi before python is able to register your bluetooth keyboard.

https://www.youtube.com/watch?v=UEmSsscijKE has a video walkthrough of the above steps as well.

zerowriter1's People

Contributors

jacobsmith avatar zerowriter avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

zerowriter1's Issues

2.2 branch doesn't work on v2.2 display

The code executes, but nothing happens on the display. I deleted the old branch and cloned this one. Maybe I'm doing something wrong?

EDIT: got this error>

epd.config loaded Traceback (most recent call last): File "/home/writer/zerowriter1-waveshare_2.2/e-Paper/RaspberryPi_JetsonNano/python/examples/main.py", line 23, in <module> from zerowriter import ZeroWriter File "/home/writer/zerowriter1-waveshare_2.2/e-Paper/RaspberryPi_JetsonNano/python/examples/zerowriter.py", line 3, in <module> import qrcode ModuleNotFoundError: No module named 'qrcode'

image file for pi imager?

I haven't looked in to this yet, but would it be feasible to just make a raspberry pi imager file that does all the configuration beforehand? Include all the packages and setup and stuff.

And then it boots and the user connects to wifi and we are done? Could make things easier for people who just want to get going.

4in2_V2 Notes

Hello,

First, thanks for your work on zerowriter! I recently purchased https://www.amazon.com/dp/B074NR1SW2?psc=1&ref=ppx_yo2ov_dt_b_product_details and received a unit that only works with the 4in2_V2 examples from waveshare. I've updated the code to load the 4in2_V2 EPD code, but obviously that doesn't make use of the faster LUT updates.

I'm going to continue to work on this to hopefully get this version to a useable state as well; I wanted to leave this issue here in case anyone else was working on it and wanted to share advice or code.

Thanks!

Cracking the 4in2 v2 (2.2) partial refresh latency

So after contacting waveshare to order some more displays... I have learned that the 2.1v display I used is no longer available (as of a month ago)

Which means -- unless you are a lucky person who snagged a 2.1 display -- you'll be working with a lesser performant display board. You can tell by looking at the back of your display board, it will have a version number (rev 2.1 or 2.2)

I'm no expert at display drivers, but I am pretty confident that this could be cracked. The panel seems to be the same, but the flashed firmware on the driver board itself is different. In particular, it looks like the partial update lookup tables are hidden / built in to the firmware. Which is probably by design from waveshare for panel life/stability.

The original 2.1 software let me get at the partial update lookup tables, and that was the trick to squeezing the extra performance.

I've got my hands on a 2.2 display now and have started working with it -- some small modifications have it running well enough to be pretty reasonable. But I am very picky, since I've spent so much time working and iterating on the 2.1 driver. I like fast.

Not sure if anyone out there is in to this kind of thing, but it would be great to have other people digging in to this.

Using with other Keyboards

Hi,
I tried to use the zerowriter1 with a Keychron V4 ISO Ger and figured out, that the key what typically used for - and _ is not matching. Means when you are using a Keyboard with the Minus (-) and Underline (_) key with a shift the python script freezes with a traceback. Instead the Numpad Minus (-) is in use. On a US keyboard with QMK/VIA this is not a big deal, there you can easily replace the origin key on the first layer by the Numpad Minus. But on something like the German layout there is a Language specific symbol on it what would confuse the OS Keymapping.
Workaround for my setup is to use a Macro with Shift and the Keypad Minus and use it on a different layer.
Kind Regards
SierraX369

Are the four cylinders in DisplayHousing.stl used?

More STL questions, I see the display housing has these four cylinders that house screw threads

Screenshot 2024-02-26 at 8 16 17 PM

Yet in the YouTube video with your demo device it appears that the eink display is directly underneath the display housing and flush with it.

Screenshot 2024-02-26 at 8 13 11 PM

Did you cut off those cylinders after printing the STL file, or am I missing something? Thanks!

QR-Code and the Ampersand

Hi
I found an issue in generating QR Codes. When there is one Ampersand inside the text file the great feature of creating a QR code for mailto is just creating a body with content before this Ampersand.
Kind Regards
SierraX369

2.2 Display latency related issues

Sometimes the display misfires and doesn't push the updates via the display driver.

  • activate the menu with ESC a bunch of times really fast. Sometimes, the menu will be active but the screen will not match up until an input happens)
  • when scrolling with arrow keys through your document, sometimes the display does not catch up to the input correctly. Same issue as above I think, just in a different context

This isn't really that bad or devastating, but kind of annoying. I think what is happening is the screen update is being called while another update is still active / happening. I have some failsafe stuff for blocking out updates if one is in progress, but they aren't applied to the menu system or the 2.2 code in general.

Easiest fix is applying a latency delay (150ms / time.sleep(.150) BEFORE calling the display update, that would give time for the previous update to finish. Or writing in something that delays updates until the previous update is complete.

These kinds of issues would be non-existant with a lower latency display...

Linebreak after ~35 characters

In current version, the zerowriter1 (in my case waveshare_2.2 branch) is saving the lines after hitting return, in the same way it showed on the 35x13 lines framed display.
This makes it a little difficult to edit the text afterwards.
Old typewriters should have around 60 types per line. Old Computer around 80. On modern computers, typists write entire paragraphs without using the return button.
Wouldn't it make sense to save the stuff 2 times? One time in the Displayversion and one time in the raw typed version?

Repo contains OS X DS_Store files

I love this project, I've been playing around with this for several hours and look forward to the v2 waveshare drivers.

One small nit - this repo contains .DS_Store and ._.DS_Store files in each directory, presumably written by the OS X filesystem you're working on (this happens to me all the time). If you add these to a global .gitignore file they won't be passed on for everyone to see.

This will add a global ignore to your local projects
git config --global core.excludesfile "~/.gitignore" && echo *.DS_Store >> ~/.gitignore

Thanks!

Incoming: Waveshare IT8951 port (HD-series, 6")

I am working on developing a ported version of the Zerowriter that runs on the IT8951 series of display boards from waveshare. These are much higher resolution, speed, and quality. In theory, this could open up more display options like 6", 7.8", etc.

These IT8951 panels operate at a MUCH faster refresh rate than the 4.2" panels.

Unfortunately they cost about 3-4x the price

Incoming: Inkplate Port

I'm building a port of the codebase to run on the Inkplate series of displays. These are higher quality, higher resolution displays from a cool company.

In theory this means support for Inkplate 5, 6, Motion, and beyond as they use a common peripheral mode library.

Ongoing: Goodisplay 5.79" development

I've opened another repository for dumping stuff related to Goodisplay. The short of it: they are the display manufacturer for waveshare. They have been cooperative so far with engineering help and have sent me some panels to test out, including a very nice looking 5.79" display.

The goodisplay panels are raw eink panels and require special driver boards and a MCU to run them. I've been testing with a pi pico and micropython code.

The nice thing here is we can get at some of the good stuff, like the waveform tables.

If I can get these panels to work at a reasonable speed, they would be an inexpensive alternative and appropriate for the project. I think all-in, they would be around $45-50 per 5.79" display. Likely would mean setting up something to send people finished displays, since it might be too much work for people to configure on their own.

2.2: Wifi NetworkManager dead

Wifi list does not load on fresh installs. This is because the linux NetworkManager is not being loaded "inactive (dead)". I think maybe the pi imager bypasses the network manager entirely, kind of a strange issue.

You can check this with:

sudo systemctl status NetworkManager
solved with:

sudo systemctl enable NetworkManager

maybe I will just add this to the setup steps... or I could have the applicaiton automatically run that command line if network manager is not loaded. Might be solve by going into raspi-config and doing the wireless setup there (not sure)

Missing piece in stl files? Are Hinge1.stl and Hinge2.stl supposed to be identical?

Hi there - two (perhaps related) questions.

  1. I'm starting to print out the STL files, and I can't seem to tell where circled part in your YouTube video is from.

It appears to be a hinge, plus some other plate with two screw holes that I can't find in the STL files. I can see that there are two screw holes in a similar location in Bottom.STL, but there isn't the plate visible in the YouTube video.

  1. Hinge1.STL and Hinge2.STL appear to be identical. I printed them out and I can't tell the difference between the two of them. Is this on purpose? Part of me was wondering if one of these Hinge files was meant to be the part I can't appear in the above question.

Thanks! Images for 1 below

I can't find this in the STL files, comparing them to your from YouTube video
Screenshot 2024-02-25 at 5 32 16 PM

Here is Bottom.STL, doesn't appear to match the YouTube video
Screenshot 2024-02-25 at 5 36 45 PM

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.