summaryrefslogtreecommitdiffstats
path: root/_site/projects/e-reader/index
diff options
context:
space:
mode:
authorSadeep Madurange <sadeep@asciimx.com>2025-10-25 15:29:33 +0800
committerSadeep Madurange <sadeep@asciimx.com>2025-10-25 15:29:33 +0800
commit5066fbedd5b92797ceca9f6841785ee03b362a57 (patch)
tree62476f0ea942c370c764c6180c7c31c97f049322 /_site/projects/e-reader/index
parent6d80c9b4be3cc4ace918f0546e1238a680116042 (diff)
downloadwww-5066fbedd5b92797ceca9f6841785ee03b362a57.tar.gz
Add post layout.
Diffstat (limited to '_site/projects/e-reader/index')
-rw-r--r--_site/projects/e-reader/index/index.html81
1 files changed, 0 insertions, 81 deletions
diff --git a/_site/projects/e-reader/index/index.html b/_site/projects/e-reader/index/index.html
deleted file mode 100644
index dd58a14..0000000
--- a/_site/projects/e-reader/index/index.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<p>This project features a prototype e-reader powered by a 7.5-inch Waveshare e-paper display and an
-ESP-WROOM-32 development board.</p>
-
-<p>&lt;video style=”max-width:100%” controls=”” poster=thumb.png&gt;</p>
-<source src="ereader.mp4" type="video/mp4" />
-
-<p>&lt;/video&gt;</p>
-
-<h2 id="overview">Overview</h2>
-
-<p>In 2017, during a short stint as a project manager, 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.</p>
-
-<p>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.</p>
-
-<p>The following schematic outlines the electrical connections of the e-reader.</p>
-
-<p><img src="circuit.svg" alt="circuit" /></p>
-
-<p>The biggest challenge when building an e-reader using an ESP32 board is its low
-memory and lack of storage. My ESP-WROOM-32 board has 512 KB of SRAM and 4 MB
-of flash memory, which the freeRTOS, ESP-IDF, and my own program have to share.
-To put things into perspective, compare that to a Kindle Paperwhite, which has
-at least 256 MB of memory and 8 GB of storage.</p>
-
-<p>Despite its constraints, as microcontrollers go, ESP32 is a powerful
-system-on-a-chip with a 160 MHz dual-core processor and integrated WiFi. So, I
-thought it’d be amusing to embrace the constraints and build my e-reader using
-just a $5 MCU and the power of C programming.</p>
-
-<h2 id="the-file-format">The file format</h2>
-
-<p>The file format dictates the complexity of the embedded software. So, I’ll
-begin there. The e-reader works by downloading and rendering a rasterized
-monochrome image of a page (a .ebm file).</p>
-
-<p>The EBM file contains a series of bitmaps, where each bitmap corresponds to a
-page of a book sized to fit the e-paper display. Each byte contains information
-for rendering eight pixels. For my display, which has a resolution of 480x800,
-the bitmaps are laid out along 48 KB boundaries. This simple file format lends
-well to HTTP streaming, which is its main advantage, as we will soon see.</p>
-
-<p>The enclosed pdftoebm.py script in the tarball at the end of the page converts
-PDF documents to an EBM file. I use it to make EBM files before uploading them
-to a web server.</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 location of the
-file is configured via the <code class="language-plaintext highlighter-rouge">EBM_ARCH_URL</code> setting in the Kconfig.projbuild
-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 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
-two cores of the MCU 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 pin the two routines to each core.</p>
-
-<p>I designed the EBM format with HTTP streaming in mind. To download a page based
-on the current reading progress, the e-reader specifies the page offset and the
-chunk size using the HTTP Range header.</p>
-
-<h2 id="afterword">Afterword</h2>
-
-<p>It’s been six years since the car park and the displays. At the time, I knew
-nothing about embedded systems or display drivers. It took a long time to
-develop the skill set, but now, at last, I know how those displays worked and
-how to build my own.</p>
-
-<p>Files: <a href="source.tar.gz">source.tar.gz</a></p>