Skip to content

Compatibility with Waveshare 7.3-inch ACeP 7-Color E-Paper Display #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
QC20 opened this issue Jan 20, 2025 · 15 comments
Open

Compatibility with Waveshare 7.3-inch ACeP 7-Color E-Paper Display #12

QC20 opened this issue Jan 20, 2025 · 15 comments

Comments

@QC20
Copy link

QC20 commented Jan 20, 2025

Hi,

First, thank you for maintaining this project—it’s a great resource for working with e-paper displays!

I have a 7.3-inch ACeP 7-Color E-Paper E-Ink Display Module from Waveshare that I would like to use with this code. However, I noticed that the current implementation appears to rely specifically on the Inky library, which seems tailored to Inky's own e-paper displays.

It seems like there might be others in the community who, like me, are using Waveshare displays instead of Inky models.

Has anyone successfully adapted this project to work with Waveshare's 7.3-inch ACeP display, or have insights into how this could be achieved? If not, are there any recommendations or starting points for integrating support for this display?

Thank you in advance for any advice or help!

@Delph
Copy link
Contributor

Delph commented Jan 20, 2025

Hi,

I have this on my local setup, but Waveshare's libraries aren't always the best to work with, so I haven't contributed it yet. I've been debating writing my own implementation for this to make it easier to work with. Afaik, Waveshare don't publish any packages, so you have to manually download the code, and then copy the files you need (and each screen gets a different file) to where you want to use it.

@Delph
Copy link
Contributor

Delph commented Jan 20, 2025

Some very quick guidelines on this;

Clone Waveshare's e-paper display modules;
git clone https://github.com/waveshareteam/e-Paper

Create a directory for the waveshare modules and copy the following files;

mkdir -p PaperPiAI/src/waveshare_epd && cd PaperPiAI/src/waveshare_epd
cp e-Paper/RaspberryPi_JetsonNano/python/lib/waveshare_epd/epdconfig.py .
cp e-Paper/RaspberryPi_JetsonNano/python/lib/epd7in3f.py . # replace this with the file for your display if not the 7 colour one

Create the extra files needed for Python (assuming inside the waveshare_epd dir);

touch __init__.py
touch ../__init__.py

Then, modify your display_picture.py file, remove the references to the Inky display (because you don't need it installed) and add this function;

def display_waveshare(image, saturation=1.0):
    from waveshare_epd import epd7in3f # swap this if you have a different display type
    epd = epd7in3f.EPD()
    if image.shape[0] > image.shape[1]:
        image = cv2.rotate(image, cv2.ROTATE_90_COUNTERCLOCKWISE)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    epd.init()
    epd.display(epd.getbuffer(Image.fromarray(image)))
    epd.sleep()

call this instead of display.

Iirc from when I set this up, you also need to allow global python packages because it depends on python-gpiozero, so you'll need to rebuild your venv using python3 -m venv --system-site-packages venv to create the new one.

You'll also need to install the dependencies, from their documentation;

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 spidev

@dylski
Copy link
Owner

dylski commented Jan 30, 2025

Thanks for this information @Delph, I've been considering making a larger version with a Waveshare display.

I presume you have to do your own colour dithering when using the Waveshare libraries?

@Delph
Copy link
Contributor

Delph commented Jan 30, 2025

Waveshare's libraries handle dithering via PIL's putpalette and quantize methods. Each display provides its own palette in the relevant file (e.g., in epd7in3f.py).

I too have been considering doing a larger version using a bigger panel, so having a simpler way to support Waveshare's displays would be ideal. I'm also setting up a version for a friend (using the 7in3e display, instead of 7in3f) so I had been considering doing a generic module for driving the displays and adding support for the user to specify which display type from a command line argument.

@QC20 Did you get anywhere with my instructions?

@QC20
Copy link
Author

QC20 commented Feb 5, 2025

@Delph - Haven't had a chance to test the changes yet as I just started a new job which has been pretty all-consuming. Planning to try it out and get back to you next week.

Really appreciateyou taking the time to help me come up with possible solution for my problem. Things have been hectic lately but looking forward to jumping back into this soon. Thanks for being patient!

I will say, though, @dylski & @Delph, that developing a more generic module to support Waveshare (and potentially Good Display in the future) would be a fantastic addition. I imagine far more people have these types of displays lying around compared to Inky’s. In that sense, this project could serve as a great starting point for a variety of projects involving ML-generated images and e-paper displays.

@QC20
Copy link
Author

QC20 commented Feb 24, 2025

@Delph, I tried implementing the instructions you posted earlier, but unfortunately, it did not work. I haven't had time to look into why this is the case. Do you have any suggestions on how to proceed from here?

Would you be able to create a new repository with these changes in place?

@Delph
Copy link
Contributor

Delph commented Feb 24, 2025

It's still my intention to do a Waveshare driver in this repository, instead of setting up another, I just haven't had much time of late to do anything.

What didn't work in my instructions? I perhaps missed a bit or forgot something.

@Delph
Copy link
Contributor

Delph commented Mar 28, 2025

Another month has gone by...

This is still on my list to do (hopefully soon). Currently my frame isn't on the network as I rebuilt my home network and I haven't needed to put the display on the WiFi again yet.

@QC20
Copy link
Author

QC20 commented Apr 10, 2025

Same. I have not been working on this project for some time now. However, I have certainly not forgot about it.

Have you by any chance had time to test out the guidelines you mentioned earlier in this thread by yourself?

@Delph
Copy link
Contributor

Delph commented Apr 10, 2025

Same. I have not been working on this project for some time now. However, I have certainly not forgot about it.

Have you by any chance had time to test out the guidelines you mentioned earlier in this thread by yourself?

The guidelines I wrote based on what I did to get it working on my Pi with the same display.

@LegitimateSalvage
Copy link

@Delph I was able to get this working with your instructions on a 7.3 "F" Waveshare display. Thank you!

@QC20
Copy link
Author

QC20 commented May 1, 2025

@Delph I was able to get this working with your instructions on a 7.3 "F" Waveshare display. Thank you!

Would you be able to upload your working version? :-)

@LegitimateSalvage
Copy link

@Delph I was able to get this working with your instructions on a 7.3 "F" Waveshare display. Thank you!

Would you be able to upload your working version? :-)

I'm away from my lab for a while but I'll do it when I get back. It was working flawlessly with a Pi 3B+ but when I swapped the same card into a Pi Zero 2W it will work for a few days and then freeze up, so I need to track that down. Might just be a thermal issue.

@Delph
Copy link
Contributor

Delph commented May 1, 2025

@Delph I was able to get this working with your instructions on a 7.3 "F" Waveshare display. Thank you!

Would you be able to upload your working version? :-)

I'm away from my lab for a while but I'll do it when I get back. It was working flawlessly with a Pi 3B+ but when I swapped the same card into a Pi Zero 2W it will work for a few days and then freeze up, so I need to track that down. Might just be a thermal issue.

@LegitimateSalvage If by "freeze up" you mean you can no longer SSH in, that'll be the WiFi power saving mode which is unfortunately on by default, I created an issue over on the OnnxStream repository about this and the author pointed me towards the solution.

@QC20 Unfortunately, we likely can't just upload our working versions because of licensing. My display is also currently offline, since I redid my network setup and I haven't fixed it yet. I'll put in some time soon to get a proper solution for this I promise. 😅

@DarthOcto
Copy link

@Delph I was able to get this working using the 7.3 inch Waveshare 'E' display and a Raspberry Pi 4 using your instructions.

For anyone struggling I recommend trying running Waveshare's example code found in the wiki section of the products to make sure the display is working, this helped me work through some hardware issues preventing the display from working in the first place.
For example, if you are using the provided HAT it appears that the power is wired incorrectly, and the display won't work unless you use the 8-pin connector instead.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants