Tiny Journal
Multi-purpose View the repo
Tiny Journal is a lightweight journaling firmware for the M5Stack Cardputer that lets you create, edit, and organize plain‑text (and audio) notes stored on the device’s SD card, with optional Wi‑Fi sync to Google Drive and Bluetooth keyboard support.
auto-summary
43 stars · 4 forks
- Maintainer
- joejee90
- Capabilities
- ble
- Chip families
- esp32-s3
Runs on these boards
Unverified
- CardputerUnverified
Flash Cardputer
Unverified esp-atlas asserts this board↔firmware link at the shown trust tier — it does not guarantee your specific unit or the current firmware version. Flashing can erase keys/config and can brick the device. At your own risk.
README
Tiny Journal (M5Stack Cardputer)
Tiny Journal is a distraction-light journalling and notes firmware for the M5Stack Cardputer.
It stores plain-text notes on the SD card using simple folders and templates, and can optionally sync them to Google Drive over Wi-Fi.
Audio notes can be recorded anywhere with opt + tab.
Word jump with opt + left/right arrow keys.
Word delete with opt + backspace.
Page up/down with opt + up/down arrow keys.
Exit text editor with esc (fn + `)
Bluetooth keyboard support new for v2025.11.2 - go to Bluetooth menu in sync and connectivity, set keyboard to pairing mode, press enter on Cardputer. After 15 seconds, it should automatically connect.
Ctrl for word jump and word delete. Page up and down, Home and End supported.
Generic Bluetooth Low Energy keyboards only (doesn't work with Apple Magic Keyboards).
US and UK keyboard layouts only.
Updates 2026.6.6:
- USB mass storage support added.
- Improved file structure.
- Bluetooth keyboard support expanded.
- Now opens last opened file.
- Expanded Google Drive support, now sending audio notes.
- Audio notes now cleaner.
- Cataracts mode now usable instead of just a joke.
Features
- Plain-text notes written directly on the Cardputer keyboard
- Category-based folder structure on SD:
daily,notes,meetings,projects,travel,misc,archive
- Template-driven note creation (daily notes, meeting notes, etc.)
- Unique filenames for every note (even multiple notes on the same day)
- Audio note recording to
/journal/audiowith export to/journal/audio/export - Optional Wi-Fi + Google Drive sync for notes and exported audio
- On-device Wi-Fi setup UI (scan networks, enter password, save to SD)
- Safe “initialise / reset journal” function to rebuild folders, templates, and config files
Requirements
Hardware
- M5Stack Cardputer (ESP32-S3)
- microSD card formatted as FAT32
Software
- Arduino IDE 2.x
- ESP32 / M5Stack board support
- M5Stack Cardputer / M5Unified libraries (via Arduino Library Manager)
Building and flashing
-
Clone the repo:
git clone https://github.com/joejee90/Tiny-Journal.git cd Tiny-Journal
-
Open the main
.inofile (e.g.sketch_nov29a.ino) in Arduino IDE. -
In Tools → Board, select the appropriate M5Stack / Cardputer (ESP32-S3) board.
-
Select the correct Port for your Cardputer.
-
Click Verify to compile, then Upload to flash the firmware.
Alternatively, you can flash a prebuilt .bin from the Releases page using M5Burner or esptool.py.
SD card layout
On first run, Tiny Journal will create a /journal folder on the SD card and set everything up:
/journal
/templates
/daily
/notes
/meetings
/projects
/travel
/misc
/archive
/audio
/export
wifi.cfg
gdrive.cfg
theme.cfg
CONFIG-README.txt
- Templates in
/journal/templatesare used as the starting text for new notes. - Audio notes are recorded under
/journal/audio; exported audio files go to/journal/audio/export. CONFIG-README.txtis a plain-text guide written by the firmware to explain the config files on-device.
Configuration files
The firmware auto-generates placeholder config files and a helper file:
/journal/wifi.cfg/journal/gdrive.cfg/journal/theme.cfg/journal/CONFIG-README.txt
You can edit them either:
- on your computer with a text editor, or
- via the built-in settings menus on the Cardputer.
Wi-Fi config: wifi.cfg
Path: /journal/wifi.cfg
Format: two lines only
Line 1: WiFi SSID
Line 2: WiFi password
Example:
MyHomeWiFi
supersecretpassword123
On first run, the firmware creates something like:
YourSSIDHere
YourPasswordHere
You can:
- edit the file directly on the SD card, or
- configure Wi-Fi on the device:
Fn+`→ Settings → Sync & connectivity → WiFi setup
(the same steps are described on-device in CONFIG-README.txt).
Google Drive config: gdrive.cfg
Path: /journal/gdrive.cfg
Format: four lines
Line 1: refresh_token
Line 2: client_id
Line 3: client_secret
Line 4: folder_id
On first run the firmware writes placeholder values, for example:
YOUR_REFRESH_TOKEN_HERE
YOUR_CLIENT_ID_HERE
YOUR_CLIENT_SECRET_HERE
YOUR_DRIVE_FOLDER_ID_HERE
You need to replace these with real values from your own Google Cloud project and Google Drive:
refresh_token— OAuth refresh token for your appclient_id— from the OAuth client in Google Cloud Consoleclient_secret— from the same OAuth clientfolder_id— the ID of the Google Drive folder to sync into
This project assumes you already know how to:
- create an OAuth client and obtain a refresh token, and
- find a Google Drive folder ID.
If you are not comfortable with Google’s APIs, this firmware is probably not the best starting tutorial.
Basic usage
Navigation
- Use the cursor keys / D-pad to move the selection.
- Enter selects.
- On the Cardputer, Esc is
Fn+`(top-left key).
Notes and templates
- Choose a category (e.g. Daily, Notes, Meetings).
- When you create a new note:
- The firmware loads a matching template from
/journal/templates. - It saves the note into the category folder (e.g.
/journal/daily). - Filenames are based on the date, with a numeric suffix added where needed to keep every note name unique.
- The firmware loads a matching template from
Notes are automatically saved when:
- you exit the editor,
- you switch documents, or
- you power off the device.
There is no manual “Save” button; it writes changes as needed.
Audio notes
- Audio is recorded into
/journal/audio. - Exported files (for use on a computer) are written to
/journal/audio/export. - Exported files are eligible for Google Drive sync (see below).
Google Drive sync
Once wifi.cfg and gdrive.cfg are correctly filled in:
On the Cardputer:
Fn+`→ Settings → Sync & connectivity → Sync now
The status line will show:
- Wi-Fi connect / fail
- Google auth success / failure
- Upload finished or aborted state
Tiny Journal attempts to sync:
- text notes in the journal folders
- exported audio notes in
/journal/audio/export
It deliberately does not upload:
wifi.cfg,gdrive.cfg,theme.cfgCONFIG-README.txt- other internal config / system files
Reset / initialise journal
From the Settings / Utilities menu there is an option to reset / initialise the journal:
- Re-creates the
/journalfolder structure. - Restores default templates and placeholder config files.
- Lets you decide whether to keep or delete existing Wi-Fi and Google Drive configs.
This may delete existing notes and audio, so treat it as a “fresh start” option.
Licence
This project uses the same basic licence terms as the Cardputer Camera Companion project:
- You may clone, fork, and modify the source code for your own personal, non-commercial use.
- You may not sell:
- compiled binaries of this firmware, or
- devices with this firmware pre-installed,
without explicit permission from the author.
- You may share forks and modified versions non-commercially, as long as:
- this licence notice (or an equivalent) is kept, and
- it is clear that your fork is unofficial and not supported by the original author.
- The software is provided “as is”, without any warranty of any kind. You use it entirely at your own risk.
In particular:
- The Wi-Fi and Google Drive sync features are experimental.
- There is no guarantee against bugs, crashes, or data loss.
- The author accepts no responsibility for:
- lost or corrupted notes,
- damaged SD cards,
- failed or partial syncs,
- or any other problems arising from use of this firmware.
If you want to use Tiny Journal (or any substantial part of its code) in a commercial context, please contact the author first.
Read the full README on GitHub
source github.com/joejee90/Tiny-Journal