CALE Low Energy Eink wallpaper

Long-life battery powered photo frame that renders a calendar/website every morning and goes to Deepsleep. All configurable and open source

Public Chat
Similar projects worth following
The idea is to provide two open source parts: 1. ESP8266/ ESP32 Firmware using in C++ using GxEPD library and supporting Eink displays with different resolutions. 2. A server-side script that will take care of making an screenshoot of any website and return a BMP image that this display can read. An example in php is provided but it can be done in any language. The firmware does not care as long it returns a bitmap non-compressed image.Once the Espressif board is online an UX interface is exposed for some minutes in case you want to render a custom website or text and then it will go to sleep. In Deepsleep mode it should consume less than 1 milliamperes to avoid draining your battery. Point 2 is called CALE integrations and is being built: launching first week of March 2020

ESP8266 demo without download compression

About composer

We use composer to install php dependences. Just go to the screenshot folder and run:

composer install

That's it. It will create vendors folder and download all required libraries. Make sure the other scripts reference this vendor/autoload.php with the right path.

Google calendar reader

In the directory screenshot/g_calendar you can find a very easy and configurable example to generate a webpage with your google calendar:

Screenshot tool

The single file php script needs two things to work. First :


That is the responsible to take a website screenshot and return an image. And after this the php-imagick extension that in most Linux servers you can get installed with one command line.

Imagick is a PHP extension to create and modify images using the ImageMagick library. You can use also a different library to convert the image to BMP like :

As long as the output is a 1 or 4 bits depth BMP image. The firmware will read also a 24 bits depth image but is unnecessary large when we just want to render a monochrome image.

About colours

I find the two colours eink that I've tested very slow compared to the only black ink models. So the firmware can support with gxepd library two color models but is up to you to implement it.


Demo model for a TinyPICO and 5000mA 60*100*6mm 5000mA Lion

sla - 340.80 kB - 01/25/2020 at 10:48



PLA hat cover to glue in the back of the epaper display

wavefront-obj - 23.28 kB - 01/25/2020 at 10:48



A fast preview to get an idea how it looks

Portable Network Graphics (PNG) - 52.86 kB - 01/19/2020 at 23:09



Blender file for the back 7.5 Waveshare eink

x-blender - 735.16 kB - 01/19/2020 at 23:07



STL preview, notice that the idea is to edit the Blend file and add your custom walls for battery, ESP32 and so on

sla - 322.64 kB - 01/19/2020 at 23:07


View all 6 files

  • 1 × ESP8266 board Optionally ESP32 but not needed in v1.0
  • 1 × E-ink display with Hat exposing SPI interface Any size you like. Waveshare has nice ones like 800*480 pixels. We prefer b/w without any colours since it refreshes faster
  • 1 × Powerbank at least 10000 ma Even if it's 5000 mA will last for long days. I'm tired of adding Lion power and charging circuits like adafruit that proved so far to be non efficient
  • 1 × 3D Printed case and HAT cover STLs/OBJ Provided in files
  • 1 × *optional 12x12 mm push reset button Goes between RST in the board and ground, simply restarts it

  • cale administrator is online

    Martin Fasani7 days ago 0 comments

    And it's launching in a few days. If you want to be one of the first ones testing it just register here:

    This will let you connect with external APIs such as google Calendar and create Screens for your ESP32 displays

  • Building Cale backend

    Martin Fasani02/10/2020 at 07:01 0 comments

    Still some days of hard work, but PHP framework Symfony is making it easy to design the forms and validation. The status so far:

    Addding wizards that make easier the process of connecting APIs like Calendars, Todo apps and much more. Github issues is also going to be added, so you can list your open requests for your Repositories. The target can be your Eink:

    But could be displayed publically or privately using the HTML version. There will only two options at launch:

    - Open to the world

    - Secured with a Bearer auth token. In that case an SSL version should be compiled otherwise the whole security thing makes little sense when your key is flying over the air unencrypted.

    Keep tuned on CALE

  • Looking for new testers: Here my offer

    Martin Fasani02/04/2020 at 14:23 0 comments

    • I will build the Backend for you. Options to integrate APIs into the screen right now are:
      Google calendar - Timetree (shared calendar) - Weather (darksky API)
    • In case you don't have a 3D printer. I will print it a 400*300 4.2 Case for you and cover up to 5€ from the shipping costs

    What you need to build this in your side:

    Look at the components for more information. All components excluding the 3.7 Lion battery cost around 35 u$ or 40 top if you want a very low sleep consumption ESP32. But you can use any ESP32 that you already have, the essential part that is the EInk costs 26u$ in Aliexpress. Make sure to select it with Adapter Board that is the SPI adapter.

    The result after building is like this, a small dynamic Eink, that you can stick to your fridge or without magnets and 2 holes, to mount on the wall. 

    Backend integrations are coming soon in a new format, with a small Admin-Backend so you can select what to print in your screen, plan looks like the following. 

    If you like the idea, just send me a short message, here or add me to your twitter and I will add you back. 

  • Note about Waveshare Epaper 7.5" V1 & V2

    Martin Fasani01/30/2020 at 08:26 0 comments

    CALE is ready to be tested and works stable in ESP8266 and ESP32. This log is to make a remark about my experience with this 7.5" displays of Waveshare

    V1 640x384 245760 pixels

    Can work with:

    • ESP32
    • ESP8266

    GxEPD : #include <GxGDEW075T8/GxGDEW075T8.cpp>

    This first version of Waveshare display that can be found in Alixpress for about 53u$ is a very good candidate for both SoCs. Compression is only supported in ESP32, although is not needed, is only a mean to save some seconds downloading the image.

    V2 800x480 384000 pixels (138240 more than V1)

    Can work with:

    • ESP32

    GxEPD : #include <GxGDEW075T7/GxGDEW075T7.cpp>

    I tried to compile master of the CALE repository on a ESP8266 and it just restarts all the time. So I left there the GxGDEW075T8 model as a default include for that works for both.
    Maybe someone can try to make it work on ESP8266 with different settings, please let me know, but I suspect is using too much memory since they are a lot of pixels.

    They are different benefits using ESP32 vs ESP8266. The ESP32 consumes almost double since has 2 cores. But adjusting CPU frequency in plataformio.ini can also be a good way to reduce consumption:

    board_build.f_cpu = 80000000L

    ESP8266 is a great candidate for this, since it consumes very little, and has the right resources to drive the V1 version of this display and all the other smallers, it's also cheaper than ESP32 so I will highly recommend it as a first choice. Due that it can sleep only max. about 3 hours compared to his bigger brother, I prepared a special branch that sleeps 3 hrs * 8 times if you want to have a calendar that refreshes only once a day saving as much battery as possible:
    Benefix of using ESP32 is that is faster, allows driving the V2 high resolution display and also supports compression. It's more precise to deepsleep long periods of time but it also consumes more. So it's up to you, depending on your project, what is the candidate to use as a display driver.

  • CALE Waveshare 7.5" v2 E-ink back-case

    Martin Fasani01/25/2020 at 10:27 0 comments

    I added a very simple back-case replacement for the original Waveshare 7.5" white case with magnets. Designed also a small cover for the Eink HAT so it can be easily glued to the back of the Eink, making Epaper and HAT adaptor a single piece for easy mounting. 

    Please check the CALE 3D Model on Thingiverse.

  • Back-case that you can edit in Blender

    Martin Fasani01/19/2020 at 22:44 0 comments

    When it arrived per post, the new V2 seven inch Waveshare, I was a bit unmotivated when I saw the plastic thin original case:

    My face expresión was: Meh :( No space for anything right fellas? Not even a tiny ESP32, let’s forget the battery. But my eyes shined when I saw the nice close design with 12 magnets. That’s it, let’s use the front that looks nice, and discard the back that is useless unless you put the controller and battery outside of it.

    So I put my 10% Blender knowledge at work and come up with this:

    That was the first test print. No compartments just plain STL box, with the right size to press the 5 mm diameter magnets.

    Attached to the Files section of this project.

  • ESP32 supports ZLIB compression. A note about deepsleep

    Martin Fasani01/13/2020 at 10:58 0 comments

    I found time in the weekend to test the ESP32 version in the branch feature/compression

    The idea is to take advantage of ESP32 bigger memory to receive a Zlib compressed Bitmap, which reduces in about factor 4 the download time (4.5 seconds vs 0.9 seconds)

    Proof-of-concept serial output with 800*480 px Waveshare eink
    displayWidth: 800 height: 480 File size:48146 Compressed: 3995
    Image Offset:146
    Header size:124
    Width:800 Height:480 Bit Depth:1
    Planes:1 Format:0
    Read=48032 bytes. Sending BMP pixels to display
    Eink isRendered: 1 BENCHMARKS:
    Download: 908 ms Decompress: 4 ms Total Rendering including download: 10 seconds

    As for what deepleep goes, my father reported in his Wemos D1 ESP8266, about 0.8 mA in deepsleep mode.

    In the ESP32's I have currently available, I still get higher values for deepsleep, here a thread I started on the bluebird: -> Follow me for more updates on my projects here

    Lolin 32 v1.0.0: 19 mA in deepsleep
    Heltec            : 10 mA (turning off the oled)

    DFRobot Firebeetle V2: <1mA (But costs up to 19€)

    So I highly recommend if you want to achieve low consumption to start with a modern Lolin D32 and make a small research to get a board that is design with lower consumption in mind. Many out of there in the 5 to 7 € price range are consuming too much when on deepsleep.

    Some of the options mentioned after researching this topic where the DFRobot Firebeetle ESP32 and also the TinyPICO a project by UnexpectedMaker. There may be many others and even ranger at lower prices, please make your research and comment about your favourite pics. 

    18uA is what TinyPICO consumes on deep sleeping and that would be an ideal candidate for a Battery operated CALE, not only for the deepsleep consumption but also for it's mini-size which will fit in very small cases. 
    Another alternative to consume less is to reduce the CPU Frequency to 80Mhz in platformio.ini

    board_build.f_cpu = 80000000L
    This will of course make the processing and decompression slower but only minimally at the adventage of using less battery. 

  • Interesting E-ink project: Inkplate-6

    Martin Fasani01/08/2020 at 16:22 0 comments

    I spotted this quite late since they are already backed up:

    I would love to give it a try. So I'm considering making a CALE version also for this display. 

  • Keeping your deepsleep at minimum consumption

    Martin Fasani12/30/2019 at 20:55 0 comments

    Is the key for battery lifespan.

    And there is a bit more to research in this field. For example if the VCC consumption of this Eink is below 12 mA why don’t to power it with a gpio of our Espressif board? 

    That will keep it from draining unnecessary energy when we are in deepsleep. Doing that simple improvement and taking control of the VCC took the deepsleep consumption from 1.3 mA to 0.84 mA

    Here is the proof of concept update:

    Needless to say, but check what is the max consumption that is allowed in your microchip specs, going over it may damage your board!

  • ESP32 version is ready to be tested

    Martin Fasani12/28/2019 at 08:20 0 comments

    To compile the Firmware in this two different boards is now easier after this update:

    Update the line in platformio.ini to define in what board you want to compile:

         ; espressif8266 OR lolin_d32
        default_envs = espressif8266

    And set the SPI Pins in Config.h
    We decided to use just GPIO integers and not anymore this D1->D8 Constants to keep it uniform across different environments:

    // ESP8266          |  ESP32 in comments
    int8_t EINK_CS = 5;    // GPIO 5
    int8_t EINK_DC = 0;    // 17
    int8_t EINK_RST = 2;   // 16
    int8_t EINK_BUSY = 12; // 4

    That's it. As a reference here is a Wemos D1 ESP8266 GPIOs

    Lolin ESP32:

View all 12 project logs

  • 1
    Select a board that you want to use: ESP8266 or ESP32

    Either will work. 8266 will consume less but ESP32 will have another powerful features that make it a nice partner to travel with like zlib compression and bluetooth configuration

  • 2
    Get PlatformIO and the Framework from your selected board installed If you still use Arduino is also fine, but I recommend to try Platformio since is a very nice way to package dependencies in your project

  • 3
    Build and compile

    Edit the default_envs line if you want to switch to lolin_d32 (ESP32) or just select your board to match it exacly

    And make a copy of lib/Config.h.dist into lib/Config.h
    Add there your SSID / PASS so the board knows how to connect to your Router

View all 6 instructions

Enjoy this project?



Martin Fasani wrote 4 days ago point

Launched so you can compose a dynamic screens there and fetch it from ESP32. If you want to try it out just register and I will get in touch. I really need some early feedback!

  Are you sure? yes | no

Martin Fasani wrote 12/23/2019 at 14:27 point

This one is a 7.5 inches Waveshare. The new version looks even better since it has more resolution: 800x480

This takes about 4.5/5 seconds to load using ESP8266. In the branch feature/compression there is an ESP32 version supporting zlib (miniz decompression) downloading a compressed BMP image reduces this download time to 900 miliseconds

  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