E-paper instant camera

An instant camera where the "film" can be used again and again.

Similar projects worth following
I am a big fan of e-paper. I love that it holds an image permanently without power, kind of like, well, regular paper. Which got me thinking, what kinds of fun things do people do with static images? Well, photos of course! And is there anything more fun than an instant camera?

So that's where the idea for a polaroid style camera saving images on to e-paper came from. The e-paper could be updated with a new photo whenever you got tired of the old one! The replaced photo would be lost forever (if you shelve away a photo and don't look at it again, is losing it even a problem?). And, well, photo paper is expensive, and single use, and all that. E-paper is truly the future. No batteries needed! (except in the camera itself). So this is what I built, on and off, over a few different versions, over a few years. Maybe there'll be a new version in the future?

So this is a camera that takes a picture and shows it directly on an e-paper screen. The e-paper screen is updated and powered via NFC, so no connectors (and no batteries) are needed, and it is held in place on the camera by magnets. Once the picture is taken, you can hang the picture up on your fridge if you like.

If you want to take a new photo though, you need to make the decision - will the new photo be worth losing an old one forever? Of course you could also buy more NFC e-paper screens, but oh boy are those prices prohibitive.

The camera itself uses an ESP32 as the brains, a very basic OV2640 camera (but for a 300x400 binary black and white display, it's already overkill), NFC communication to update the screens (Waveshare 4.2in NFC e-paper screens), and USB-C for charging an internal 18650 cell.

The body is 3d printed and painted, and the grip is fancy flexible engraved walnut "wood textile" from NUO. It has a single button with LED for control. Hold down the button to power on the system (a latching circuit disables the power supply IC to minimise current draw when off) and a constant red light on the LED indicates it has detected a screen and is ready to take a photo. Push the button and the LED will start blinking to indicate it has taken a photo and is uploading the image to the screen. The screen will update with the new photo, and can be disconnected from the camera if you like it. If it's a terrible photo, hey, just take another one, it's not wasting any paper.

Charging is via a USB-C connector on the side, unfortunately not so artfully hidden but I needed to leave stuff to do in the next version.

Code is available on my github, linked here in this project, but be warned, I taught myself this stuff through googling and copy and pasting, and the code is well, I'll call it "rustic". PCB files are a bit messy too but are also up on this page. I could also put up the CAD files if they are of any interest, but it's nothing fancy either. Depends how much interest there is in this I guess.

I would love to find a source of cheap NFC e-paper screens, I hear they are sometimes used in supermarkets but still looking for a cheap source. The ones I'm using now from Waveshare are not cheap enough to make this idea really fun unfortunately, but hopefully e-paper gets cheaper in the future. My next step would be to make the screens myself, as I'm not really happy with the case on them and it would be cool to have options for colour screens or different resolutions as well. But this project already took several years to get to this state so this will probably take a few more.

x-zip-compressed - 14.14 MB - 02/12/2023 at 13:23


  • A custom PCB and a body to match

    Cameron02/09/2023 at 22:26 0 comments

    It was clear after the protoboard approach that if I wanted to do a decent job of the thing, I would need a custom PCB. The fact that I would need to design a PCB antenna for the NFC part, combined with never having made a PCB in my life before, really slowed down this step. It was not until 2 years later, in 2022, that I had finally practiced with PCB design (for my Postcard Frame project) and felt ready to give this another shot.

    As I was basically recreating my prototype that used the ST development board, I pretty much copy and pasted the design for this bit from their reference files. I watched a lot of videos about antenna design and tuning, and my main take away was that I really didn't want to design my own antenna if copying someone else's would do the job.

    I became quite worried about the various impacts of a radio antenna on my board though, and tried to follow as many best practices as I could to limit its effects, especially considering I had an ESP32 with wifi and bluetooth on the board, and communication with a camera too. I haven't used the wifi or bluetooth yet, but I thought they eventually could be interesting in the future. I think I am still getting some kind of noise into the camera signal, as sometimes I see line artefacts in the camera image, but I am not quite sure where this is coming from, or if it's just a soldering issue.

    Of course it needed a little waving cat on it as well.

    But overall the PCB design was fine, definitely much to improve and hopefully the design could be further simplified, but importantly I was able to stencil up the solder paste, solder on the components, and it all worked first time. Or mostly. Right now there is a slight issue that the device can shutdown on holding the capture button, but it doesn't turn back on without disconnecting the batteries. Still need to debug this.

    Almost as important as the PCB design was the design of the body itself. I wanted to make something that looked like a camera, maybe like one of those cool 80s style ones, and was simple to use. I settled on the final shape, essentially a more compact version of my intial concepts, but added magnets inside the Waveshare NFC screens to hold the screens in place on the camera. This allows the screens to be orientated correctly, and also allows them to be fixed to a fridge.

    The case was 3d printed using an FDM printer, but it is very thin and has small holes so resin or powder based printer would probably be better. 

    To make it actually look a little less "garage" I primed, filled, sanded and painted the parts to get an okayish finish. 

    The band in the middle as a grip also had to look good. Leather was one idea, but almost too ordinary. I had played around with mushroom based mycelium leather in the past, and thought that could be a potential option, but the suppliers i had samples from didn't look much more impressive than leather themselves. I was looking for different sources of wood veneer for a kind of natural look when I came across this very nice flexible wood veneer with engraved patterns called NUO. It came in a variety of different wood types and looked amazing in pictures. So I ordered a sample and it was exactly what I wanted.

    Cutting this was not so trivial though, at least neatly. I think you can probably laser cut it, I was in a rush though and just used a printed out template and a stanley knife. To hide the edges I added little edging pieces around the camera hole and the USB charging hole.

  • Packing it together

    Cameron02/09/2023 at 22:02 0 comments

    So I had a mess of cables and some code that could get a picture on to these damn NFC screens. The project was in principle finished, at least so I thought. I just needed to solder up a protoboard, print a body for it, and it would be done. Unfortunately I cant find the photos from when I did this in 2020, but the parts are still floating around in my many junk piles.

    To get the ST demoboard to fit I had to saw off some parts and trim the longer header pins, but it worked well enough. I realised from this that the form factor of the ST board was really awkward if I wanted to do an actually nice looking body.

    The ESP32 cam board was also awkward to fit, and headers made the whole thing much thicker than it needed to be. The 18650 battery fit nice on the handle side though.

    The front of the camera was... underwhelming. The small lens on the ESP32 cam was definitely good enough for the job, but it really didn't look "camera like". My initial ideas of building something vaguely polaroid like in shape would be hard to realise.

    The screen was held in physically, by sliding it into the back. On this crappy 3d print this was not so nice, and I realised another problem was then actually holding up the screen once you had a photo on it. The hefty switch on top would connect the battery power, and turn it off as well, which was not so great for the look either. The capture button on top had an LED though, and I was able to get the LED to light up to indicate if a picture was taken or when the camera was ready.

  • Fighting with NFC

    Cameron02/09/2023 at 21:41 0 comments

    So after the first proof of concept with the Raspberry Pi and direct SPI connection for the screen I was fairly satisfied. At least for a few weeks. It bothered me that I needed to use a connector at all. I started to look up about wireless charging, thinking that potentially I could power the screen wirelessly and send the photo to it over bluetooth or wifi or something. This would make the device much more user friendly.

    It was also clear that the Raspberry Pi was a dead end for this kind of thing. It was overkill, and made everything bigger and more complicated. I would ideally do the next version on a microcontroller.

    This was around 2020, and I was checking the waveshare website to see if there were any new cool e-ink screens I could play with (I was also working a little bit on my Postcard Frame idea around this time too). And incredibly, they had just started selling wireless screens, with no battery, powered by NFC. This was everything I was looking for, already in a relatively neat product. No need for me to even print a case! Of course I bought a couple to play with straight away. That's how I began my long mission to communicate with these NFC e-paper screens with an ESP32.

    Unfortunately, the documentation for the screens themselves was not amazing. There was an android app (no source code available of course) to control them, but my phone can't do NFC and I wasn't going to build a phone into my camera idea. There was also a big, bulky, STM32 based demonstration board from Waveshare which could be used with it. This was also far from ideal, and the code was hard to understand, and ultimately I wanted to do this on something like an arduino or ESP (as I only knew the arduino environment at that time). So I needed to find another way to communicate with these neat NFC e-paper screens.

    At first I bought a random NFC reader kit and connected it to an ESP32 to see if I could get it to read anything from the screen. Nothing at all. I knew nothing about NFC so there could have been 100 reasons, but I figured maybe I needed to use exactly the same chip as in the Waveshare demo board. Upon further research the Waveshare board seemed to be basically an X-Nucleo NFC05A1 demo board from ST, running basically the example code. I couldn't find anywhere the exact commands used for communicating with the screen itself, so emailed Waveshare directly to ask. No response at this point. But I bought the ST demo board and figured, even if I couldn't find any examples online to follow, it communicated over SPI so I should be able to get it to talk with an ESP32.

    So the SPI communication turned out to be a relatively straightforward. Now I needed to communicate with the ST25R3911B NFC chip itself. Fortunately there is an amazing hardware abstraction library from ST for precisely this, but built around their STM32. As I was basically googling and reading forums to try and work out how to do this stuff, moving to a less popular ecosystem was going to hurt a lot. So I started trying to get the ST RFAL library working on an ESP32. After a much longer time than it should have taken (I am definitely not an embedded programmer), I found that the only issue preventing the code running on an ESP32 was the Interrupt calls, which could be very easily replaced in the library. I don't know if I did this properly or even did a good job, but I managed to get it running and reading the Waveshare e-paper screens.

    Then of course came the question of how to talk with these e-paper screens. The demo code from Waveshare had no information on this. Luckily, in the mean time, I received a reply from Waveshare with a strange excel with the screen commands, and from that I was able to work out how to upload an image. I finally managed to take a photo with an ESP32CAM board and display it on an NFC e-paper screen, using the X-Nucleo NFC05A1 board.

  • V0.1

    Cameron02/09/2023 at 21:02 0 comments

    So when I first had the idea for an e-paper polaroid in 2019 I bought a basic SPI e-ink screen (actually a couple because they looked fun) and played around with an RPi and RPi camera to put images on it. It worked, almost too easily.

    I was immediately struck by the images, there was definitely some kind of style to them with the low resolution, binary black and white display. I don't know if other people find the style so attractive, but it inspired me to keep going.

    So I did a slightly more polished version in a 3d printed case with buttons. I also printed a case for the screen itself. Issues were however is the connections for the e-paper screen were just whatever kind of plastic connector came with it, which was not so great for easily swapping the screen. I had ideas to replace it with potentially a blade connector or maybe pogo pins eventually. The 3d printed case also looked like crap, but it got the idea of a "camera" across. And using an RPi for this was complete overkill, and the issues with safe shutdowns and start-ups on battery power and all that were basically a big distraction.

    A very basic solution for the viewfinder.

    It might not be the best camera in the world, but as the output is a 300x400 pixel binary display it was already massive overkill.

View all 4 project logs

Enjoy this project?



Thomas wrote 04/22/2024 at 10:22 point

Hi Cameron. I just came across your fantastic project by chance.
I would like to run an ST25R3911B chipset, like in the Waveshare board, with an ESP32.  You seem to have done this quite successfully. Would it be possible for you to share the code or the customized library here? I have already realized some projects with ESP, but unfortunately I am an absolute beginner when it comes to STM and stm32duino. I would be very happy about any help!

  Are you sure? yes | no

joerivda wrote 02/13/2023 at 07:21 point

Thx for all the work you put in to this, and thx for sharing it to the community! Great Job!

  Are you sure? yes | no

Cameron wrote 02/13/2023 at 11:46 point

Thank you for the kind words!

  Are you sure? yes | no

mikeV wrote 02/11/2023 at 12:24 point

hi Cameron, check out and his work on esls, there’s also a link to his discord server somewhere in his repo’s where you will find a lot of people working on epaper price tags. 

I love your work, this is excellent as is the photoframe. I’m very interested in the code for the frame so if you would be able to share it I would be very happy. 

Keep up the beautiful work, well dorn

  Are you sure? yes | no

Cameron wrote 02/11/2023 at 18:10 point

Thanks a lot for the kind words and tips! Indeed that is an interesting github, I couldn't find the link to the discord server but I'll keep looking out.

I can share an adapted version of the frame code (I'll try and update the project this week with it), but unfortunately I'll a little paranoid about sharing the full code. Essentially how the frame works is it wakes up, queries a server to download the latest picture and then goes to sleep for an amount of time specified by the server, I have all the picture changing logic running on my website. This website though is my first real webcoding, and I don't know how secure I have it, so what I'm worried about is third parties somehow accessing the photos of my friends and family. In theory it needs a pass key kind of thing to see the photos but this is a topic I'm really just beginning to learn about.

The code on the ESP32 in the photoframe doing the actual picture loading is fairly straightforward though, and is pretty much the HTTP example from the GxEPD2 library on arduino. Hope that helps and I'll try and get a sharable version of that code up soon!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates