summaryrefslogtreecommitdiffstats
path: root/_site/projects/e-reader
diff options
context:
space:
mode:
Diffstat (limited to '_site/projects/e-reader')
-rw-r--r--_site/projects/e-reader/index.html48
1 files changed, 27 insertions, 21 deletions
diff --git a/_site/projects/e-reader/index.html b/_site/projects/e-reader/index.html
index 5fe3341..9d26ee2 100644
--- a/_site/projects/e-reader/index.html
+++ b/_site/projects/e-reader/index.html
@@ -2,12 +2,12 @@
<html>
<head>
<meta charset="utf-8">
- <title>Prototype e-reader</title>
+ <title>Experimental e-reader</title>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
- <title>Prototype e-reader</title>
+ <title>Experimental e-reader</title>
<link rel="stylesheet" href="/assets/css/main.css">
<link rel="stylesheet" href="/assets/css/skeleton.css">
</head>
@@ -41,12 +41,12 @@
<main>
<div class="container">
<div class="container-2">
- <h2 class="center" id="title">PROTOTYPE E-READER</h2>
+ <h2 class="center" id="title">EXPERIMENTAL E-READER</h2>
<h6 class="center">24 OCTOBER 2023</h5>
<br>
- <div class="twocol justify"><p>This project features a prototype 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.</p>
+ <div class="twocol justify"><p>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.</p>
<video style="max-width:100%;" controls="" poster="thumb.png">
<source src="ereader.mp4" type="video/mp4" />
@@ -95,20 +95,20 @@ PDF documents to EBM files.</p>
<h2 id="how-does-it-work">How does it work?</h2>
-<p>As the e-reader has no storage, it can’t store books locally. Instead, I first
-have to upload the EBM file I want to read to a web server. The <code class="language-plaintext highlighter-rouge">EBM_ARCH_URL</code>
-setting in the Kconfig.projbuild file points to the URL of the file. To read a
-different book, I create an EBM file with the same name and upload it to the
-original location. That way, I don’t have to modify the <code class="language-plaintext highlighter-rouge">EBM_ARCH_URL</code> value,
-which requires recompiling the embedded software.</p>
+<p>As the e-reader has no storage, it can’t store books locally. Instead, it
+downloads pages of the EBM file over HTTP from the location pointed to by the
+<code class="language-plaintext highlighter-rouge">EBM_ARCH_URL</code> setting in the Kconfig.projbuild file on demand. To read a
+different book, we have to replace the old file with the new one or change the
+<code class="language-plaintext highlighter-rouge">EBM_ARCH_URL</code> value. The latter requires us to recompile the embedded
+software.</p>
<p>Upon powering up, the e-reader checks the reading progress stored in the RTC
memory. It then downloads three pages (current, previous, and next) to a
-circular buffer in DMA-capable memory. When the user turns a page, 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 use the ESP-IDF task API to distribute the two tasks between the
-available cores for maximum parallelism.</p>
+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.</p>
<p>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
@@ -118,10 +118,16 @@ web server will process this request without custom logic.</p>
<h2 id="reflections">Reflections</h2>
<p>It’s been six years since the car park and the displays. I began this project
-hoping to learn the low-level workings of e-paper displays. As a bonus, it led
-me to explore some of ESP32’s most fascinating features: sleep modes, multicore
-processing, DMA, and RTC memory. Embedded systems are magical things: invisible
-particles swirl into form as the programmer whispers C.</p>
+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.</p>
+
+<p>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 it.</p>
<p>Files: <a href="source.tar.gz">source.tar.gz</a></p>
</div>