summaryrefslogtreecommitdiffstats
path: root/_projects
diff options
context:
space:
mode:
Diffstat (limited to '_projects')
-rw-r--r--_projects/e-reader.md69
1 files changed, 34 insertions, 35 deletions
diff --git a/_projects/e-reader.md b/_projects/e-reader.md
index cefbb03..9598e46 100644
--- a/_projects/e-reader.md
+++ b/_projects/e-reader.md
@@ -5,34 +5,30 @@ thumbnail: thumb.png
layout: post
---
-This project features a minimal e-reader powered by an ESP-WROOM-32 development
-board and a 7.5-inch <a href="https://www.waveshare.com/" class="external"
-target="_blank" rel="noopener noreferrer">Waveshare</a> 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 <a href="https://www.waveshare.com/"
+class="external" target="_blank" rel="noopener noreferrer">Waveshare</a>
+e-paper display built with the intention of learning about e-paper displays.
<video style="max-width:100%;" controls="" poster="thumb.png">
<source src="ereader.mp4" type="video/mp4">
</video>
-## 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
@@ -69,26 +65,29 @@ 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](source.tar.gz)