TinyReader is a small and easy to assembly e-book reader.
It is intended for mobile reading, it's highly pocketable and supports wireless ebooks transfer.
Explore the docs »
View Pictures
·
Report Bug
·
Request Feature
Table of Contents
TinyReader is a small and easy to assembly e-book reader. It is intended for mobile reading, it's highly pocketable and supports wireless ebooks transfer.
The project is experimental and practical rather than polished. Mechanical fit, battery choice, and power behavior depend on the exact hardware configuration and enclosure you build around it.
Features:
- low battery usage thanks to e-ink display and automatic deep sleep
- custom font with latin-1 encoding support
- fast page turning thanks to partial refreshes
- high readability: the font is actually bigger than a normal book font, combined with a small display which requires minimal eye movement it results in an high read comfort.
- Arduino CLI
- ESP32 platform support through Nix
- LittleFS
- GxEPD2
- Adafruit GFX Library
- ArduinoJson
- OpenSCAD for enclosure work
TinyReader primary goals were to build a pocketable and cheap ebooks reader. The total cost is lower than 30€ (20€ without expeditions), the components used are:
- CrowPanel ESP32 2.13 display board: 11.9$
- A 700/800mAh LiPo battery (602060 or 603040): <10€
- 3d printed enclosure: <0.1€
The repository includes a Nix flake, so the Arduino toolchain and project dependencies can be gathered with nix develop.
The scad source is available here or the rendered stl can be downloaded directly from printables.
- Nix with flakes enabled
- The CrowPanel ESP32 2.13 E-Paper HMI display board
- A suitable LiPo battery
- Clone the repo
git clone https://github.com/SamueleFacenda/tiny-reader.git
- Enter the development shell
nix develop
- Compile the sketch with Arduino CLI
arduino-cli compile --fqbn esp32:esp32:esp32
- Flash the firmware to the board (port may vary)
arduino-cli upload -p /dev/ttyUSB0 --fqbn esp32:esp32:esp32s3 --verbose
The flake provides the Arduino CLI, ESP32 board packages, Python serial support, and OpenSCAD.
No tool is actually required for the device assembly. Some more work might be required depending on the battery size.
The board features a non so common SH1.0-2Pin battery socket so an adaptor might be necessary.
If you are using a 603040 battery you might want to remove the UART and GPIO ports to reduce the device height. For 602060 batteries it's not necessary, they fit between the ports (but have smaller capacity)
- tiny-reader.ino is the Arduino entrypoint. It wires the display, input, storage, and Wi-Fi flow together.
- tiny_reader_2-13_case.scad is the OpenSCAD enclosure model. You can find the rendered version here on pritables.
- The OpenSCAD model references a CrowPanel board STL for fit checking and conversion. The board asset can be converted from the vendor archive at 00-2-13_view_asm.rar.
- The firware is built with customization in mind, take a look at the config file for all the available customization options (other boards might be supported as well).
- Flash the sketch to the board.
- Store plain text books on the device or upload them through the Wi-Fi page.
- Use the physical buttons to navigate the library, reading view, and status screens.
- Let the device enter deep sleep when idle to preserve battery life.
- Wake from the deep sleep using the
homebutton.
See the source files for the screen flow and button mapping.
- Improve the library and book navigation flow.
- Refine the Wi-Fi user interface.
- Add a dedicated sleep-screen experience.
- Improve battery status reporting when a usable ADC input is available.
- Update only the necessary parts of the screen during Wi-Fi uptime refreshes.
- Evaluate compressed book storage to reduce flash usage.
- Reduce friction in navigation and return paths between screens.
- Investigate ghosting problems in sunlight.
See the open issues for the current list of planned work.
Contributions are welcome. If you have an idea that would make TinyReader better, open an issue or submit a pull request with a clear description of the change.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Distributed under the EUPL. See LICENSE.md for more information.
Project Link: https://github.com/SamueleFacenda/tiny-reader
Use GitHub issues for bugs, feature requests, and build questions.


