Skip to content

SamueleFacenda/tiny-reader

Repository files navigation

Contributors Forks Stargazers Issues project_license Build

Logo

TinyReader

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
  1. About The Project
  2. Getting Started
  3. Docs
  4. Usage
  5. Roadmap
  6. Contributing
  7. License
  8. Contact
  9. Acknowledgments
  10. Star History
  11. Gallery

About The Project

e reader ui

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.

(back to top)

Built With

  • Arduino CLI
  • ESP32 platform support through Nix
  • LittleFS
  • GxEPD2
  • Adafruit GFX Library
  • ArduinoJson
  • OpenSCAD for enclosure work

Hardware and cost

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:

(back to top)

Getting Started

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.

Prerequisites

  • Nix with flakes enabled
  • The CrowPanel ESP32 2.13 E-Paper HMI display board
  • A suitable LiPo battery

Installation

  1. Clone the repo
    git clone https://github.com/SamueleFacenda/tiny-reader.git
  2. Enter the development shell
    nix develop
  3. Compile the sketch with Arduino CLI
    arduino-cli compile --fqbn esp32:esp32:esp32
  4. 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.

Assembly

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)

(back to top)

Docs

  • 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).

Usage

  1. Flash the sketch to the board.
  2. Store plain text books on the device or upload them through the Wi-Fi page.
  3. Use the physical buttons to navigate the library, reading view, and status screens.
  4. Let the device enter deep sleep when idle to preserve battery life.
  5. Wake from the deep sleep using the home button.

See the source files for the screen flow and button mapping.

(back to top)

Roadmap

  • 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.

(back to top)

Contributing

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.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

License

Distributed under the EUPL. See LICENSE.md for more information.

(back to top)

Contact

Project Link: https://github.com/SamueleFacenda/tiny-reader

Use GitHub issues for bugs, feature requests, and build questions.

(back to top)

Acknowledgments

(back to top)

Gallery

TinyReader buttons interface

buttons view

TinyReader internal design

board opened

Star History

Star History Chart

About

Pocketable and cheap ebooks reader

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors