tinymakerwifi.com Contents
User Manual · v0.14.3

TinyMakerWifi

WiFi, wireless upload & over-the-air updates for the TinyMaker resin printer

by Viktoras Sidlauskas · @slibbinas · tinymakerwifi.com

The palm-sized TinyMaker MSLA resin 3D printer

1What this firmware adds

TinyMakerWifi is a modified firmware for the open-source TinyMaker MSLA (resin) 3D printer. It keeps everything the original firmware does and adds a wireless layer on top — so you can send models straight from your slicer and update the printer without ever touching the SD card or a USB cable.

Everything wireless can be switched off right on the printer (System → Advanced), so you can always fall back to plain, offline SD-card printing.

💡 Already have a printer running this firmware? Jump to Connecting to WiFi. If you are installing it for the first time, start at Installing the firmware.

2Quick start

  1. Power on. On first boot the printer opens a TinyMaker-Setup WiFi hotspot.
  2. Join it from your phone and pick your home WiFi in the little page that pops up. The printer reboots and connects (~5 s).
  3. Find the printer’s address under System → WiFi Info (or use tinymaker.local).
  4. Send a model from PrusaSlicer (“Send to printer”), or copy an .sl1/.zip onto the SD card.
  5. Print. Pick the model in the Print menu and press OK — or start it from the web dashboard.

3Installing the firmware (first time)

This one-time step is done over USB. After it, every future update is wireless (see Updating the firmware). If your printer already runs TinyMakerWifi, skip this section.

Which file?

Releases contain two files — they are not interchangeable:

FileUsed forHow
firmware-full.binFirst-time USB flashingflash at address 0x0
firmware.binWireless updates only, laterbrowser, http://tinymaker.local/update
⚠️ For the USB flash you need firmware-full.bin. Flashing firmware.bin over USB leaves the printer unable to boot — it has no bootloader or partition table.

Flash it — easiest way (browser, nothing to install)

  1. Download the latest firmware-full.bin from the project’s Releases page.
  2. Open esptool.spacehuhn.com in Chrome or Edge, plug in the printer via USB and click Connect.
  3. Remove any pre-filled rows, click ADD, choose firmware-full.bin, and set its address to 0.
  4. Click Program, wait for it to finish, then power-cycle the printer.
🔌 Windows doesn’t see the printer? Install the CH340 USB driver (CH341SER.EXE, in the repo’s Driver folder), then try again. The official Espressif Flash Download Tool is an alternative — see the project README for its exact settings (SPI 40 MHz / DIO / 4 MB, file at 0x0).

The first boot after flashing takes a few extra seconds and starts the TinyMaker-Setup hotspot. Printer settings (exposure, layer height…) return to factory defaults — unless a settings backup is on the SD card: the printer then offers to restore everything on first boot (see Backup & restore).

4Connecting to WiFi

  1. Power on the printer. On first boot it starts a TinyMaker-Setup access point.
  2. Connect to it with your phone — a setup page opens automatically (or browse to http://192.168.4.1).
  3. Choose your home WiFi network and enter the password.
  4. The printer connects and briefly shows its IP address. Credentials are stored, so later boots connect on their own in about 5 seconds.
The TinyMaker-Setup captive portal as seen on a phone

If the saved network can’t be reached, the printer simply boots offline after 15 s — printing from the SD card works as always. WiFi status, signal strength and IP are always under System → WiFi Info.

Resetting WiFi

To move the printer to another network, erase the stored credentials:

5The printer screens

The small status display drives the whole on-printer interface — WiFi setup, upload progress, the resin estimate, the device toggles and self-update. Three buttons: Back, Up and OK. A green (connected) or grey (offline) dot on the main menu shows WiFi status.

A montage of the TinyMakerWifi printer UI screens

The System menu is where the new features live: WiFi Info, Advanced (device toggles), Update (firmware) and About (version and lifetime print hours).

The printer emulates the Prusa SL1 network protocol, so PrusaSlicer’s “Send to printer” works out of the box.

  1. Import the TinyMaker printer profile (TinyMaker.ini, in the repo) via File → Import → Import Config.
  2. Add a physical printer: click the cog next to the printer profile → Add physical printer. Set Hostname to tinymaker.local (or the IP from System → WiFi Info); the API key can be any text.
  3. Click Test — it should report success (the printer must be on and on WiFi).
  4. Slice, then press Send to printer. The printer shows Receiving → Unpacking → Model ready, and the model appears in the Print menu.
PrusaSlicer: adding a physical printer pointing at tinymaker.local PrusaSlicer: the Send to printer button
⚠️ Always slice with the 0.05 mm profile. Maximum model size: 1200 layers = 60 mm.
💡 Layer height works differently than on an FDM printer. The printed layer height is decided by the printer’s own setting (Layer Height, in the printer’s Settings menu or the dashboard’s Settings tab) — not by the sliced file. The file is just a stack of 0.05 mm images: at the 0.05 mm setting the printer uses every image, at 0.10 mm it takes every other one. That’s why you always slice at 0.05 mm — the printer setting then chooses the real layer height, and a file sliced at 0.10 mm would print half-height.

No WiFi? Copy an .sl1 or .zip (exported by PrusaSlicer or UVtools) into the root of the SD card. It appears in the Print menu in blue, among the models.

8Starting & deleting models

In the Print menu:

9Resin estimate & level tracking

The printer has no resin sensor — instead it keeps count. Every printed layer’s cured volume is subtracted from the VAT level, and the estimate survives reboots and firmware updates.

Estimate before printing

On a model’s print preview, press Up to estimate the resin it needs. It is shown in ml and in vat fills — e.g. 12.4 ml = 0.8 VAT. Your VAT size is adjustable (10–40 ml, default 15) in Settings. Live ml is shown while printing.

Level tracking & refills

⚠️ It’s an estimate, not a measurement — it can’t account for resin sticking to models or drips. Treat it as a planning aid and glance at the real VAT now and then. Refills you don’t confirm won’t be counted.

10The web dashboard

Open the printer’s IP address in any browser for the full dashboard: live print status and controls, SD-card management with one-click start/import, device settings and firmware updates — in tabs styled to match the printer.

The TinyMakerWifi web dashboard: live status, controls and SD manager

On a larger screen it spreads into two columns:

The dashboard on a desktop screen: status card with UV LED time and the Manual link, SD manager with models

3D preview & live print progress

Open a model’s details and press Preview 3D: your browser rebuilds the shape from the sliced layers and draws it inside the build-volume box — so you can tell models apart without printing them. Start a print and the same view becomes a live progress render: the printed part fills in with color, the rest stays a ghost outline. It costs the printer nothing (the browser renders from a few prefetched layers).

The dashboard while printing: status with remaining time and finish-time estimate, print controls and the live 3D progress render

11Advanced menu & switches

System → Advanced on the printer holds the device toggles — OK changes a value, Back returns:

ItemWhat it does
Screen timeoutBlank the status screen after 30 s…10 min of inactivity (Off = never).
Dry runTest prints without UV — motion and display only. Great for checking mechanics or a new model without wasting resin. Note: while Dry run is on, the UV LED stays off everywhere, including the exposure test below.
VAT refilledPress after refilling — restarts the level estimate from a full VAT.
Low resin pauseOn = the print pauses for a refill when the estimate runs low.
Low resin warnThe warning/pause threshold, 1–3 ml (OK cycles).
Ask refillOn = every print starts with a “VAT refilled?” question.
WiFiOn/Off — the whole network (web, PrusaSlicer upload, MQTT, self-update).
Boot updateOn = the printer checks for new firmware right after WiFi connects at boot and offers Install / Later on the screen.
Exposure testCures an 8-bar calibration strip straight from the printer — each bar gets a different exposure time around your Regular setting. Pick the crispest bar and set its time in Settings. Resin in the vat, no build plate.
Boot animationWhich animation plays at power-on — OK cycles Default and every animation installed on the SD card (see Boot animations below).
Web controlOn/Off — browser actions. Off = the dashboard turns view-only; slicer upload and MQTT keep working.
MQTTOn/Off (shown once MQTT is configured in the dashboard).

Both switches default to On and stay On after upgrading from an older version — nothing changes until you change it.

Exposure calibration test

Exposure time is the single most important resin parameter — and every resin (even every color) cures differently. The test finds your resin’s time in one go: the printer cures an 8-bar strip straight from its masking LCD, each bar with a different exposure. No slicer, no SD file.

The bar times are proportional to your current Regular exposure (R) — from 40 % to 160 % of it, so the spread is meaningful for fast and slow resins alike. Bar 5 (100 %) is always your current setting:

Bar (dots)12345678
% of R40557085100115135160
R = 14 s68101214161922

The ladder follows your setting automatically. To test shorter (or longer) times, just change Regular exposure in one place — dashboard → Settings → Regular exposure → Save, or the printer’s Settings menu — and the test range recalculates itself; the Advanced menu row shows the current range (e.g. “2-16s strip”). After the test, set the winning bar’s time as your final value.

💡 Count the dots, not the sides. Each bar carries its number as holes near one end — 1 dot = bar 1 (shortest) … 8 dots = bar 8 (longest). The strip stays identifiable no matter how it is flipped or mirrored (the vat view often is!), and the dots double as a fine-detail check: on a well-exposed bar the holes come out round and open.
  1. Prepare: resin in the vat (stir it first!), build plate removed — the strip cures directly on the vat film. Make sure Dry run is off.
  2. Run: System → Advanced → Exposure test → Start. A progress bar runs for the longest bar’s time (~half a minute); Back cancels.
  3. Peel & rinse: gloves on, lift the strip off the film with a soft plastic scraper, rinse in IPA, dry.
  4. Judge the bars against the light:
    • Under-exposed (short end): thin, rubbery, fuzzy edges, breaks or partly stuck to the film.
    • Just right: sturdy, sharp clean edges, even thickness.
    • Over-exposed (long end): fatter than its neighbours, bloated edges, a thin parasitic film around it (light bleed).
    • All bars nearly identical? Your resin cures faster than the shortest step — lower Regular exposure (e.g. to 8 s) and run the test again. Note: a fresh, unwashed strip always feels rubbery; judge after an IPA rinse, and flexible resins (ABS-like) stay bendy by design.
  5. Set it: pick the lowest time that still cures sharp and sturdy (best detail; if torn between two, take the longer one) and enter it as Regular exposure in Settings. Identify bars by their dots (1 dot = shortest) and read the time from the table above. Keep Base exposure at roughly 2.5× the new Regular — it’s about first-layer adhesion, not detail.
A real exposure test strip cured in the vat: eight bars with dot markers, holes crisp on the long-exposure side and sealing over toward the short side
A real test strip in the vat — count the dots: bar N carries N holes, so flipping or mirroring never confuses it. On the long-exposure side the holes cured round and open; toward the short side the bars turn translucent and the holes seal over. Pick the lowest bar whose holes are still open and edges sharp.
💡 Cold resin cures slower — run the test at the temperature you actually print at. Check the vat for leftovers afterwards; a Clean Resin Vat cycle picks up anything you missed.

Advanced: your resin’s working curve (Jacobs)

The test strip holds more data than “which bar looks best”. Cure depth grows with the logarithm of exposure time — that’s why doubling the time doesn’t double the thickness, and why you judge bars by edges and holes, not by how thick they feel. If you want numbers:

  1. Measure the thickness of at least 3–4 bars with calipers (skip broken ones).
  2. Plot thickness against ln(seconds) (any spreadsheet; use the bar times from the table above). The points form a straight line — that’s the resin’s working curve.
  3. The slope is Dp (how deep light penetrates); where the line crosses zero thickness is Ec (the minimum exposure that cures anything). Together: depth = Dp · ln(t / Ec).
  4. Read your time: for reliable layer bonding you want the cure depth around 2× your layer height (0.1 mm for 0.05 mm layers) — find where the line reaches that thickness and use that time as Regular exposure.
💡 This is the same method resin manufacturers use to publish Dp/Ec — with a caliper and a strip you can characterize any unknown resin in one test.

Boot animations

The printer can play a short animation on its screen at power-on — and you can swap it. Installed animations live on the SD card and are picked in two places:

Getting new animations onto the printer:

Boot animations were contributed by Tanner Steorts (@Tann2019).

12Updating the firmware

🔒 Firmware flashing is blocked while printing, and the web paths need Web control on. (PrusaSlicer upload is separate and works any time.)

Three ways to update:

  • On the printer (no computer): System → Update shows the installed version and checks GitHub for the latest. If a newer one exists, the Install button lights up — press OK and the printer downloads and flashes it over WiFi.
  • From the dashboard — the Update tab: installed vs latest with an Install latest button, a version picker (install any released version; downgrades ask to confirm) and a file upload for a firmware.bin.
  • For developers: PlatformIO OTA via the tinymaker-ota environment (open System → Update on the printer first — that path keeps the strict gate).
The dashboard Update tab: installed vs latest, install latest, version picker and file upload

Two comforts while updating: the printer also checks by itself — shortly after WiFi connects at boot it looks for a newer version and shows “Update available — Install / Later” on the screen (choosing Later offers to turn the check off; the switch lives in System → Advanced → Boot update and in dashboard Settings). And when you start an install from the browser, the dashboard locks under an “Updating firmware” overlay and reloads itself when the printer is back — no guessing whether it finished.

Don’t worry about a failed update. The printer keeps two firmware copies (dual OTA partition), so a failed flash falls back to the previous one. Just don’t power off mid-update.

Backup & restore

Everything you have configured — print settings, device toggles, MQTT, even the lifetime print and UV LED counters — fits in one backup file. In the dashboard’s Settings tab:

  • Download backup — saves tinymaker-backup.json to your computer.
  • Backup to SD — stores the file on the printer’s SD card. Do this before a full USB reflash: the reflash wipes all settings, but on the first boot the printer finds the backup on the SD card and asks “Restore settings from SD backup?” — one press and everything is back. Settings shows when the SD backup was made, so you can tell at a glance whether it’s fresh.
  • Restore from SD — applies the backup stored on the SD card at any time (the button is enabled only when one is present).
  • Restore from file — applies an uploaded backup at any time.
💡 WiFi credentials are managed separately (by the WiFi setup portal) and are not in the backup — after a full USB reflash you reconnect to WiFi once, everything else restores. The backup includes your MQTT password, so treat the file accordingly.
The Settings tab with the Backup & restore buttons: Download backup, Backup to SD, Restore from file

13Home Assistant (MQTT) & Telegram

Two optional ways for the printer to reach you, both configured in the dashboard’s Settings tab (the Network & integrations card).

Home Assistant (MQTT)

Configure an MQTT broker and the printer publishes itself to Home Assistant with auto-discovery: print state, current layer, resin used, resin left + a low-resin alert, and run/remaining time — all as HA sensors you can put on dashboards or automate notifications on.

Telegram notifications

No Home Assistant? The printer can message your phone directly through a Telegram bot when a print finishes (with the print time and resin used), pauses for a low-resin refill, or is canceled.

Setup takes two minutes — the same steps are shown inline in the dashboard (the ? help next to the Telegram switch):

  1. Create a bot: in Telegram, message @BotFather, send /newbot and follow the prompts. BotFather replies with a bot token.
  2. Find your chat id: message @userinfobot — it replies with your numeric id. Then open your new bot and press Start once, so it is allowed to message you.
  3. Enter both in the dashboard: Settings → Network & integrations → enable Telegram, paste the token and the chat id, and Save config.
  4. Press “Send test” — a test message should arrive in Telegram within a few seconds.
🔒 The bot token is a secret — the dashboard never shows it back, only its last four characters (ends in XXXX), and it is included in your settings backup, so treat the backup file accordingly. The printer talks directly to Telegram over HTTPS; nothing goes through third-party servers.

14Troubleshooting & FAQ

The printer won’t connect to WiFi

After 15 s it boots offline — SD printing still works. To retry, reset WiFi (System → WiFi Info → OK, or hold Back while powering on) and set it up again.

PrusaSlicer “Test” fails

Check the printer is on and shows a green dot / an IP under System → WiFi Info. Use that IP if tinymaker.local doesn’t resolve on your network. The API key value doesn’t matter.

The dashboard opens but every button is disabled

Web control is off. Turn it back on on the printer: System → Advanced → Web control. (Slicer upload and MQTT are unaffected by this switch.)

My print looks half-height / wrong

Slice with the 0.05 mm profile. At a 0.10 mm setting the printer uses every other image by design.

“Resin left” looks wrong

It’s an estimate that only counts confirmed refills. Press VAT refilled after topping up, and keep Ask refill on so it stays honest.

A firmware update failed

The dual OTA partition keeps the previous firmware, so the printer should still boot. Try again from System → Update, or upload a firmware.bin from the dashboard’s Update tab.

How do I keep my settings through a USB reflash?

Before flashing: dashboard → Settings → Backup to SD. After the reflash the printer finds the backup on the SD card and offers to restore it on first boot. Only WiFi needs to be set up again.

How do I go fully offline?

System → Advanced → WiFi → Off. The printer behaves like the original firmware; turn WiFi back on in the same place whenever you like.

Credits

TinyMakerWifi — the WiFi, wireless-upload and over-the-air-update firmware described in this manual — is created and maintained by Viktoras Sidlauskas (@slibbinas): the WiFi stack, wireless upload, OTA self-update, the 3D model preview & live print progress, and the resin estimation & VAT tracking.

  • The initial web dashboard and the Advanced menu (WiFi & Web-control switches) — contributed by Brian Karmelk (@Briadark).
  • Boot animations (the on-device library, playback and one-click install) — contributed by Tanner Steorts (@Tann2019).
  • Original TinyMaker firmware & printer — by the TinyMaker3D Team.
  • Additional fixes, testing and ideas from the TinyMaker community.

The firmware is MIT-licensed; the TinyMaker hardware is CC BY-NC-SA 4.0. If TinyMakerWifi is useful to you, you can buy me a coffee — thank you!