diff options
Diffstat (limited to '_site/projects/e-reader/index.html')
| -rw-r--r-- | _site/projects/e-reader/index.html | 48 |
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> |
