From 6b8c51e680a0d8814c788e134d50c63341449c4b Mon Sep 17 00:00:00 2001 From: Sadeep Madurange Date: Wed, 17 Dec 2025 22:22:32 +0800 Subject: E-reader epilogue version. --- _site/assets/css/main.css | 15 +++++---- _site/feed.xml | 2 +- _site/posts.xml | 2 +- _site/projects/e-reader/index.html | 67 +++++++++++++++++++------------------- 4 files changed, 44 insertions(+), 42 deletions(-) (limited to '_site') diff --git a/_site/assets/css/main.css b/_site/assets/css/main.css index 5a777c0..46139c8 100644 --- a/_site/assets/css/main.css +++ b/_site/assets/css/main.css @@ -22,12 +22,15 @@ body { text-shadow: 0 0 1px var(--main-fg-color), 0 0 6px var(--main-fg-color); } -body::selection { - background: lightgrey; -} - -p::selection { - background: lightgrey; +::selection { + color: var(--main-bg-color); + background: var(--main-fg-color); + text-shadow: 0 0 1px var(--main-bg-color), 0 0 6px var(--main-bg-color); +} +::-moz-selection { + color: var(--main-bg-color); + background: var(--main-fg-color); + text-shadow: 0 0 1px var(--main-bg-color), 0 0 6px var(--main-bg-color); } .footer { diff --git a/_site/feed.xml b/_site/feed.xml index 850bb0c..ec30baf 100644 --- a/_site/feed.xml +++ b/_site/feed.xml @@ -1 +1 @@ -Jekyll2025-12-17T07:12:59+08:00/feed.xmlASCIIMX | BlogW. D. Sadeep MadurangeHow I manage Suckless software installations2025-11-30T00:00:00+08:002025-11-30T00:00:00+08:00/blog/suckless-softwareW. D. Sadeep MadurangeNeo4J A* search2025-09-14T00:00:00+08:002025-09-14T00:00:00+08:00/blog/neo4j-a-star-searchW. D. Sadeep MadurangeMOSFETs as electronic switches2025-06-22T00:00:00+08:002025-06-22T00:00:00+08:00/blog/mosfet-switchesW. D. Sadeep MadurangeHow to configure ATmega328P microcontrollers to run at 3.3V and 5V2025-04-10T00:00:00+08:002025-04-10T00:00:00+08:00/blog/arduino-unoW. D. Sadeep MadurangeHow to set up ATSAM3X8E microcontrollers for bare-metal programming in C2024-10-05T00:00:00+08:002024-10-05T00:00:00+08:00/blog/arduino-dueW. D. Sadeep Madurange \ No newline at end of file +Jekyll2025-12-17T22:22:01+08:00/feed.xmlASCIIMX | BlogW. D. Sadeep MadurangeHow I manage Suckless software installations2025-11-30T00:00:00+08:002025-11-30T00:00:00+08:00/blog/suckless-softwareW. D. Sadeep MadurangeNeo4J A* search2025-09-14T00:00:00+08:002025-09-14T00:00:00+08:00/blog/neo4j-a-star-searchW. D. Sadeep MadurangeMOSFETs as electronic switches2025-06-22T00:00:00+08:002025-06-22T00:00:00+08:00/blog/mosfet-switchesW. D. Sadeep MadurangeHow to configure ATmega328P microcontrollers to run at 3.3V and 5V2025-04-10T00:00:00+08:002025-04-10T00:00:00+08:00/blog/arduino-unoW. D. Sadeep MadurangeHow to set up ATSAM3X8E microcontrollers for bare-metal programming in C2024-10-05T00:00:00+08:002024-10-05T00:00:00+08:00/blog/arduino-dueW. D. Sadeep Madurange \ No newline at end of file diff --git a/_site/posts.xml b/_site/posts.xml index 7a71ed1..87b163b 100644 --- a/_site/posts.xml +++ b/_site/posts.xml @@ -1 +1 @@ -Jekyll2025-12-17T07:12:59+08:00/posts.xmlASCIIMXW. D. Sadeep Madurange \ No newline at end of file +Jekyll2025-12-17T22:22:01+08:00/posts.xmlASCIIMXW. D. Sadeep Madurange \ No newline at end of file diff --git a/_site/projects/e-reader/index.html b/_site/projects/e-reader/index.html index ea997c4..46e5f21 100644 --- a/_site/projects/e-reader/index.html +++ b/_site/projects/e-reader/index.html @@ -44,33 +44,29 @@

EXPERIMENTAL E-READER

24 OCTOBER 2023

-

This project features a minimal e-reader powered by an ESP-WROOM-32 development -board and a 7.5-inch Waveshare e-paper display built -with the intention of learning about e-paper displays.

+

This project features an experimental e-reader powered by an ESP-WROOM-32 +development board and a 7.5-inch Waveshare +e-paper display built with the intention of learning about e-paper displays.

-

Overview

+

Introduction

-

In 2017, I was tasked with installing some e-paper displays in a car park. Not -knowing how they worked, I remember marveling at their sight like a Muggle -witnessing magic. As someone who enjoys reading, I found e-paper to be a true -innovation. This project was born out of that enduring curiosity and love of -e-paper technology.

+

The prototype e-reader comprises an ESP32 microcontroller, an e-paper display +HAT, and three buttons: yellow, blue, and white for turning the page backwards, +forwards, and putting the device to sleep, respectively. The prototype does not +store books on the microcontroller. It streams books from a server over HTTP. +The e-reader employs RTC memory to record the reading progress between +sessions.

-

The prototype, while far from ready for daily use, has some nifty features that -fellow hobbyists and tinkerers may find interesting. The reader can display -books of arbitrary sizes by streaming them over HTTP. It employs sleep modes to -minimize power consumption when not in use and records the reading progress in -the chip’s RTC memory.

- -

The most formidable challenge when trying to build an e-reader with an ESP32 -board is its limited memory and storage. My ESP-WROOM-32 board has 512KB of -SRAM and 4MB of flash memory, which the freeRTOS, ESP-IDF, and the e-reader +

The most formidable challenge when trying to build an e-reader with an ESP32 is +its limited memory and storage. My ESP-WROOM-32 has a total of 512KB of SRAM +and 4MB of flash memory, which the freeRTOS, ESP-IDF, and the e-reader application must share. To put things into perspective, a Kindle Paperwhite has -at least 256MB of memory and 8GB of storage.

+at least 256MB of memory and 8GB of storage. That is 500x more memory than what +I’d have to work with.

Despite its size, as microcontrollers go, ESP32 is a powerful system-on-a-chip with a 160MHz dual-core processor and integrated WiFi. So, I thought it’d be @@ -107,27 +103,30 @@ memory. It then downloads three pages (current, previous, and next) to a circular buffer in DMA-capable memory. When the user turns a page by pressing a button, one of the microprocessor’s two cores transfers it from the buffer to the display over a Serial Peripheral Interface (SPI). The other downloads a new -page in the background. I used the ESP-IDF’s task API to distribute the two -tasks between the available cores to make the reader more responsive.

+page in the background. I used the ESP-IDF task API to schedule the two tasks +on different cores of the multicore processor to make the reader more +responsive.

I designed the EBM format with HTTP streaming in mind. Since the pages are laid out in the EBM file along predictable boundaries, the e-reader can request pages by specifying the offset and the chunk size in the HTTP Range header. Any web server will process this request without custom logic.

-

Reflections

- -

It’s been six years since the car park and the displays. I began this project -hoping to learn more about e-paper displays, and I got that and more. By -working within the constraints of the ESP32, I forced myself to explore some of -its advanced features: sleep modes, multicore task scheduling, DMA transfers, -and RTC memory.

- -

As for the prototype, while it’s no match for a commercial e-reader with -features like an offline library of books and touch screens, there’s something -to be said about reading on hardware you built yourself. You are no longer the -powerless Muggle watching others perform magic. You are the wizard who makes -the invisible particles swirl into form by whispering C to them.

+

Epilogue

+ +

My fascination with e-paper began back in 2017, when I was tasked with +installing a few displays in a car park. Having no idea how they worked, I +remember watching the languid screens refresh like a Muggle witnessing magic. +This project was born out of that enduring curiosity and love of e-paper +technology.

+ +

Why did I go to the trouble of building a rudimentary e-reader when I could +easily buy a more capable commercial e-reader? First of all, it’s to prove to +myself that I can. More importantly, there’s a quiet satisfaction to reading on +hardware you built yourself. You are no longer the powerless observer watching +the magic happen from the sidelines. You become the wizard who makes the +invisible particles swirl into form by whispering C to them. There’s only one +way to experience that.

Files: source.tar.gz

-- cgit v1.2.3