E-paper Picture Frame
First, let's start with saying big thank you to PCBWay. They kindly sponsored the whole PCBA and that helped a lot to make this project financially doable for me.
In summer of 2022 I became an uncle. The whole family is enjoying it and everybody is making way too many pictures. Already now (8 months after the birth) all the walls are filled with the pictures. Thus, I thought about looking for some alternatives. I have seen e-paper screens and that sounds like a viable solution here. I could switch images every 24h and so reduce the needed picture frames.
I found that Pimoroni has 7.3’’ and 5.7’’ 7 color e-paper screens (Inky series). The last one is especially interesting as they provide it together with all the necessary HW. After I ordered the PCB, Pimoroni published a 7.3’’ 7 color e-paper Inky too. Unfortunately it was too late to adjust my design, however I still think I can live without an extra flash on the board.
Their offer looks tempting, however the 5.7’’ version was at least at that time of consideration constantly out of stock. Additionally the price was quite high. As I don’t live in the UK I have to pay the postal fee and additional custom duties.
After some research I noticed that both screens look the same as offered by Waveshare. Thus, I was thinking of making my own PCB driver board to connect the e-paper screen with a Raspberry Pico. My plan was simple - use the Pimoroni 5.7’’ shield and adjust it minimally for my application.
PCB Design
Without wasting any time I designed the PCB and ordered the screens. Unfortunately the 7.3’’ screen was out of stock when I ordered and I had to be satisfied with the smaller one. During the designing I remembered that I saw a calendar project and got one single color 7.5’’ screen for that one. It uses the same 25 pin FFC cable as the 5.7’’ screen. I think the same driver could be used with several other e-paper screens as they use the same Waveshare driver board. One should confirm it before trying. My focus was on three specific screens:
- 5.7’’ 7 color e-paper
- 7.3’’ 7 color e-paper
- 7.5’’ single color e-paper
From the Waveshare homepage I downloaded all the datasheets and compared them to the Pimoroni design. I noticed that the 7.3’’ had 50 pin plug with much more connections than the other two, thus it required its own connections. Defining the pin orientation was very complicated. The datasheets had very blurry images and in the end I added two 25 pin plugs just to be sure that I can plug the FFC cable both ways.
I think there is no need to comment on the PCB design process. I basically rebuilt the Pimoroni 5.7’’ shield and added/removed some components. The 7.3’’ 7 color screen connections I copied from the Waveshare adaptor shield. During the PCB design the Pimoroni 7.3’’ Inky was not yet available, thus I haven't compared the full difference between theirs and mine. One big difference is the on board Flash, I don't have it. All together, there were a lot of components and the PCB was larger than I expected.
The PCBs I ordered from PCBWay who kindly sponsored the whole PCBA project. The PCB quality is exquisite and I’m wondering why I haven’t used their services before. They were very helpful and the whole communication was very professional. I have had much worse service with other upscale PCB suppliers.
I was very surprised when they sent me an email with pictures to check the work. I haven't had such service before. Especially surprising was the fact that they were ready two weeks before the promised date. In the end a lot of positive surprises.
I soldered myself the 3AA battery holder and the headers for Pico. Additionally, I added the RTC battery. One could power the RTC from the same battery as Pico, still I would prefer to keep them separate. If you don’t want to use the coin cell battery one can solder a 0 Ohm resistor R14 instead of the battery holder.
One can find desing files here: https://github.com/drtonis/5.65inch-E-ink-Photoframe
First Usage
The Waveshare screens came very nicely packed and looked good. At the first look it was difficult to determine which side is the screen front, but I assumed that the sticker is placed on the back. Additionally these screens are amazingly thin and light.
Without much hesitation I connected the driver board with a screen and added a Pico. I downloaded the SW from Pimoroni and it worked without any bigger hassle. The first demo project Pimoroni showed was not very clear for me and in the end I had to reflash the Pico. I got stuck somewhere in the code and wasn’t sure how to proceed. Now after some experience with Pico and Micropython I think the reflashing was slightly overkill.
I tried to figure out how long the battery lasts and I was able to change the image 1250 times with batteries. Afterwards the batteries were still in good shape. Thus, I assume I’m able to use the picture frame with the same batteries for more than 2 years. Of course, during my test, there was minimal sleep energy consumption. I had to stop the test since I had a strange HW issue and I wasn’t able to update the screen.
Despite trying everything I wasn’t able to find the cause. My first assumption was empty batteries. Then I thought that somewhere on the board I have a faulty component. Again I wasn’t able to find any. In the end I tried the board again and it worked. Therefore, I assume the issue was a bad connection between the screen and the PCB since I moved it on the table.
Software
My hope was that I could get from Pimoroni directly working code. Obviously that wasn’t the case and it took me a few trials before I got the sleeping working. Going to sleep mode was not an issue, however waking up again was not as simple as thought. There is no feedback if the code gets an error and the whole board just stops. Additionally, I wasn’t sure what is the best way to store the current picture nr. Therefore I decided to write a txt file on the SD card and save the current state there. After waking up the code reads the image number and changes the shown image accordingly. Then the image number is adjusted and the board goes back to sleep. It should wake up at midnight and adjust the image. Probably one could save this information to the EEPROM, nevertheless I didn’t know how to do it and there was an example code for SD-card writing.
One has to copy the images to the SD-card. Only landscape format is supported. If one uses a portrait image, the missing 1/3 of the screen will be empty. It is recommended to use the correct image size, I didn’t try with larger images.
Insert the SD-card and start the script. That’s it.
I made the first tests with a 16Gb uSD-card and it worked without issues. For the final solution I decided to use 2Gb cards since the image files are very small. It took me a while to figure out why the 2Gb card was not working. I was not able to save the txt file and the code stopped. After some trials I found out that I needed to write the txt file before updating the screen. No idea why, however it works this way. I assume the SD-card library is doing something that collides with the display update. Probably a delay would have worked too, nevertheless I didn't test it.
The needed MicroPython .uf2 file can be downloaded from https://github.com/pimoroni/pimoroni-pico/releases (pimoroni-picow_inky_frame-xxxxxx-micropython.uf2)
How to: https://learn.pimoroni.com/article/getting-started-with-inky-frame#troubleshooting
Don’t forget to adjust the screen size to your screen.
One can find my desing files here: https://github.com/drtonis/5.65inch-E-ink-Photoframe
To start the script, after power up, I had to push SW_A, the Led_Act lights up for a short moment.
Waveshare recommends updating the screen after every 24h and it should have 180 seconds between the updates. For longer time storage one should clear the screen, however I didn't see any indication what the long time is.
Final Assembly
Assembly is simple:
- Before assembling everything be sure that the RTC has correct time – in the frame I used there is no place for an USB plug, thus reprogramming is difficult.
- Check that SW works
- Solder the battery back through the frame (C.stl) to PCB
- Screw PCB on the PCB holder (B.stl) – the holder is 5mm thick + 1.6mm from the PCB -> max screw length is 6mm. I used M3x5mm screws
- Check that the middle FFC plug is in the middle
- Remove everything from the picture frame
- Clean the glass – mine was amazingly dirty
- Insert the thin screen frame (A.stl)
- Add screen
- Place the PCB on top of the screen – be careful with the display cable
- Insert the display cable into the plug
- Add the outer frame
- Add batteries
- Fix the batteries (D.stl) – my battery holder do not hold the middle battery well and I need something to keep it in the holder. I used an M3x8mm screw
- To start the script press SW_A button – Led_Act should light up for a short moment.
- The image will be updated – if not something went wrong and you have to get the board out and you should use Thonny to figure out what is happening.
- Every midnight the picture should be changed
One can find desing files here: https://github.com/drtonis/5.65inch-E-ink-Photoframe
Conclusion
In this Instructables I showed my e-paper picture frames. I find them very appealing and the hardware turned out very nice. If somebody is interested to build his/her own all the necessary files are attached. At least I'm happy with the project outcome.
In the next steps I would like to make a calendar that shows my appointments, however at the moment I don’t have time for that project. What is more, first I have to figure out how to access my google calendar with the Pico.
Theoretically the 7.3’’ 7 color screen should work directly out of the box. I will test it some day, however I don’t have the screen at the moment and again the time is a limiting factor for the next few months.